From dad118cdf0ebc5834f125c2d498bd89dfd4bbbfe Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Thu, 10 Sep 2026 18:40:32 +0000 Subject: [PATCH] Add 5 html net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: rendering-html-documents, working-with-html-documents Source: AI Search API Tutorials: - How to render HTML in C# with Aspose.Html – full guide - How to use HtmlSaveOptions in C# with Aspose.HTML - How to enable antialiasing for HTML image rendering in C# - How to improve text clarity in Aspose.HTML with hinting - How to load HTML document from file with Aspose.HTML in C# Auto-generated by Professionalize.Tutorials Agent --- .../net/rendering-html-documents/_index.md | 7 + .../_index.md | 185 ++ .../_index.md | 294 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 2 + .../_index.md | 234 +++ .../_index.md | 310 ++++ .../net/rendering-html-documents/_index.md | 20 + .../_index.md | 184 ++ .../_index.md | 290 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 4 + .../_index.md | 233 +++ .../_index.md | 308 ++++ .../net/rendering-html-documents/_index.md | 5 + .../_index.md | 243 +++ .../_index.md | 294 ++++ .../_index.md | 303 ++++ .../net/working-with-html-documents/_index.md | 3 + .../_index.md | 237 +++ .../_index.md | 312 ++++ .../net/rendering-html-documents/_index.md | 10 + .../_index.md | 243 +++ .../_index.md | 294 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 3 + .../_index.md | 236 +++ .../_index.md | 313 ++++ .../net/rendering-html-documents/_index.md | 6 + .../_index.md | 241 +++ .../og-image.png | Bin 0 -> 45701 bytes .../_index.md | 296 ++++ .../og-image.png | Bin 0 -> 47486 bytes .../_index.md | 308 ++++ .../og-image.png | Bin 0 -> 45390 bytes .../net/working-with-html-documents/_index.md | 2 + .../_index.md | 236 +++ .../og-image.png | Bin 0 -> 47142 bytes .../_index.md | 313 ++++ .../og-image.png | Bin 0 -> 50975 bytes .../net/rendering-html-documents/_index.md | 1533 ++++++++++++++++- .../_index.md | 188 ++ .../_index.md | 294 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 5 + .../_index.md | 237 +++ .../_index.md | 314 ++++ .../net/rendering-html-documents/_index.md | 7 + .../_index.md | 187 ++ .../_index.md | 298 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 6 + .../_index.md | 236 +++ .../_index.md | 312 ++++ .../net/rendering-html-documents/_index.md | 9 + .../_index.md | 240 +++ .../_index.md | 297 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 7 + .../_index.md | 236 +++ .../_index.md | 313 ++++ .../net/rendering-html-documents/_index.md | 11 +- .../_index.md | 187 ++ .../_index.md | 297 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 3 + .../_index.md | 236 +++ .../_index.md | 315 ++++ .../net/rendering-html-documents/_index.md | 19 +- .../_index.md | 239 +++ .../_index.md | 293 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 5 + .../_index.md | 232 +++ .../_index.md | 308 ++++ .../net/rendering-html-documents/_index.md | 16 +- .../_index.md | 188 ++ .../_index.md | 297 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 6 + .../_index.md | 237 +++ .../_index.md | 313 ++++ .../net/rendering-html-documents/_index.md | 8 + .../_index.md | 243 +++ .../_index.md | 297 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 5 + .../_index.md | 237 +++ .../_index.md | 315 ++++ .../net/rendering-html-documents/_index.md | 16 +- .../_index.md | 243 +++ .../_index.md | 297 ++++ .../_index.md | 303 ++++ .../net/working-with-html-documents/_index.md | 3 + .../_index.md | 236 +++ .../_index.md | 313 ++++ .../net/rendering-html-documents/_index.md | 11 +- .../_index.md | 183 ++ .../_index.md | 290 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 3 + .../_index.md | 233 +++ .../_index.md | 308 ++++ .../net/rendering-html-documents/_index.md | 9 + .../_index.md | 185 ++ .../_index.md | 294 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 4 + .../_index.md | 236 +++ .../_index.md | 310 ++++ .../net/rendering-html-documents/_index.md | 7 + .../_index.md | 188 ++ .../_index.md | 297 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 6 + .../_index.md | 257 +++ .../_index.md | 314 ++++ .../net/rendering-html-documents/_index.md | 7 + .../_index.md | 243 +++ .../_index.md | 295 ++++ .../_index.md | 301 ++++ .../net/working-with-html-documents/_index.md | 2 + .../_index.md | 237 +++ .../_index.md | 314 ++++ .../net/rendering-html-documents/_index.md | 11 +- .../_index.md | 187 ++ .../_index.md | 295 ++++ .../_index.md | 304 ++++ .../net/working-with-html-documents/_index.md | 5 + .../_index.md | 237 +++ .../_index.md | 312 ++++ .../net/rendering-html-documents/_index.md | 6 + .../_index.md | 188 ++ .../_index.md | 294 ++++ .../_index.md | 303 ++++ .../net/working-with-html-documents/_index.md | 8 + .../_index.md | 237 +++ .../_index.md | 313 ++++ .../net/rendering-html-documents/_index.md | 10 +- .../_index.md | 186 ++ .../_index.md | 296 ++++ .../_index.md | 303 ++++ .../net/working-with-html-documents/_index.md | 8 + .../_index.md | 237 +++ .../_index.md | 312 ++++ .../net/rendering-html-documents/_index.md | 8 + .../_index.md | 185 ++ .../_index.md | 296 ++++ .../_index.md | 302 ++++ .../net/working-with-html-documents/_index.md | 5 + .../_index.md | 234 +++ .../_index.md | 311 ++++ .../net/rendering-html-documents/_index.md | 6 + .../_index.md | 187 ++ .../_index.md | 298 ++++ .../_index.md | 305 ++++ .../net/working-with-html-documents/_index.md | 9 + .../_index.md | 237 +++ .../_index.md | 312 ++++ .../net/rendering-html-documents/_index.md | 6 + .../_index.md | 244 +++ .../_index.md | 297 ++++ .../_index.md | 303 ++++ .../net/working-with-html-documents/_index.md | 4 + .../_index.md | 236 +++ .../_index.md | 312 ++++ 166 files changed, 33004 insertions(+), 23 deletions(-) create mode 100644 html/arabic/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/arabic/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/arabic/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/arabic/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/arabic/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/chinese/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/chinese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/chinese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/chinese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/chinese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/czech/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/czech/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/czech/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/czech/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/czech/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/dutch/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/dutch/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/dutch/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/dutch/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/dutch/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/english/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/english/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/og-image.png create mode 100644 html/english/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/english/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/og-image.png create mode 100644 html/english/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/english/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/og-image.png create mode 100644 html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/og-image.png create mode 100644 html/english/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/english/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/og-image.png create mode 100644 html/french/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/french/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/french/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/french/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/french/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/german/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/german/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/german/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/german/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/german/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/greek/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/greek/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/greek/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/greek/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/greek/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/hindi/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/hindi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/hindi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/hindi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/hindi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/hongkong/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/hongkong/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/hongkong/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/hongkong/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/hongkong/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/hungarian/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/hungarian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/hungarian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/hungarian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/hungarian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/indonesian/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/indonesian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/indonesian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/indonesian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/indonesian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/italian/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/italian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/italian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/italian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/italian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/japanese/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/japanese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/japanese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/japanese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/japanese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/korean/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/korean/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/korean/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/korean/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/korean/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/polish/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/polish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/polish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/polish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/polish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/portuguese/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/portuguese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/portuguese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/portuguese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/portuguese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/russian/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/russian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/russian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/russian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/russian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/spanish/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/spanish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/spanish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/spanish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/spanish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/swedish/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/swedish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/swedish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/swedish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/swedish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/thai/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/thai/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/thai/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/thai/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/thai/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/turkish/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/turkish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/turkish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/turkish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/turkish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md create mode 100644 html/vietnamese/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md create mode 100644 html/vietnamese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md create mode 100644 html/vietnamese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md create mode 100644 html/vietnamese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md create mode 100644 html/vietnamese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md diff --git a/html/arabic/net/rendering-html-documents/_index.md b/html/arabic/net/rendering-html-documents/_index.md index 20f2e8caa..fbbed0090 100644 --- a/html/arabic/net/rendering-html-documents/_index.md +++ b/html/arabic/net/rendering-html-documents/_index.md @@ -77,6 +77,8 @@ url: /ar/net/rendering-html-documents/ ### [عرض مستند SVG بصيغة PNG في .NET باستخدام Aspose.HTML](./render-svg-doc-as-png/) اكتشف قوة Aspose.HTML لـ .NET! تعرّف على كيفية عرض مستند SVG بتنسيق PNG بسهولة. انغمس في الأمثلة والأسئلة الشائعة خطوة بخطوة. ابدأ الآن! ### [كيفية عرض HTML في C# – دليل كامل لتنسيق الفقرات](./how-to-render-html-in-c-complete-guide-to-styling-paragraphs/) +### [كيفية عرض HTML في C# – دليل كامل](./how-to-render-html-in-c-with-aspose-html-full-guide/) +تعلم كيفية عرض مستندات HTML باستخدام C# و Aspose.HTML في دليل شامل خطوة بخطوة. ### [كيفية عرض HTML – دليل كامل مع معالج موارد مخصص](./how-to-render-html-complete-guide-with-custom-resource-handl/) تعلم كيفية عرض HTML باستخدام Aspose.HTML لـ .NET مع معالج موارد مخصص لتخصيص تحميل المحتوى وتحسين الأداء. ### [كيفية عرض HTML كـ PNG – دليل كامل خطوة بخطوة](./how-to-render-html-to-png-complete-step-by-step-guide/) @@ -85,6 +87,11 @@ url: /ar/net/rendering-html-documents/ تعلم خطوة بخطوة كيفية تحويل مستندات HTML إلى صور PNG باستخدام Aspose.HTML في .NET. ### [كيفية تحويل HTML إلى صورة باستخدام C# – دليل كامل](./how-to-render-html-to-an-image-with-c-complete-guide/) تعلم خطوة بخطوة كيفية تحويل ملفات HTML إلى صور باستخدام C# مع Aspose.HTML في هذا الدليل الكامل. +### [كيفية تمكين التنعيم لتصوير صور HTML في C#](./how-to-enable-antialiasing-for-html-image-rendering-in-c/) +تعلم كيفية تمكين التنعيم عند تصيير صور HTML في C# باستخدام Aspose.HTML. + +### [كيفية تحسين وضوح النص في Aspose.HTML باستخدام التلميحات](./how-to-improve-text-clarity-in-aspose-html-with-hinting/) +تعلم كيفية تحسين وضوح النص في مستندات HTML باستخدام تقنية التلميحات في Aspose.HTML. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/arabic/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md b/html/arabic/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md new file mode 100644 index 000000000..ccaff6294 --- /dev/null +++ b/html/arabic/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-10 +description: كيفية تمكين تقنية التنعيم (antialiasing) لتصوير صور HTML في C#. تعلّم + كيفية عرض الصور بجودة عالية باستخدام Aspose.HTML وتحويل HTML إلى صورة في بضع خطوات. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to enable antialiasing +- render html to image +- high quality image rendering +- how to render html image +language: ar +lastmod: 2026-09-10 +og_description: كيفية تمكين تقنية مضاد التعرجات لتصوير صور HTML في C#. يوضح هذا الدليل + كيفية الحصول على تصوير عالي الجودة للصور وكيفية عرض صورة HTML باستخدام Aspose.HTML. +og_image_alt: Diagram illustrating how to enable antialiasing in Aspose.HTML image + rendering +og_title: تفعيل تنعيم الحواف لتصوير الصور HTML في C# – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to enable antialiasing for HTML image rendering in C#. Learn high + quality image rendering with Aspose.HTML and render HTML to image in a few steps. + headline: How to enable antialiasing for HTML image rendering in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- image rendering +- antialiasing +title: كيفية تمكين التنعيم عند عرض صور HTML في C# +url: /ar/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية تمكين التنعيم لتصوير صور HTML في C# + +إذا كنت بحاجة إلى **كيفية تمكين التنعيم** أثناء تحويل محتوى الويب إلى صورة bitmap، فإن هذا الدليل يقدم لك حلًا كاملًا وجاهزًا للتنفيذ. جودة تصوير الصور العالية مهمة عندما تقوم بإنشاء صور مصغرة أو ملفات PDF أو لقطات شاشة يجب أن تبدو واضحة على أي شاشة. في نهاية هذا الدليل ستكون قادرًا على تحويل HTML إلى صورة بحواف ناعمة دون أي تشوهات متعرجة. + +سنستعرض إعداد Aspose.HTML، وتكوين التنعيم، وحفظ النتيجة كملف PNG. لا تحتاج إلى أدوات خارجية، والكود يعمل على Windows وLinux وmacOS. يغطي الدليل أيضًا المشكلات الشائعة مثل معالجة DPI واستخدام الذاكرة، بحيث يمكنك تعديل النهج للمعالجة الدفعية أو خدمات الويب. + +## المتطلبات المسبقة + +- .NET 6.0 SDK أو لاحق (العينة تستخدم .NET 6، لكن أي نسخة .NET Core/Framework تدعم Aspose.HTML تعمل) +- رخصة صالحة لـ Aspose.HTML for .NET (أو مفتاح تقييم مجاني) +- إلمام أساسي بـ C# و Visual Studio / VS Code +- حزمة NuGet `Aspose.Html` مثبتة: + +```bash +dotnet add package Aspose.Html +``` + +## الخطوة 1: إنشاء مستند HTML أساسي + +أولاً، أنشئ HTML الذي تريد تصييره. يمكنك تحميل سلسلة نصية، ملف، أو عنوان URL. في هذا المثال نستخدم سلسلة داخلية حتى يبقى الدليل مستقلًا. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML – a red circle on a white background +const string htmlContent = @" + + + + + + +
+ +"; +``` + +يحدد HTML شكلًا متجهيًا بسيطًا يستفيد من التنعيم عند تحويله إلى نقطية. + +## الخطوة 2: تهيئة محرك التصيير + +يستخدم Aspose.HTML كائن `HtmlRenderer` مع `ImageRenderingOptions`. هنا حيث تقوم **بكيفية تمكين التنعيم** للـ bitmap النهائي. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**لماذا `UseAntialiasing = true` مهم**: يقوم محرك التصيير برسم الأشكال المتجهية والنصوص والتدرجات باستخدام دقة تحت البكسل. تمكين التنعيم يُخبر أداة التحويل بدمج بكسلات الحافة مع الجيران، مما يزيل الخطوط المتعرجة التي تظهر عندما يظل `UseAntialiasing` على القيمة الافتراضية `false`. هذا هو جوهر **تصوير الصور بجودة عالية**. + +## الخطوة 3: تصيير HTML إلى صورة + +بعد تكوين الخيارات، استدعِ طريقة `RenderToImage`. تُعيد الطريقة كائن `Image` يمكنك حفظه على القرص أو بثه مباشرةً في الاستجابة. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +بعد التنفيذ، يحتوي `output.png` على دائرة ناعمة ومُنعَّمة. افتح الملف في أي عارض صور للتحقق من النتيجة. + +![كيفية تمكين التنعيم في تصيير Aspose.HTML](/images/antialiasing-example.png){alt="كيفية تمكين التنعيم في تصيير Aspose.HTML"} + +## الخطوة 4: التحقق من جودة الإخراج العالية (كيفية تصيير صورة html) + +يمكنك برمجيًا التأكد من أبعاد الصورة و DPI لضمان أن التصيير يلبي توقعاتك. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +مخرجات وحدة التحكم النموذجية: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +يؤدي ارتفاع DPI مع التنعيم إلى نتيجة نظيفة حتى عند تكبير الصورة. هذا يوضح **كيفية تصيير صورة html** بجودة احترافية. + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | التعديل الموصى به | +|-----------|-------------------| +| تصيير صفحات كبيرة جدًا (مثل تطبيقات الويب ذات الشاشة الكاملة) | زيادة `ImageRenderingOptions.Width` / `Height` أو ضبط `Scale` للتحكم في استهلاك الذاكرة. | +| الحاجة إلى خلفية شفافة | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| استهداف JPEG لتقليل حجم الملف | Change `ImageFormat` to `ImageFormat.Jpeg` and adjust `Quality` (0‑100). | +| التشغيل في حاوية Linux بدون واجهة رسومية | Aspose.HTML يعمل بالكامل بدون رأس؛ لا تحتاج إلى تبعيات إضافية. | +| يجب عليك تعطيل التنعيم لاختبار واجهة مستخدم دقيقة بالبكسل | Set `UseAntialiasing = false;` – ستكون الحواف واضحة ولكن قد تظهر متعرجة. | + +### نصيحة احترافية + +عند إنشاء دفعة من الصور، أعد استخدام كائن `HTMLDocument` واحد فقط وقم بتعديل خاصية `Content` فقط بين عمليات التصيير. هذا يقلل من عبء تحليل نفس HTML مرارًا ويحسن معدل الإنتاجية. + +## قائمة المصدر الكاملة + +فيما يلي البرنامج الكامل الذي يمكنك نسخه إلى مشروع تطبيق وحدة تحكم جديد وتشغيله فورًا. + + + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شاملة من الشيفرة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية تصيير html إلى صورة باستخدام C# – دليل كامل](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [دروس HTML إلى صورة – تصيير HTML إلى PNG في C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [كيفية استخدام Aspose لتصiير HTML إلى PNG – دليل خطوة بخطوة](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/arabic/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..b8e043583 --- /dev/null +++ b/html/arabic/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: حسّن وضوح النص عند عرض HTML باستخدام Aspose.HTML عبر تمكين التلميحات. + يوضح هذا الدليل كيفية تمكين التلميحات ولماذا يُعد ذلك مهمًا. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: ar +lastmod: 2026-09-10 +og_description: حسّن وضوح النص في Aspose.HTML من خلال تعلم كيفية تمكين التلميحات. + اتبع الدليل خطوة بخطوة للحصول على نص أوضح على جميع المنصات. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: تحسين وضوح النص في Aspose.HTML – تمكين التلميحات للحصول على عرض أكثر وضوحًا +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: كيفية تحسين وضوح النص في Aspose.HTML باستخدام التلميحات +url: /ar/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية تحسين وضوح النص في Aspose.HTML باستخدام التلميح + +إذا كنت بحاجة إلى تحسين وضوح النص أثناء عرض HTML باستخدام Aspose.HTML، يوضح لك هذا الدليل حلاً كاملاً. من خلال تمكين التلميح ستحصل على رموز أكثر حدة، خاصةً على الأنظمة غير Windows حيث قد يبدو العرض الافتراضي غير واضح. + +في هذا البرنامج التعليمي ستتعلم كيفية تمكين التلميح، ولماذا هو مهم لوضوح النص، وكيفية دمج الإعداد في سير عمل Aspose.HTML النموذجي. لا حاجة إلى وثائق خارجية—كل ما تحتاجه مشمول في الخطوات أدناه. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من أن لديك: + +* .NET 6.0 أو أحدث (الكود يعمل مع .NET Framework 4.7+ أيضاً) +* نسخة مرخصة من **Aspose.HTML for .NET** (الإصدار التجريبي المجاني يكفي للاختبار) +* إلمام أساسي بـ C# وVisual Studio أو أي بيئة تطوير تفضلها + +هذه المتطلبات قليلة؛ نفس النهج يعمل في تطبيقات console، خدمات ASP.NET Core، أو تطبيقات سطح المكتب. + +## لماذا تحسين وضوح النص من خلال تمكين التلميح + +التلميح (hinting) هو عملية تُعدِّل مخطط كل حرف لتتطابق مع شبكة البكسل لجهاز العرض. بدون التلميح، خاصةً على الشاشات منخفضة الدقة أو ذات DPI عالي، قد تبدو الأحرف ضبابية أو غير متساوية. تمكين التلميح يُخبر محرك العرض بتطبيق هذه التعديلات تلقائيًا، مما ينتج عنه: + +* سمك خطوط ثابت عبر الأحرف +* قراءة أفضل على Linux، macOS، وإصدارات Windows القديمة +* مظهر احترافي للملفات PDF، لقطات الشاشة، أو المعاينات على الشاشة + +Aspose.HTML يتيح هذا السلوك عبر الخاصية **TextOptions.UseHinting**، التي تكون قيمتها الافتراضية `false` للحفاظ على التوافق مع الإصدارات السابقة. + +## الخطوة 1: إنشاء كائن `TextOptions` + +الخطوة الأولى هي إنشاء مثال من الفئة **TextOptions**. هذا الكائن يجمع جميع إعدادات العرض المتعلقة بالنص، مما يسهل تمريرها إلى خط أنابيب العرض. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +إنشاء الكائن لا يغيّر العرض بعد؛ فهو فقط يُعد حاوية للإعدادات التي ستحددها لاحقًا. + +## الخطوة 2: تمكين التلميح لتحسين وضوح النص + +قم بتعيين الخاصية **UseHinting** إلى `true`. هذا السطر الواحد يُفعِّل خوارزمية التلميح لكل قطعة نص تُعرض باستخدام الإعدادات المرتبطة. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +عند كون `UseHinting` مساوية لـ `true`، يقوم Aspose.HTML تلقائيًا بتطبيق تعديلات تحت‑بكسلية على كل حرف. يكون التأثير واضحًا بشكل خاص على الخطوط التي تحتوي على تفاصيل دقيقة، مثل الخطوط ذات الحروف المتصلة أو النصوص الصغيرة الحجم. + +### نصيحة احترافية: دمج التلميح مع مضاد التسنين + +إذا كنت ترغب أيضًا في حواف أكثر سلاسة، يمكنك تمكين مضاد التسنين إلى جانب التلميح: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +كلا الإعدادين معًا يمنحان أفضل جودة بصرية عبر مجموعة واسعة من الأجهزة. + +## الخطوة 3: إرفاق `TextOptions` بعملية العرض + +تحتاج إلى تمرير كائن `TextOptions` المُكوَّن إلى **HtmlRenderer** (أو أي فئة عرض أخرى تستخدمها). أدناه مثال بسيط يقوم بتحميل سلسلة HTML، يطبق الخيارات، ويكتب النتيجة إلى ملف PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**شرح السطور الرئيسية** + +* `HTMLDocument` يُحلل شفرة HTML. +* `ImageDevice` يحدد أبعاد الإخراج (800 × 600 بكسل في هذا المثال). +* `HtmlRenderer` يُجري عملية العرض الفعلية؛ إسناد `textOptions` إلى `renderer.Options.TextOptions` يضمن تطبيق التلميح. +* `device.Save("output.png")` يكتب الصورة النهائية إلى القرص. + +تشغيل هذا الكود ينتج ملف `output.png` حيث يظهر العنوان والفقرة بوضوح، حتى على شاشة بدقة 96 dpi. + +## الخطوة 4: التحقق من النتيجة + +افتح الصورة المُولدة في أي عارض. قارنها بصورة تم عرضها **بدون** تلميح (اضبط `UseHinting = false`). يجب أن تلاحظ: + +* حواف أكثر حدة على الأحرف “H”, “e”, “l”, “o” +* وزن خطوط أكثر تجانسًا عبر الفقرة +* تقليل الظلال الوهمية على الخطوط القطرية للأحرف + +إذا كان الفرق طفيفًا على شاشتك، جرّب التكبير أو طباعة الصورة؛ يتحسن الوضوح عند التكبير العالي. + +## الاختلافات الشائعة وحالات الحافة + +### العرض إلى PDF بدلاً من PNG + +إذا كان هدفك هو PDF، استبدل `ImageDevice` بـ `PdfDevice`. كائن `TextOptions` نفسه يعمل دون تعديل: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### شاشات عالية الدقة DPI + +على الشاشات التي تستخدم عوامل تكبير (مثلاً 150 % أو 200 %)، قد ترغب في زيادة حجم الجهاز بنسبة متناسبة للحفاظ على جودة العرض. التلميح لا يزال يُطبق، وتظل النتيجة حادة. + +### بيئات Linux أو macOS + +على Linux، قد يلجأ محرك العرض الافتراضي إلى مُعالج خطوط bitmap يتجاهل التلميح ما لم تقم بتمكينه صراحة. علمية `UseHinting = true` تُجبر المحرك على تطبيق تلميح TrueType، مما يزيل المظهر “الضبابي” الشائع على تلك الأنظمة. + +### الخطوط بدون جداول تلميح + +بعض خطوط OpenType الحديثة لا تتضمن بيانات تلميح. في هذه الحالة، يلجأ Aspose.HTML إلى التلميح التلقائي، والذي لا يزال يحسن الوضوح مقارنةً بعدم وجود تلميح على الإطلاق. + +## الخطوة 5: أفضل الممارسات لشفرة الإنتاج + +1. **إنشاء كائن `TextOptions` واحد** وإعادة استخدامه عبر عمليات العرض. هذا يقلل من استهلاك الذاكرة. +2. **دمج التلميح مع مضاد التسنين** (`UseAntiAliasing = true`) للحصول على أنقى مخرجات. +3. **اختبار على الأنظمة المستهدفة** (Windows، Linux، macOS) لأن الفروقات البصرية قد تختلف. +4. **تسجيل إعدادات العرض** في سجلات الإنتاج؛ يساعد ذلك في تشخيص أي تشوهات بصرية غير متوقعة. +5. **الحفاظ على تحديث Aspose.HTML**. الإصدارات الأحدث قد تُضيف تحسينات إضافية في عرض النص. + +## مثال كامل يعمل + +فيما يلي تطبيق console مستقل يُظهر كل ما تم مناقشته. انسخ الكود إلى مشروع .NET console جديد، أضف حزمة NuGet الخاصة بـ Aspose.HTML، وشغّله. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**الناتج المتوقع** + +تشغيل البرنامج يُنشئ ملف `hinted_output.png`. يظهر العنوان “Hinting in action” ونص الفقرة بوضوح، مع أوزان خطوط موحدة ولا حواف ضبابية. إذا علقّت السطر `UseHinting = true`، ستظهر الصورة نفسها بأحرف مُبهتة قليلًا، مما يوضح فائدة الإعداد. + +## الخلاصة + +أنت الآن تعرف كيف تُحسّن وضوح النص في Aspose.HTML بتمكين التلميح. العملية تشمل إنشاء كائن `TextOptions`، ضبط `UseHinting` (وإمكانية `UseAntiAliasing`)، وإرفاق الخيارات بالمُعرض. هذا النهج يعمل مع PNG، JPEG، PDF، وغيرها من صيغ الإخراج، ويوفر جودة بصرية متسقة عبر Windows، Linux، وmacOS. + +بعد ذلك، قد ترغب في استكشاف مواضيع ذات صلة مثل **كيفية تمكين التلميح** للخطوط المخصصة، **تحسين أداء العرض**، أو **استخدام CSS للتحكم في مظهر النص** في Aspose.HTML. جرّب خطوطًا وإعدادات DPI مختلفة لترى كيف يتكيف التلميح مع كل سيناريو. + +برمجة سعيدة، واستمتع بنص أكثر حدة في كل عملية عرض باستخدام Aspose.HTML! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تُبنى على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية تحويل HTML إلى PNG باستخدام Aspose – دليل كامل](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [كيفية استخدام Aspose لتحويل HTML إلى PNG – دليل خطوة بخطوة](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [إنشاء مستند HTML بنص منسق وتصديره إلى PDF – دليل شامل](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/arabic/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..f09a38008 --- /dev/null +++ b/html/arabic/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: كيفية عرض HTML في C# باستخدام Aspose.Html. تعلّم معالجة HTML وCSS، حفظ + HTML، تحويل HTML إلى تدفق، وتحميل مستند HTML في .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: ar +lastmod: 2026-09-10 +og_description: كيفية عرض HTML في C# باستخدام Aspose.Html. يوضح لك هذا الدليل كيفية + معالجة HTML وCSS، حفظ HTML، تحويل HTML إلى تدفق، وتحميل مستند HTML بكفاءة. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: عرض HTML في C# باستخدام Aspose.Html – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: كيفية عرض HTML في C# باستخدام Aspose.Html – دليل كامل +url: /ar/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية عرض HTML في C# باستخدام Aspose.Html – دليل كامل + +إذا كنت بحاجة إلى **كيفية عرض html** داخل تطبيق .NET، فإن هذا الدليل يوضح لك سير العمل الكامل. ستتعرف على كيفية معالجة HTML CSS، وكيفية حفظ HTML، وتحويل HTML إلى تدفق (stream)، وتحميل مستند HTML في C# باستخدام مكتبة Aspose.Html. + +غالبًا ما يتطلب عرض HTML في سياق الخادم أكثر من مجرد تحميل ملف—يجب أيضًا التعامل مع الموارد المرتبطة مثل الصور وأوراق الأنماط. يوجهك هذا الدليل خلال كل خطوة، من تحميل المستند إلى تخصيص معالجة الموارد وأخيرًا استخراج الناتج المعروض كـ MemoryStream. + +في نهاية المقال ستتمكن من: + +* تحميل مستند HTML من القرص أو من عنوان URL (`load html document c#`). +* توفير `ResourceHandler` مخصص **process html css** أثناء التشغيل. +* حفظ HTML المعروض و**convert html to stream** لمعالجة إضافية. +* الحفاظ على النتيجة باستخدام تقنيات **how to save html** التي تعمل في أي بيئة .NET. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من وجود ما يلي: + +* .NET 6.0 SDK أو أحدث مثبت. +* Visual Studio 2022 (أو أي بيئة تطوير تدعم .NET 6). +* إشارة NuGet إلى **Aspose.Html** (`dotnet add package Aspose.Html`). +* ملف `input.html` موجود في مجلد معروف (المثال يستخدم `YOUR_DIRECTORY/input.html`). + +لا توجد مكتبات طرف ثالث إضافية مطلوبة. + +## كيفية عرض HTML – دليل خطوة بخطوة + +### الخطوة 1: تحميل مستند HTML في C# + +العملية الأولى هي إنشاء كائن `HTMLDocument` يمثل العلامات المصدرية. هذا هو جوهر **how to render html** باستخدام Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*لماذا هذا مهم:* تحميل المستند يقوم بتحليل العلامات وبناء DOM داخلي، والذي يستخدمه العارض لاحقًا لتطبيق CSS وحل الموارد. + +### الخطوة 2: إنشاء معالج موارد مخصص **process html css** + +عندما يصادف العارض موارد خارجية (صور، ملفات CSS، خطوط)، يطلب من `ResourceHandler` تدفقًا. من خلال توفير معالج مخصص تحصل على تحكم كامل في كيفية جلب كل مورد، تحويله، أو استبداله. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*لماذا هذا مهم:* المعالج هو المكان الذي تُطبق فيه منطق **process html css**—مثل تضمين CSS داخل المستند، استبدال الصور بعناصر نائبة، أو تطبيق فلاتر الأمان. + +### الخطوة 3: تكوين `HtmlSaveOptions` لاستخدام المعالج المخصص + +`HtmlSaveOptions` يحدد للعارض كيفية كتابة الناتج. عيّن `ResourceHandler` الذي أنشأته للتو حتى يستدعيه العارض لكل مرجع خارجي. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +تعيين `EmbedCss` و `EmbedImages` مفيد عندما تقوم لاحقًا بـ **convert html to stream** وتحتاج إلى نتيجة مستقلة ذاتيًا. + +### الخطوة 4: حفظ المستند و**convert html to stream** + +الآن يمكنك عرض المستند والتقاط النتيجة في `MemoryStream`. هذا هو جوهر **how to save html** عندما تريد الناتج في الذاكرة بدلاً من ملف فعلي. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*لماذا هذا مهم:* `MemoryStream` يمنحك تمثيلًا ثنائيًا مرنًا لـ HTML المعروض، يمكنك تخزينه، إرساله، أو معالجته أكثر دون الحاجة إلى نظام الملفات. + +## معالجة الحالات الشائعة + +| الحالة | النهج الموصى به | +|-----------|----------------------| +| **ملفات CSS أو الصور المفقودة** | في `MyResourceHandler.HandleResource`، تحقق من وجود `File.Exists` قبل الفتح. أرجع `MemoryStream` فارغ أو صورة نائبة إذا كان الملف غير موجود. | +| **ملفات HTML الكبيرة (>10 MB)** | زد حجم المخزن المؤقت الافتراضي لـ `MemoryStream` (`new MemoryStream(capacity)`) لتجنب عمليات إعادة تخصيص متكررة. | +| **عناوين URL نسبية تحتوي على مقاطع `..`** | استخدم `new Uri(baseUri, info.Uri)` لحل المسار الكامل قبل الوصول إلى نظام الملفات. | +| **سلامة الخيوط في ASP.NET** | أنشئ كائن `HTMLDocument` و`MyResourceHandler` جديد لكل طلب؛ تجنّب مشاركة الكائنات بين الخيوط. | +| **مشكلات الترميز** | عيّن `saveOpts.Encoding = Encoding.UTF8` لضمان إخراج UTF‑8، خاصةً عندما يحتوي المصدر على أحرف غير ASCII. | + +## نصيحة احترافية: إعادة استخدام نفس المعالج لعدة مستندات + +إذا كنت تعالج العديد من ملفات HTML دفعة واحدة، يمكنك الاحتفاظ بمثيل واحد من `MyResourceHandler` وتغيير جدول البحث الداخلي فقط. هذا يقلل من تكلفة تخصيص الكائنات ويسرّع مرحلة **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## مثال كامل قابل للتنفيذ + +فيما يلي برنامج كامل يمكنك لصقه في تطبيق Console. يوضح **how to render html**، **process html css**، **how to save html**، **convert html to stream**، و**load html document c#**—كل ذلك في تدفق واحد. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**الناتج المتوقع** (مقتطع للتقليل): + + + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/net/working-with-html-documents/_index.md b/html/arabic/net/working-with-html-documents/_index.md index 653881716..7d960cea9 100644 --- a/html/arabic/net/working-with-html-documents/_index.md +++ b/html/arabic/net/working-with-html-documents/_index.md @@ -41,6 +41,8 @@ url: /ar/net/working-with-html-documents/ ### [كيفية حفظ HTML في C# – معالجات الموارد المخصصة وZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [كيفية حفظ HTML باستخدام Aspose.Html – دليل كامل C#](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [كيفية ضغط HTML في C# – دليل خطوة بخطوة كامل](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [كيفية استخدام HtmlSaveOptions في C# مع Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) +### [كيفية تحميل مستند HTML من ملف باستخدام Aspose.HTML في C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/arabic/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/arabic/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..0df3d2b2f --- /dev/null +++ b/html/arabic/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-09-10 +description: تعلم كيفية تحميل مستند HTML من ملف باستخدام Aspose.HTML في C#. يتضمن + خيارات عرض الصور، خيارات عرض النص، ومعالج موارد مخصص. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: ar +lastmod: 2026-09-10 +og_description: تحميل مستند HTML من ملف باستخدام Aspose.HTML في C#. يغطي هذا الدليل + خيارات العرض، ومعالج الموارد المخصص، والكود الكامل الذي يمكنك تشغيله اليوم. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: تحميل مستند HTML من ملف باستخدام Aspose.HTML – دليل خطوة بخطوة بلغة C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: كيفية تحميل مستند HTML من ملف باستخدام Aspose.HTML في C# +url: /ar/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية تحميل مستند HTML من ملف باستخدام Aspose.HTML في C# + +إذا كنت بحاجة إلى **تحميل مستند HTML من ملف** والتحكم في طريقة عرضه، يوضح لك هذا الدليل حلاً كاملاً جاهزًا للتنفيذ. ستتعرف على كيفية تكوين إعدادات عرض الصور، تمكين تحسين النص، وتوفير معالج موارد مخصص يُعيد تدفقات فارغة للأصول الخارجية. في نهاية الدليل يمكنك حفظ الـ HTML المعالج في تدفق ذاكرة أو أي وجهة أخرى تفضلها. + +يستخدم المثال Aspose.HTML لـ .NET، مكتبة تُبسّط معالجة HTML وCSS وSVG دون الحاجة إلى محرك متصفح. لا تتطلب أدوات خارجية، والكود يعمل مع .NET 6 أو أحدث. تأكد من تثبيت حزمة NuGet الخاصة بـ Aspose.HTML قبل البدء. + +## المتطلبات المسبقة + +- .NET 6 SDK (أو أي نسخة .NET يدعمها Aspose.HTML) +- Visual Studio 2022 أو أي بيئة تطوير C# أخرى +- حزمة NuGet Aspose.HTML for .NET (`Install-Package Aspose.HTML`) +- ملف HTML اسمه `input.html` موجود في مجلد يمكنك الإشارة إليه من الكود + +## الخطوة 1: تحميل مستند HTML من ملف + +العملية الأولى هي إنشاء نسخة من `HTMLDocument` تقرأ ملف المصدر. يمثل هذا الكائن شجرة DOM بالكامل ويوفر طرقًا لمزيد من التلاعب. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**لماذا هذا مهم:** تحميل الملف في `HTMLDocument` يمنحك وصولًا كاملًا إلى بنية المستند، الأنماط، والموارد، والتي يمكنك لاحقًا عرضها أو تحويلها. + +## الخطوة 2: إعداد خيارات عرض الصور (Aspose.HTML rendering) + +إذا كنت تخطط لتحويل الصفحة إلى صورة لاحقًا، فإن تكوين عرض الصور يحسن الجودة البصرية. يقلل التنعيم (Antialiasing) من الحواف المتعرجة. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**نصيحة:** `UseAntialiasing` مفيد بشكل خاص للرسومات المتجهة والنصوص التي ستُحول إلى PNG أو JPEG. + +## الخطوة 3: تمكين تحسين النص (text rendering options) + +تحسين النص يؤثر على كيفية محاذاة الحروف إلى شبكة البكسل، مما يجعل الخطوط الصغيرة تبدو أكثر وضوحًا. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**لماذا هو مهم:** عند تصدير الـ HTML إلى صورة لاحقًا، يقلل التحسين من تشويش الأحرف ويضمن طباعة متسقة عبر المنصات. + +## الخطوة 4: إنشاء معالج موارد مخصص (custom resource handler) + +قد تُشير الموارد الخارجية مثل الخطوط، الصور، أو السكريبتات في الـ HTML. يتيح لك `ResourceHandler` التحكم في طريقة استرجاع هذه الموارد. في هذا المثال يُعيد المعالج `MemoryStream` فارغًا لكل طلب، مما يزيل الأصول الخارجية فعليًا. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**متى يُستخدم:** هذا النمط مفيد في بيئات ذات قيود أمان، اختبارات الوحدة، أو عندما تحتاج فقط إلى العلامات دون ملفات خارجية. + +## الخطوة 5: تجميع خيارات حفظ HTML (HTML to image conversion) + +جميع الأجزاء—معالج الموارد، إعدادات العرض، ونمط الخط—تُربط إلى كائن `HtmlSaveOptions`. يُخبر هذا الكائن Aspose.HTML كيفية تسلسل المستند. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**شرح:** `WebFontStyle` يمكنه فرض نمط معين (مثلًا `bold`) للخطوط الويب التي قد تكون مفقودة. يتم حقن `ImageRenderingOptions` و `TextOptions` التي أعددناها مسبقًا هنا، لضمان تأثيرها على أي تحويل إلى صورة يحدث لاحقًا. + +## الخطوة 6: حفظ المستند في تدفق ذاكرة (complete solution) + +أخيرًا، اكتب الـ HTML المعالج في `MemoryStream`. من هنا يمكنك كتابة التدفق إلى ملف، إرساله عبر الشبكة، أو تمريره إلى API آخر. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**النتيجة:** الآن يحتوي `output.html` على نفس العلامات الموجودة في `input.html` لكن مع استبدال جميع الموارد الخارجية بتدفقات فارغة، ومع تفضيلات العرض مدمجة في خيارات الحفظ. + +## مثال كامل قابل للتنفيذ + +جمع جميع الخطوات معًا يمنحك برنامجًا مستقلًا يمكنك نسخه، لصقه، وتشغيله. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +تشغيل هذا البرنامج ينتج `output.html` في الدليل الحالي. افتح الملف في متصفح لتتأكد من أن العلامات الأصلية تُحمَّل، لكن أي صور، خطوط، أو سكريبتات مرتبطة غير موجودة (تم استبدالها بتدفقات فارغة). + +## أسئلة شائعة وحالات خاصة + +| السؤال | الجواب | +|----------|--------| +| **ماذا أفعل إذا كنت أحتاج إلى الموارد الأصلية بدلاً من التدفقات الفارغة؟** | استبدل `MemoryResourceHandler` بمعالج يقرأ الملفات من القرص أو يحملها عبر HTTP. | +| **هل يمكنني عرض الـ HTML مباشرةً إلى PNG أو JPEG؟** | نعم. استخدم `ImageRenderer` مع نفس `ImageRenderingOptions` و `TextOptions` التي قمت بتكوينها، ثم استدعِ `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **هل `WebFontStyle.Bold` ضروري؟** | لا. هو مجرد مثال لتجاوز نمط الخط. يمكنك حذفه أو تغييره إلى `WebFontStyle.Normal` إذا لم تحتاج إلى نمط مفروض. | +| **هل يعمل هذا على .NET Core؟** | يدعم Aspose.HTML .NET 5/6/7، لذا يعمل نفس الكود على مشاريع .NET Core. | +| **كيف أتعامل مع ملفات HTML الكبيرة بكفاءة؟** | قم بتدفق الملف إلى `HTMLDocument` باستخدام مُنشئ `FileStream` لتجنب تحميل الملف بالكامل في الذاكرة مرة واحدة. | + +## الخلاصة + +أنت الآن تعرف كيفية **تحميل مستند HTML من ملف** باستخدام Aspose.HTML، وتكوين **خيارات عرض الصور** و**خيارات عرض النص**، وتطبيق **معالج موارد مخصص** للتحكم في الأصول الخارجية. يوضح المثال الكامل كيفية حفظ الـ HTML المعالج في تدفق ذاكرة، والذي يمكنك حفظه أو إرساله حسب الحاجة. + +بعد ذلك، يمكنك استكشاف **تحويل HTML إلى صورة** عن طريق استبدال `HtmlSaveOptions` بـ `ImageRenderer`، أو تجربة ميزات Aspose.HTML الأخرى مثل استعلامات وسائط CSS، دعم SVG، وتصدير PDF. هذه الإضافات تتيح لك بناء خطوط معالجة مستندات غنية بالكامل باستخدام C#. + +برمجة سعيدة! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تُكمل التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة شاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [تحميل HTML باستخدام خادم بعيد في .NET مع Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [تحميل HTML باستخدام URL في .NET مع Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [كيفية حفظ HTML في C# – دليل كامل باستخدام معالج موارد مخصص](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/arabic/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..ed20605e7 --- /dev/null +++ b/html/arabic/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-09-10 +description: تعلم كيفية استخدام HtmlSaveOptions في C# للتحكم في أنماط الخطوط على الويب + وحفظ ملفات HTML باستخدام Aspose.HTML. يتضمن مثالًا كاملاً للكود ونصائح عملية. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: ar +lastmod: 2026-09-10 +og_description: كيفية استخدام HtmlSaveOptions في C# لتمكين أنماط الخطوط الغامقة والمائلة + عند حفظ HTML باستخدام Aspose.HTML. تابع المثال الكامل ونصائح الممارسات الأفضل. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: كيفية استخدام HtmlSaveOptions في C# مع Aspose.HTML – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: كيفية استخدام HtmlSaveOptions في C# مع Aspose.HTML +url: /ar/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية استخدام HtmlSaveOptions في C# مع Aspose.HTML + +إذا كنت بحاجة إلى التحكم في طريقة حفظ Aspose.HTML لمستند HTML، فإن **تعلم كيفية استخدام HtmlSaveOptions أمر أساسي**. يوضح لك هذا الدليل خطوة بخطوة كيفية استخدام HtmlSaveOptions لتمكين أنماط خطوط الويب الغامقة والمائلة أثناء حفظ المستند. + +توفر مكتبة Aspose HTML واجهة برمجة تطبيقات غنية لتحميل ومعالجة وتصدير محتوى HTML. بنهاية هذا الدليل ستكون قادرًا على: + +* تحميل ملف HTML موجود إلى كائن `HTMLDocument`. +* تهيئة `HtmlSaveOptions` لتطبيق علامات `WebFontStyle` المحددة. +* حفظ المستند المعدل إلى موقع جديد أو إلى تدفق. +* توسيع الحل لتشمل أنماط خطوط أخرى، CSS مخصص، ومعالجة الأخطاء. + +## المتطلبات المسبقة + +قبل البدء، تأكد من وجود ما يلي: + +* .NET 6.0 أو أحدث مثبت. +* رخصة صالحة لـ **Aspose.HTML for .NET** (الإصدار التجريبي المجاني يكفي لهذا المثال). +* Visual Studio 2022 (أو أي بيئة تطوير C#) لتجميع وتشغيل الكود. + +لا توجد حزم NuGet إضافية مطلوبة بخلاف `Aspose.HTML`. + +## الخطوة 1: إعداد المشروع واستيراد المساحات الاسمية + +أنشئ مشروع **Console App** جديد وأضف حزمة NuGet الخاصة بـ Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +بعد ذلك، في أعلى ملف `Program.cs`، استورد المساحات الاسمية المطلوبة: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +تُظهر هذه المساحات الاسمية الأنواع `HTMLDocument` و `HtmlSaveOptions` و `WebFontStyle` التي ستستخدمها طوال الدليل. + +## الخطوة 2: تحميل مستند HTML المصدر + +العملية الأولى هي قراءة ملف HTML الذي تريد معالجته. استبدل `"YOUR_DIRECTORY/input.html"` بالمسار الفعلي لملفك. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` يقوم بتحليل العلامات، يبني شجرة DOM، ويجعلها جاهزة للمعالجة. إذا لم يكن الملف موجودًا، سيتم إلقاء استثناء، لذا قد ترغب في وضع هذا الاستدعاء داخل كتلة try‑catch في الكود الإنتاجي. + +## الخطوة 3: إنشاء وتكوين HtmlSaveOptions + +`HtmlSaveOptions` يتيح لك ضبط عملية الحفظ بدقة. لتمكين أنماط خطوط الويب الغامقة والمائلة، اجمع علامات `WebFontStyle` المقابلة باستخدام عامل OR البتّي (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### لماذا تهيئة WebFontStyle؟ + +عند تصدير مستند HTML، يمكن لـ Aspose.HTML تضمين خطوط الويب التي تتطابق مع النمط الأصلي. من خلال ضبط `WebFontStyle`، تخبر المصدّر أي متغيّرات للخط يجب تضمينها. هذا يقلل من حجم الملف النهائي عندما تحتاج فقط إلى أنماط محددة ويضمن أن المخرجات المعروضة تتطابق مع المصدر. + +#### التغيّرات الشائعة + +| النمط المطلوب | علامة `WebFontStyle` المقابلة | +|---------------|-----------------------------------| +| عادي (Regular) | `WebFontStyle.Regular` | +| غامق | `WebFontStyle.Bold` | +| مائل | `WebFontStyle.Italic` | +| غامق + مائل | `WebFontStyle.Bold | WebFontStyle.Italic` | +| جميع المتغيّرات | `WebFontStyle.All` | + +يمكنك دمج أي مجموعة تناسب حالتك. + +## الخطوة 4: حفظ المستند باستخدام الخيارات المكوّنة + +الآن احفظ المستند إلى ملف جديد. طريقة `Save` تقبل مسار الهدف وكائن `HtmlSaveOptions` الذي أعددته. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +إذا كنت بحاجة للكتابة إلى تدفق ذاكرة (مثلاً لإرسال الملف عبر HTTP)، استخدم النسخة التي تقبل كائن `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## الخطوة 5: التحقق من النتيجة + +افتح `output.html` في متصفح أو افحص الملف باستخدام محرر نصوص. يجب أن ترى أن كتلة ` + + +
+ +"; +``` + +该 HTML 定义了一个在光栅化时受益于抗锯齿的简单矢量形状。 + +## 步骤 2:初始化渲染引擎 + +Aspose.HTML 使用 `HtmlRenderer` 与 `ImageRenderingOptions`。这里是您为最终位图**如何启用抗锯齿**的地方。 + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**为什么 `UseAntialiasing = true` 很重要**:渲染引擎使用子像素精度绘制矢量形状、文本和渐变。启用抗锯齿会让光栅化器将边缘像素与相邻像素混合,从而消除在 `UseAntialiasing` 保持默认 `false` 时出现的锯齿线。这是**高质量图像渲染**的核心。 + +## 步骤 3:将 HTML 渲染为图像 + +配置好选项后,调用 `RenderToImage` 方法。该方法返回一个 `Image` 对象,您可以将其保存到磁盘或直接流式传输到响应中。 + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +执行后,`output.png` 包含一个平滑、抗锯齿的圆形。使用任意图像查看器打开文件即可验证结果。 + +![在 Aspose.HTML 渲染中如何启用抗锯齿](/images/antialiasing-example.png){alt="在 Aspose.HTML 渲染中如何启用抗锯齿"} + +## 步骤 4:验证高质量输出(如何渲染 html 图像) + +您可以通过编程方式确认图像的尺寸和 DPI,以确保渲染符合预期。 + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +典型的控制台输出: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +提升的 DPI 与抗锯齿相结合,即使在放大图像时也能产生干净的结果。这展示了**如何渲染 html 图像**的专业质量。 + +## 常见变体和边缘情况 + +| 情况 | 推荐的调整 | +|-----------|-------------------| +| 渲染非常大的页面(例如全屏 Web 应用) | 增加 `ImageRenderingOptions.Width` / `Height` 或设置 `Scale` 以控制内存使用。 | +| 需要透明背景 | 设置 `imageOptions.BackgroundColor = Color.Transparent;` | +| 为了更小的文件大小而使用 JPEG | 将 `ImageFormat` 更改为 `ImageFormat.Jpeg` 并调整 `Quality`(0‑100)。 | +| 在没有 GUI 的 Linux 容器中运行 | Aspose.HTML 完全无头;无需额外依赖。 | +| 必须为像素完美的 UI 测试禁用抗锯齿 | 设置 `UseAntialiasing = false;` —— 边缘会更锐利,但可能出现锯齿。 | + +### 专业提示 + +在生成一批图像时,复用单个 `HTMLDocument` 实例,并仅在渲染之间修改其 `Content` 属性。这样可以减少重复解析相同 HTML 的开销,提高吞吐量。 + +## 完整源码列表 + +下面是完整的程序,您可以将其复制到新的控制台应用项目中并立即运行。 + + + +## 接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您在自己的项目中进一步掌握 API 功能并探索替代实现方案。每个资源均包含完整的可运行代码示例和逐步解释。 + +- [如何使用 C# 将 HTML 渲染为图像 – 完整指南](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML 转图像教程 – 在 C# 中将 HTML 渲染为 PNG](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [如何使用 Aspose 将 HTML 渲染为 PNG – 分步指南](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/chinese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..5c4e29e8f --- /dev/null +++ b/html/chinese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-09-10 +description: 通过启用 hinting 提升使用 Aspose.HTML 渲染 HTML 时的文本清晰度。本指南展示了如何启用 hinting 以及它为何重要。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: zh +lastmod: 2026-09-10 +og_description: 通过学习如何启用 hinting,提高 Aspose.HTML 中文本的清晰度。按照分步指南,在所有平台上获得更清晰的文本。 +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: 提升 Aspose.HTML 文本清晰度 – 启用 hinting 实现更锐利的渲染 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: 如何在 Aspose.HTML 中通过 hinting 提高文本清晰度 +url: /zh/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Aspose.HTML 中通过 hinting 提高文本清晰度 + +如果您需要在使用 Aspose.HTML 渲染 HTML 时提升文本清晰度,本指南为您提供完整的解决方案。启用 hinting 后,字形会更锐利,尤其是在非 Windows 平台上,默认渲染可能显得模糊。 + +在本教程中,您将学习如何启用 hinting、它为何对文本清晰度重要,以及如何将此设置集成到典型的 Aspose.HTML 工作流中。无需外部文档——下面的步骤已包含所有必要信息。 + +## 前置条件 + +* .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.7+) +* 已授权的 **Aspose.HTML for .NET** 副本(免费试用可用于测试) +* 对 C# 和 Visual Studio 或您偏好的任何 IDE 有基本了解 + +这些要求非常低;相同的方法可用于控制台应用、ASP.NET Core 服务或桌面应用程序。 + +## 为什么启用 hinting 能提升文本清晰度 + +Hinting 是一种将每个字形的轮廓调整到显示设备像素网格的过程。如果不使用 hinting,尤其在低分辨率或高 DPI 屏幕上,字符可能显得模糊或不均匀。启用 hinting 会让渲染引擎自动应用这些调整,从而得到: + +* 在字符之间保持一致的笔画粗细 +* 在 Linux、macOS 以及旧版 Windows 上获得更好的可读性 +* 为 PDF、截图或屏幕预览提供专业外观 + +Aspose.HTML 通过 **TextOptions.UseHinting** 属性公开此行为,默认值为 `false`(为保持向后兼容)。 + +## 第一步:创建 `TextOptions` 实例 + +第一步是实例化 **TextOptions** 类。该对象汇总所有与文本相关的渲染设置,便于将其传递给渲染管道。 + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +创建对象本身并不会改变渲染;它仅为稍后要设置的选项准备一个容器。 + +## 第二步:启用 hinting 提升文本清晰度 + +将 **UseHinting** 属性设为 `true`。此行代码会为使用该选项渲染的所有文本激活 hinting 算法。 + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +当 `UseHinting` 为 `true` 时,Aspose.HTML 会自动对每个字形进行子像素调整。此效果在包含细节的字体(如衬线体或小字号文本)上最为明显。 + +### 专业提示:将 hinting 与 anti‑aliasing 结合使用 + +如果您还希望边缘更平滑,可以在启用 hinting 的同时开启 anti‑aliasing: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +这两个设置一起使用,可在各种设备上提供最佳的视觉保真度。 + +## 第三步:将 `TextOptions` 附加到渲染过程 + +您需要将配置好的 `TextOptions` 传递给 **HtmlRenderer**(或您使用的其他渲染类)。下面是一个最小示例,加载 HTML 字符串、应用选项并将输出写入 PNG 文件。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**关键行说明** + +* `HTMLDocument` 解析 HTML 标记。 +* `ImageDevice` 定义输出尺寸(本例为 800 × 600 像素)。 +* `HtmlRenderer` 执行实际渲染;将 `textOptions` 赋给 `renderer.Options.TextOptions` 可确保应用 hinting。 +* `device.Save("output.png")` 将最终图像写入磁盘。 + +运行此代码会生成 `output.png`,其中标题和段落显示清晰,即使在 96 dpi 显示器上也是如此。 + +## 第四步:验证结果 + +在任意查看器中打开生成的图像。将其与 **未** 启用 hinting(`UseHinting = false`)渲染的图像进行比较。您应当注意到: + +* 字母 “H”、 “e”、 “l”、 “o” 的边缘更锐利 +* 段落中的笔画粗细更均匀 +* 字符对角线上的残影减少 + +如果在屏幕上差异不明显,可尝试放大或打印图像;在更高放大倍率下改进更为明显。 + +## 常见变体和边缘情况 + +### 渲染为 PDF 而非 PNG + +如果目标是 PDF,请将 `ImageDevice` 替换为 `PdfDevice`。相同的 `TextOptions` 对象无需修改即可使用: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### 高 DPI 显示器 + +在具有缩放比例的显示器上(例如 150 % 或 200 %),您可能需要按比例增大设备尺寸以保持视觉质量。hinting 仍然生效,结果依然清晰。 + +### Linux 或 macOS 环境 + +在 Linux 上,默认渲染引擎可能会回退到忽略 hinting 的位图字体渲染器,除非显式启用。`UseHinting = true` 标志会强制引擎应用 TrueType hinting,消除这些平台上常见的“模糊”外观。 + +### 没有 hinting 表的字体 + +某些现代 OpenType 字体省略了 hinting 数据。在这种情况下,Aspose.HTML 会回退到自动 hinting,仍然比完全不使用 hinting 更清晰。 + +## 第五步:生产代码的最佳实践 + +1. **创建单个 `TextOptions` 实例** 并在渲染调用之间复用。可减少对象分配开销。 +2. **将 hinting 与 anti‑aliasing 结合**(`UseAntiAliasing = true`)以获得最平滑的输出。 +3. **在目标平台上进行测试**(Windows、Linux、macOS),因为视觉差异可能不同。 +4. **在生产日志中记录渲染配置**;这有助于排查意外的视觉伪影。 +5. **保持 Aspose.HTML 为最新版本**。新版本可能引入额外的文本渲染改进。 + +## 完整工作示例 + +下面是一个独立的控制台应用程序示例,演示了本文讨论的全部内容。将代码复制到新的 .NET 控制台项目中,添加 Aspose.HTML NuGet 包,然后运行。 + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**预期输出** + +运行程序会生成 `hinted_output.png`。标题 “Hinting in action” 与段落文本显示清晰,笔画宽度均匀且没有模糊边缘。如果将 `UseHinting = true` 注释掉,同一图像的字符会略显模糊,展示了该设置的优势。 + +## 结论 + +现在您已经了解如何通过启用 hinting 在 Aspose.HTML 中提升文本清晰度。该过程包括创建 `TextOptions` 对象、设置 `UseHinting`(以及可选的 `UseAntiAliasing`),并将选项附加到渲染器。此方法适用于 PNG、JPEG、PDF 等输出格式,并在 Windows、Linux、macOS 上提供一致的视觉质量。 + +接下来,您可以探索相关主题,例如为自定义字体 **启用 hinting**、**优化渲染性能**,或在 Aspose.HTML 中 **使用 CSS 控制文本外观**。尝试不同的字体和 DPI 设置,观察 hinting 如何适应各种场景。 + +祝编码愉快,享受每一次 Aspose.HTML 渲染中更锐利的文本! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南紧密相关的主题,基于所示技术进行扩展。每个资源都包含完整的可运行代码示例和逐步说明,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [如何使用 Aspose 将 HTML 渲染为 PNG – 完整指南](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [如何使用 Aspose 将 HTML 渲染为 PNG – 步骤指南](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [创建带样式文本的 HTML 文档并导出为 PDF – 完整指南](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/chinese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..888f10bb5 --- /dev/null +++ b/html/chinese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: 如何在 C# 中使用 Aspose.Html 渲染 HTML。学习处理 HTML 与 CSS、保存 HTML、将 HTML 转换为流以及在 + .NET 中加载 HTML 文档。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: zh +lastmod: 2026-09-10 +og_description: 如何在 C# 中使用 Aspose.Html 渲染 HTML。本指南展示了如何处理 HTML/CSS、保存 HTML、将 HTML + 转换为流以及高效加载 HTML 文档。 +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: 使用 Aspose.Html 在 C# 中渲染 HTML – 逐步教程 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: 如何在 C# 中使用 Aspose.Html 渲染 HTML – 完整指南 +url: /zh/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 Aspose.Html 渲染 HTML – 完整指南 + +如果您需要在 .NET 应用程序中 **how to render html**,本教程将向您展示完整的工作流程。您将看到如何处理 HTML CSS、如何保存 HTML、将 HTML 转换为流,以及如何使用 Aspose.Html 库在 C# 中加载 HTML 文档。 + +在服务器端渲染 HTML 往往不仅仅是加载文件——还必须处理诸如图像和样式表等链接资源。本指南将一步步带您完成从加载文档、定制资源处理到最终将渲染结果提取为内存流的全过程。 + +阅读完本文后,您将能够: + +* 从磁盘或 URL 加载 HTML 文档(`load html document c#`)。 +* 提供自定义 `ResourceHandler`,在运行时 **process html css**。 +* 保存渲染后的 HTML 并 **convert html to stream** 以便后续处理。 +* 使用 **how to save html** 技术在任何 .NET 环境中持久化结果。 + +## 前置条件 + +在开始之前,请确保您已具备: + +* .NET 6.0 SDK 或更高版本。 +* Visual Studio 2022(或任何支持 .NET 6 的 IDE)。 +* 对 **Aspose.Html** 的 NuGet 引用(`dotnet add package Aspose.Html`)。 +* 将 `input.html` 文件放置在已知文件夹中(示例使用 `YOUR_DIRECTORY/input.html`)。 + +无需额外的第三方库。 + +## 如何渲染 HTML – 步骤指南 + +### 步骤 1:在 C# 中加载 HTML 文档 + +首先创建一个表示源标记的 `HTMLDocument` 实例。这是使用 Aspose.Html **how to render html** 的核心。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*为什么重要:* 加载文档会解析标记并构建内部 DOM,渲染器随后使用该 DOM 来应用 CSS 并解析资源。 + +### 步骤 2:创建自定义资源处理程序以 **process html css** + +当渲染器遇到外部资源(图像、CSS 文件、字体)时,会向 `ResourceHandler` 请求流。通过提供自定义处理程序,您可以完全控制每个资源的获取、转换或占位处理方式。 + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*为什么重要:* 处理程序正是您实现 **process html css** 逻辑的地方——例如内联 CSS、用占位图像替换实际图像,或应用安全过滤。 + +### 步骤 3:配置 `HtmlSaveOptions` 使用自定义处理程序 + +`HtmlSaveOptions` 告诉渲染器如何写入输出。将刚才创建的 `ResourceHandler` 赋给它,使渲染器在处理每个外部引用时都会调用该处理程序。 + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +将 `EmbedCss` 和 `EmbedImages` 设置为 true 在后续 **convert html to stream** 并需要自包含结果时非常有用。 + +### 步骤 4:保存文档并 **convert html to stream** + +现在可以渲染文档并将结果捕获到 `MemoryStream` 中。这是 **how to save html** 的核心,当您希望将输出保存在内存而非物理文件时使用。 + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*为什么重要:* `MemoryStream` 为渲染后的 HTML 提供了灵活的二进制表示,您可以存储、传输或进一步处理,而无需触及文件系统。 + +## 处理常见边缘情况 + +| 情况 | 推荐做法 | +|-----------|----------------------| +| 缺少 CSS 或图像文件 | 在 `MyResourceHandler.HandleResource` 中,使用 `File.Exists` 检查文件是否存在。若不存在,返回空的 `MemoryStream` 或占位图像。 | +| 大型 HTML 文件(>10 MB) | 增大 `MemoryStream` 的默认缓冲区大小(`new MemoryStream(capacity)`),以避免频繁重新分配。 | +| 带有 `..` 片段的相对 URL | 使用 `new Uri(baseUri, info.Uri)` 在访问文件系统前解析出完整路径。 | +| ASP.NET 中的线程安全 | 为每个请求实例化新的 `HTMLDocument` 和 `MyResourceHandler`;避免在多个线程之间共享实例。 | +| 编码问题 | 将 `saveOpts.Encoding = Encoding.UTF8` 设置为 UTF‑8,以确保在源文件包含非 ASCII 字符时输出正确。 | + +## 专业提示:为多个文档复用同一处理程序 + +如果您批量处理大量 HTML 文件,可以保留一个 `MyResourceHandler` 实例,仅修改其内部查找表。这样可以减少对象分配开销,加速 **process html css** 阶段。 + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## 完整、可运行的示例 + +下面是一段完整的程序代码,您可以直接粘贴到控制台应用程序中。它演示了 **how to render html**、**process html css**、**how to save html**、**convert html to stream** 以及 **load html document c#** 的完整流程。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**预期输出**(为简洁起见已截断): + + + +## 接下来您应该学习什么? + +以下教程涵盖了与本指南技术密切相关的主题,帮助您进一步掌握 API 功能并在项目中探索替代实现方案。每篇资源都提供了完整的可运行代码示例和逐步解释。 + +- [如何使用 Aspose.Html 保存 HTML – 完整 C# 指南](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [如何使用 Aspose 在 C# 中将 HTML 渲染为 PNG](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [如何使用 Aspose 将 HTML 渲染为 PNG – 步骤指南](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/net/working-with-html-documents/_index.md b/html/chinese/net/working-with-html-documents/_index.md index f79f4ad5e..4d9b0338d 100644 --- a/html/chinese/net/working-with-html-documents/_index.md +++ b/html/chinese/net/working-with-html-documents/_index.md @@ -34,11 +34,15 @@ HTML 文档是 Web 的支柱,能够有效地创建和操作 HTML 文档是任 ### [如何使用 Aspose.Html 保存 HTML – 完整 C# 指南](./how-to-save-html-with-aspose-html-complete-c-guide/) +### [在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + ### [使用 CSS 和 C# 加粗标题 – 完整分步指南](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [如何在 C# 中保存 HTML – 自定义资源处理程序和 ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [如何在 C# 中压缩 HTML – 完整分步指南](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [如何使用 Aspose.HTML 在 C# 中从文件加载 HTML 文档](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/chinese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/chinese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..9990e3c0f --- /dev/null +++ b/html/chinese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-09-10 +description: 学习使用 Aspose.HTML 在 C# 中从文件加载 HTML 文档。包括图像渲染选项、文本渲染选项以及自定义资源处理程序。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: zh +lastmod: 2026-09-10 +og_description: 使用 Aspose.HTML 在 C# 中从文件加载 HTML 文档。本指南涵盖渲染选项、自定义资源处理程序以及您今天即可运行的完整代码。 +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: 使用 Aspose.HTML 从文件加载 HTML 文档 – 步骤详解 C# 指南 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: 如何在 C# 中使用 Aspose.HTML 从文件加载 HTML 文档 +url: /zh/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 Aspose.HTML 从文件加载 HTML 文档 + +如果您需要 **从文件加载 HTML 文档** 并控制其渲染方式,本教程提供了一个完整、可直接运行的解决方案。您将看到如何配置图像渲染、启用文字提示,以及提供一个自定义资源处理程序来为外部资源返回空流。完成本指南后,您可以将处理后的 HTML 保存到内存流或其他任意目标。 + +示例使用 Aspose.HTML for .NET,这是一款无需浏览器引擎即可简化 HTML、CSS 和 SVG 处理的库。无需外部工具,代码兼容 .NET 6 或更高版本。开始前请确保已安装 Aspose.HTML NuGet 包。 + +## 前提条件 + +- .NET 6 SDK(或 Aspose.HTML 支持的任何 .NET 版本) +- Visual Studio 2022 或其他 C# IDE +- Aspose.HTML for .NET NuGet 包(`Install-Package Aspose.HTML`) +- 一个名为 `input.html` 的 HTML 文件,放置在代码可引用的文件夹中 + +## 第一步:从文件加载 HTML 文档 + +首先创建一个读取源文件的 `HTMLDocument` 实例。该对象表示整个 DOM 树,并提供进一步操作的方法。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**为什么重要:** 将文件加载到 `HTMLDocument` 后,您即可完整访问文档的结构、样式和资源,随后可以对其进行渲染或转换。 + +## 第二步:设置图像渲染选项(Aspose.HTML 渲染) + +如果您计划稍后对页面进行光栅化,配置图像渲染可以提升视觉质量。抗锯齿能够平滑边缘,减少锯齿状伪影。 + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**提示:** `UseAntialiasing` 对于将矢量图形和文本光栅化为 PNG 或 JPEG 时尤为有用。 + +## 第三步:启用文字提示(文本渲染选项) + +文字提示影响字形如何对齐到像素网格,这可以让小字号字体看起来更清晰。 + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**为何重要:** 当您随后将 HTML 导出为图像时,提示可以减少模糊字符,并确保跨平台的排版一致性。 + +## 第四步:创建自定义资源处理程序(custom resource handler) + +HTML 中可能会引用外部资源,如字体、图像或脚本。`ResourceHandler` 让您能够控制这些资源的获取方式。在本例中,处理程序为每个请求返回一个空的 `MemoryStream`,从而有效去除外部资产。 + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**使用场景:** 该模式适用于安全受限的环境、单元测试,或仅需要标记而不需要外部文件的情况。 + +## 第五步:组装 HTML 保存选项(HTML 转图像转换) + +所有部件——资源处理程序、渲染设置和字体样式——都附加到 `HtmlSaveOptions` 对象上。该对象告诉 Aspose.HTML 如何序列化文档。 + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**说明:** `WebFontStyle` 可以强制为可能缺失的网络字体指定特定样式(例如加粗)。我们之前配置的 `ImageRenderingOptions` 和 `TextOptions` 在此注入,确保它们在后续的光栅化过程中生效。 + +## 第六步:将文档保存到内存流(完整解决方案) + +最后,将处理后的 HTML 写入 `MemoryStream`。之后您可以将流写入文件、通过网络发送,或传递给其他 API。 + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**结果:** `output.html` 现在包含与 `input.html` 相同的标记,但所有外部资源已被空流替代,渲染偏好已嵌入保存选项中。 + +## 完整可运行示例 + +将所有步骤组合在一起,即可得到一个自包含的程序,您可以复制、粘贴并直接运行。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +运行此程序后,会在当前目录生成 `output.html`。在浏览器中打开该文件,可确认原始标记已加载,但任何链接的图像、字体或脚本均不存在(它们已被空流替代)。 + +## 常见问题与边缘情况 + +| 问题 | 答案 | +|------|------| +| **如果我需要原始资源而不是空流怎么办?** | 将 `MemoryResourceHandler` 替换为读取磁盘文件或通过 HTTP 下载的处理程序。 | +| **我可以直接将 HTML 渲染为 PNG 或 JPEG 吗?** | 可以。使用 `ImageRenderer` 并传入相同的 `ImageRenderingOptions` 和 `TextOptions`,然后调用 `renderer.Render(page, outputStream, ImageFormat.Png)`。 | +| **`WebFontStyle.Bold` 必须吗?** | 不必。它仅作为覆盖字体样式的示例。如果不需要强制样式,可省略或改为 `WebFontStyle.Normal`。 | +| **这在 .NET Core 上能工作吗?** | Aspose.HTML 支持 .NET 5/6/7,因此相同代码可在 .NET Core 项目中运行。 | +| **如何高效处理大型 HTML 文件?** | 使用 `FileStream` 构造函数将文件流式传入 `HTMLDocument`,以避免一次性将整个文件加载到内存中。 | + +## 结论 + +您现在已经掌握了如何使用 Aspose.HTML **从文件加载 HTML 文档**,并配置 **图像渲染选项** 与 **文本渲染选项**,以及应用 **自定义资源处理程序** 来控制外部资产。完整示例展示了将处理后的 HTML 保存到内存流的方式,您可以根据需要持久化或传输该流。 + +接下来,您可以通过将 `HtmlSaveOptions` 替换为 `ImageRenderer` 来探索 **HTML 转图像转换**,或尝试 **Aspose.HTML 渲染** 功能,如 CSS 媒体查询、SVG 支持和 PDF 导出。这些扩展让您能够在 C# 中构建完整的文档处理流水线。 + +祝编码愉快! + + +## 接下来您可以学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步掌握 API 功能并在项目中尝试不同实现方式。每篇资源均提供完整可运行的代码示例和逐步解释。 + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/chinese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..435532a3a --- /dev/null +++ b/html/chinese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,308 @@ +--- +category: general +date: 2026-09-10 +description: 学习如何在 C# 中使用 HtmlSaveOptions 控制网页字体样式并使用 Aspose.HTML 保存 HTML 文件。包括完整的代码示例和实用技巧。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: zh +lastmod: 2026-09-10 +og_description: 如何在 C# 中使用 HtmlSaveOptions 在使用 Aspose.HTML 保存 HTML 时启用粗体和斜体网络字体样式。请查看完整示例和最佳实践技巧。 +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: 在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions – 步骤指南 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: 如何在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions +url: /zh/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions + +如果您需要控制 Aspose.HTML 保存 HTML 文档的方式,**学习如何使用 HtmlSaveOptions 至关重要**。本教程将逐步演示如何使用 HtmlSaveOptions 在保存文档时启用粗体和斜体网络字体样式。 + +Aspose HTML 库提供了丰富的 API 用于加载、操作和导出 HTML 内容。阅读本指南后,您将能够: + +* 将现有 HTML 文件加载到 `HTMLDocument` 中。 +* 配置 `HtmlSaveOptions` 以应用特定的 `WebFontStyle` 标志。 +* 将修改后的文档保存到新位置或流中。 +* 将解决方案扩展到其他字体样式、 自定义 CSS 和错误处理。 + +## 前提条件 + +在开始之前,请确保您已拥有: + +* 已安装 .NET 6.0 或更高版本。 +* 有效的 **Aspose.HTML for .NET** 许可证(免费试用可用于本示例)。 +* Visual Studio 2022(或任何 C# IDE)用于编译和运行代码。 + +除 `Aspose.HTML` 之外,无需其他 NuGet 包。 + +## 步骤 1:设置项目并导入命名空间 + +创建一个新的 **Console App** 项目并添加 Aspose.HTML NuGet 包: + +```bash +dotnet add package Aspose.HTML +``` + +然后,在 `Program.cs` 顶部导入所需的命名空间: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +这些命名空间公开了在本教程中将使用的 `HTMLDocument`、`HtmlSaveOptions` 和 `WebFontStyle` 类型。 + +## 步骤 2:加载源 HTML 文档 + +第一步是读取您想要处理的 HTML。将 `"YOUR_DIRECTORY/input.html"` 替换为实际文件路径。 + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` 解析标记,构建 DOM 树,并准备好进行操作。如果文件不存在,将抛出异常,因此在生产代码中可能需要将此调用包装在 try‑catch 块中。 + +## 步骤 3:创建并配置 HtmlSaveOptions + +`HtmlSaveOptions` 让您可以微调保存过程。要启用粗体和斜体网络字体样式,请使用位或运算符 (`|`) 组合相应的 `WebFontStyle` 标志。 + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### 为什么要配置 WebFontStyle? + +导出 HTML 文档时,Aspose.HTML 可以嵌入与原始样式匹配的网络字体。通过设置 `WebFontStyle`,您告诉导出器要包含哪些字体变体。当只需要特定样式时,这可以减小最终文件大小,并确保渲染输出与源文件一致。 + +#### 常见变体 + +| 所需样式 | 对应的 `WebFontStyle` 标志 | +|---------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +您可以根据实际需求组合任意组合。 + +## 步骤 4:使用配置好的选项保存文档 + +现在将文档写入新文件。`Save` 方法接受目标路径和您准备好的 `HtmlSaveOptions` 实例。 + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +如果需要写入内存流(例如通过 HTTP 发送文件),请使用接受 `Stream` 对象的重载: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## 步骤 5:验证结果 + +在浏览器中打开 `output.html`,或使用文本编辑器检查文件。您应该看到 ` + + +
+ +"; +``` + +HTML definuje jednoduchý vektorový tvar, který těží z antialiasingu při rasterizaci. + +## Krok 2: Inicializujte vykreslovací engine + +Aspose.HTML používá `HtmlRenderer` spolu s `ImageRenderingOptions`. Zde **how to enable antialiasing** pro finální bitmapu. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Proč je důležité `UseAntialiasing = true`**: Vykreslovací engine kreslí vektorové tvary, text a gradienty s podpixelovou přesností. Povolení antialiasingu říká rasterizátoru, aby smíchal okrajové pixely s jejich sousedy, čímž eliminuje zubaté čáry, které se objeví, když je `UseAntialiasing` ponecháno na výchozím `false`. To je jádro **high quality image rendering**. + +## Krok 3: Vykreslete HTML do obrázku + +Po nastavení možností zavolejte metodu `RenderToImage`. Metoda vrací objekt `Image`, který můžete uložit na disk nebo přímo streamovat jako odpověď. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Po spuštění obsahuje `output.png` hladký, antialiasovaný kruh. Otevřete soubor v libovolném prohlížeči obrázků a ověřte výsledek. + +![how to enable antialiasing in Aspose.HTML rendering](/images/antialiasing-example.png){alt="jak povolit antialiasing v Aspose.HTML vykreslování"} + +## Krok 4: Ověřte výstup vysoké kvality (how to render html image) + +Můžete programově potvrdit rozměry obrázku a DPI, abyste zajistili, že vykreslení splňuje vaše očekávání. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typický výstup v konzoli: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Zvýšené DPI v kombinaci s antialiasingem produkuje čistý výsledek i při zvětšení obrázku. To demonstruje **how to render html image** s profesionální kvalitou. + +## Běžné varianty a okrajové případy + +| Situace | Doporučená úprava | +|-----------|-------------------| +| Vykreslování velmi velkých stránek (např. aplikace na celou obrazovku) | Zvyšte `ImageRenderingOptions.Width` / `Height` nebo nastavte `Scale` pro řízení využití paměti. | +| Potřebujete průhledné pozadí | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| Cílíte na JPEG pro menší velikost souboru | Změňte `ImageFormat` na `ImageFormat.Jpeg` a upravte `Quality` (0‑100). | +| Spuštění v Linux kontejneru bez GUI | Aspose.HTML je zcela headless; nejsou vyžadovány žádné další závislosti. | +| Musíte zakázat antialiasing pro pixel‑perfektní UI test | Nastavte `UseAntialiasing = false;` – hrany budou ostré, ale mohou vypadat zubatě. | + +### Profesionální tip + +Při generování dávky obrázků znovu použijte jedinou instanci `HTMLDocument` a mezi vykresleními měňte jen její vlastnost `Content`. Tím snížíte režii opakovaného parsování stejného HTML a zvýšíte propustnost. + +## Kompletní zdrojový výpis + +Níže je kompletní program, který můžete zkopírovat do nového projektu typu console‑app a spustit okamžitě. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s krok‑za‑krokem vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy ve vlastních projektech. + +- [Jak renderovat HTML do obrázku v C# – Kompletní průvodce](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML na obrázek – Návod – Renderování HTML do PNG v C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Jak použít Aspose k renderování HTML do PNG – Krok za krokem průvodce](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/czech/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..72eea1000 --- /dev/null +++ b/html/czech/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: Zlepšete čitelnost textu při vykreslování HTML pomocí Aspose.HTML povolením + hintingu. Tento průvodce ukazuje, jak hinting povolit a proč je důležitý. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: cs +lastmod: 2026-09-10 +og_description: Zlepšete čitelnost textu v Aspose.HTML tím, že se naučíte, jak povolit + hinting. Postupujte podle podrobného návodu a získejte jasnější text na každé platformě. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Zlepšete čitelnost textu v Aspose.HTML – povolte hinting pro ostřejší vykreslování +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Jak zlepšit čitelnost textu v Aspose.HTML pomocí hintingu +url: /cs/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak zlepšit čitelnost textu v Aspose.HTML pomocí hintingu + +Pokud potřebujete při vykreslování HTML pomocí Aspose.HTML zlepšit čitelnost textu, tento průvodce vám ukáže kompletní řešení. Zapnutím hintingu získáte ostřejší glyfy, zejména na platformách mimo Windows, kde výchozí vykreslování může vypadat rozmazaně. + +V tomto tutoriálu se naučíte, jak hinting povolit, proč je důležitý pro čitelnost textu a jak nastavení začlenit do typického pracovního postupu Aspose.HTML. Není potřeba žádná externí dokumentace – vše, co potřebujete, je obsaženo v následujících krocích. + +## Požadavky + +Než začnete, ujistěte se, že máte: + +* .NET 6.0 nebo novější (kód funguje také s .NET Framework 4.7+) +* Licencovanou kopii **Aspose.HTML for .NET** (bezplatná zkušební verze stačí pro testování) +* Základní znalosti C# a Visual Studio nebo libovolného IDE, které preferujete + +Tyto požadavky jsou minimální; stejný přístup funguje v konzolových aplikacích, službách ASP.NET Core i v desktopových aplikacích. + +## Proč povolení hintingu zlepšuje čitelnost textu + +Hinting je proces, který upravuje obrys každého glyfu tak, aby se zarovnal s pixelovou mřížkou zobrazovacího zařízení. Bez hintingu, zejména na nízkém rozlišení nebo DPI displejích, mohou znaky vypadat rozmazaně nebo nerovnoměrně. Povolení hintingu říká vykreslovacímu enginu, aby tyto úpravy provedl automaticky, což vede k: + +* Konzistentní tloušťce tahů napříč znaky +* Lepší čitelnosti na Linuxu, macOS a starších verzích Windows +* Profesionálnímu vzhledu PDF, snímků obrazovky nebo náhledů na obrazovce + +Aspose.HTML tuto funkci vystavuje prostřednictvím vlastnosti **TextOptions.UseHinting**, která je ve výchozím nastavení `false` kvůli zpětné kompatibilitě. + +## Krok 1: Vytvořte instanci `TextOptions` + +Prvním krokem je vytvořit objekt třídy **TextOptions**. Tento objekt seskupuje všechna nastavení související s textem, což usnadňuje jejich předání do vykreslovacího řetězce. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Vytvoření objektu zatím nemění vykreslování; pouze připravuje kontejner pro nastavení, která nastavíte později. + +## Krok 2: Povolit hinting pro zlepšení čitelnosti textu + +Nastavte vlastnost **UseHinting** na `true`. Tento jediný řádek aktivuje hintingový algoritmus pro každý kus textu vykreslený s danými možnostmi. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Když je `UseHinting` nastaveno na `true`, Aspose.HTML automaticky aplikuje subpixelové úpravy na každý glyf. Efekt je nejvíce patrný u fontů s jemnými detaily, jako jsou patkové písmo nebo malý text. + +### Profesionální tip: Kombinujte hinting s anti‑aliasingem + +Pokud chcete také hladší hrany, můžete spolu s hintingem povolit anti‑aliasing: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Obě nastavení dohromady poskytují nejlepší vizuální věrnost napříč širokou škálou zařízení. + +## Krok 3: Připojte `TextOptions` k procesu vykreslování + +Musíte předat nakonfigurovaný `TextOptions` objekt do **HtmlRenderer** (nebo jiné třídy vykreslování, kterou používáte). Níže je minimální příklad, který načte HTML řetězec, použije možnosti a zapíše výstup do PNG souboru. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Vysvětlení klíčových řádků** + +* `HTMLDocument` parsuje HTML značky. +* `ImageDevice` určuje výstupní rozměry (800 × 600 pixelů v tomto případě). +* `HtmlRenderer` provádí samotné vykreslování; přiřazením `textOptions` k `renderer.Options.TextOptions` zajistíte, že se použije hinting. +* `device.Save("output.png")` zapíše finální obrázek na disk. + +Po spuštění tohoto kódu vznikne `output.png`, kde nadpis a odstavec vypadají ostré i na monitoru s 96 dpi. + +## Krok 4: Ověřte výsledek + +Otevřete vygenerovaný obrázek v libovolném prohlížeči. Porovnejte jej s obrázkem vykresleným **bez** hintingu (nastavte `UseHinting = false`). Měli byste si všimnout: + +* Ostřejších okrajů písmen „H“, „e“, „l“, „o“ +* Rovnoměrnější tloušťky tahů v celém odstavci +* Sníženého „duchování“ na šikmých částech znaků + +Pokud je rozdíl na vaší obrazovce nenápadný, přibližte si obrázek nebo jej vytiskněte; zlepšení se projeví při vyšším zvětšení. + +## Běžné varianty a okrajové případy + +### Vykreslování do PDF místo PNG + +Pokud je vaším cílem PDF, nahraďte `ImageDevice` za `PdfDevice`. Stejný objekt `TextOptions` funguje bez úprav: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Displeje s vysokým DPI + +Na displejích s měřítkem (např. 150 % nebo 200 %) můžete chtít zvětšit velikost zařízení úměrně, aby se zachovala vizuální kvalita. Hinting stále platí a výsledek zůstává ostrý. + +### Linux nebo macOS prostředí + +Na Linuxu může výchozí vykreslovací engine přejít na bitmapový renderer, který hinting ignoruje, pokud jej explicitně nepovolíte. Příznak `UseHinting = true` nutí engine použít TrueType hinting, čímž odstraňuje typický „rozmazaný“ vzhled na těchto platformách. + +### Fonty bez hintingových tabulek + +Některé moderní OpenType fonty neobsahují hintingová data. V takových případech Aspose.HTML přejde na auto‑hinting, který stále zlepšuje čitelnost oproti úplnému vypnutí hintingu. + +## Krok 5: Nejlepší postupy pro produkční kód + +1. **Vytvořte jedinou instanci `TextOptions`** a znovu ji použijte ve všech voláních vykreslování. Tím snížíte režii alokace objektů. +2. **Kombinujte hinting s anti‑aliasingem** (`UseAntiAliasing = true`) pro nejhladší výstup. +3. **Testujte na cílových platformách** (Windows, Linux, macOS), protože vizuální rozdíly se mohou lišit. +4. **Logujte konfiguraci vykreslování** v produkčních logách; pomůže to při řešení neočekávaných vizuálních artefaktů. +5. **Udržujte Aspose.HTML aktuální**. Novější verze mohou přinést další vylepšení textového vykreslování. + +## Kompletní funkční příklad + +Níže je samostatná konzolová aplikace, která demonstruje vše, o čem jsme mluvili. Zkopírujte kód do nového .NET konzolového projektu, přidejte NuGet balíček Aspose.HTML a spusťte jej. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Očekávaný výstup** + +Po spuštění programu vznikne `hinted_output.png`. Nadpis „Hinting in action“ a text odstavce jsou ostré, s rovnoměrnou šířkou tahů a bez rozmazaných okrajů. Pokud zakomentujete `UseHinting = true`, stejný obrázek bude mít mírně rozmazané znaky, což ilustruje výhodu tohoto nastavení. + +## Závěr + +Nyní víte, jak zlepšit čitelnost textu v Aspose.HTML zapnutím hintingu. Proces zahrnuje vytvoření objektu `TextOptions`, nastavení `UseHinting` (a volitelně `UseAntiAliasing`) a připojení možností k rendereru. Tento přístup funguje pro PNG, JPEG, PDF i další výstupní formáty a poskytuje konzistentní vizuální kvalitu napříč Windows, Linuxem a macOS. + +Dále můžete zkoumat související témata, jako je **jak povolit hinting** pro vlastní fonty, **optimalizace výkonu vykreslování** nebo **použití CSS pro kontrolu vzhledu textu** v Aspose.HTML. Experimentujte s různými fonty a DPI nastaveními a sledujte, jak se hinting přizpůsobuje každému scénáři. + +Šťastné programování a užívejte si ostřejší text v každém vykreslení Aspose.HTML! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobným krok‑za‑krokem vysvětlením, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vlastních projektech. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/czech/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..e784a9da8 --- /dev/null +++ b/html/czech/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,303 @@ +--- +category: general +date: 2026-09-10 +description: Jak renderovat HTML v C# pomocí Aspose.Html. Naučte se zpracovávat HTML + a CSS, ukládat HTML, převádět HTML do proudu a načítat HTML dokument v .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: cs +lastmod: 2026-09-10 +og_description: Jak renderovat HTML v C# pomocí Aspose.Html. Tento průvodce vám ukáže, + jak zpracovávat HTML a CSS, ukládat HTML, převádět HTML do proudu a efektivně načítat + HTML dokument. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Vykreslení HTML v C# pomocí Aspose.Html – krok za krokem tutoriál +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Jak renderovat HTML v C# s Aspose.Html – kompletní průvodce +url: /cs/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak renderovat HTML v C# s Aspose.Html – kompletní průvodce + +Pokud potřebujete **how to render html** uvnitř .NET aplikace, tento tutoriál vám ukáže kompletní workflow. Uvidíte, jak zpracovat HTML CSS, jak uložit HTML, převést HTML do streamu a načíst HTML dokument v C# pomocí knihovny Aspose.Html. + +Renderování HTML v server‑side kontextu často vyžaduje více než jen načtení souboru — musíte také zpracovat propojené zdroje, jako jsou obrázky a stylové listy. Tento průvodce vás provede každým krokem, od načtení dokumentu po přizpůsobení zpracování zdrojů a nakonec extrahování vykresleného výstupu jako paměťového streamu. + +Na konci článku budete schopni: + +* Načíst HTML dokument z disku nebo URL (`load html document c#`). +* Poskytnout vlastní `ResourceHandler` pro **process html css** za běhu. +* Uložit vykreslené HTML a **convert html to stream** pro další zpracování. +* Uchovat výsledek pomocí technik **how to save html**, které fungují v jakémkoli .NET prostředí. + +## Požadavky + +Než začnete, ujistěte se, že máte: + +* .NET 6.0 SDK nebo novější nainstalovaný. +* Visual Studio 2022 (nebo jakékoli IDE podporující .NET 6). +* NuGet referenci na **Aspose.Html** (`dotnet add package Aspose.Html`). +* Soubor `input.html` umístěný ve známé složce (příklad používá `YOUR_DIRECTORY/input.html`). + +Žádné další knihovny třetích stran nejsou vyžadovány. + +## Jak renderovat HTML – krok za krokem + +### Krok 1: Načtěte HTML dokument v C# + +První operací je vytvořit instanci `HTMLDocument`, která představuje zdrojový markup. Toto je jádro **how to render html** s Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Proč je to důležité:* Načtení dokumentu parsuje markup a vytvoří interní DOM, který renderer později používá k aplikaci CSS a řešení zdrojů. + +### Krok 2: Vytvořte vlastní resource handler pro **process html css** + +Když renderer narazí na externí zdroje (obrázky, CSS soubory, fonty), požádá `ResourceHandler` o stream. Poskytnutím vlastního handleru získáte plnou kontrolu nad tím, jak je každý zdroj načten, transformován nebo nahrazen. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Proč je to důležité:* Handler je místem, kde implementujete logiku **process html css** — např. inline CSS, nahrazení obrázků placeholdery nebo aplikaci bezpečnostních filtrů. + +### Krok 3: Nakonfigurujte `HtmlSaveOptions` k použití vlastního handleru + +`HtmlSaveOptions` říká rendereru, jak má zapisovat výstup. Přiřaďte `ResourceHandler`, který jste právě vytvořili, aby jej renderer volal pro každou externí referenci. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Nastavení `EmbedCss` a `EmbedImages` je užitečné, když později **convert html to stream** a potřebujete samostatný výsledek. + +### Krok 4: Uložte dokument a **convert html to stream** + +Nyní můžete dokument vykreslit a zachytit výsledek v `MemoryStream`. Toto je jádro **how to save html**, když chcete výstup v paměti místo fyzického souboru. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Proč je to důležité:* `MemoryStream` poskytuje flexibilní binární reprezentaci vykresleného HTML, kterou můžete uložit, přenést nebo dále manipulovat bez zásahu do souborového systému. + +## Řešení běžných okrajových případů + +| Situace | Doporučený přístup | +|-----------|----------------------| +| **Chybějící CSS nebo soubory obrázků** | V `MyResourceHandler.HandleResource` zkontrolujte `File.Exists` před otevřením. Vraťte prázdný `MemoryStream` nebo placeholder obrázek, pokud soubor neexistuje. | +| **Velké HTML soubory (>10 MB)** | Zvyšte výchozí velikost bufferu `MemoryStream` (`new MemoryStream(capacity)`), aby se předešlo častým realokacím. | +| **Relativní URL s `..` segmenty** | Použijte `new Uri(baseUri, info.Uri)` k vyřešení úplné cesty před přístupem k souborovému systému. | +| **Thread‑safety v ASP.NET** | Vytvořte novou `HTMLDocument` a `MyResourceHandler` pro každý požadavek; nesdílejte instance mezi vlákny. | +| **Problémy s kódováním** | Nastavte `saveOpts.Encoding = Encoding.UTF8`, aby byl zaručen výstup v UTF‑8, zejména když zdroj obsahuje ne‑ASCII znaky. | + +## Pro tip: znovu použijte stejný handler pro více dokumentů + +Pokud zpracováváte mnoho HTML souborů najednou, můžete si ponechat jedinou instanci `MyResourceHandler` a jen měnit její interní lookup tabulku. Tím snížíte alokační režii objektů a urychlíte fázi **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Kompletní, spustitelný příklad + +Níže je kompletní program, který můžete vložit do konzolové aplikace. Demonstruje **how to render html**, **process html css**, **how to save html**, **convert html to stream** a **load html document c#** — vše v jednom toku. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Očekávaný výstup** (zkrácený pro stručnost): + + + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s krok‑za‑krokem vysvětleními, která vám pomohou zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vašich projektech. + +- [Jak uložit HTML s Aspose.Html – kompletní C# průvodce](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Jak použít Aspose k renderování HTML do PNG v C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Jak použít Aspose k renderování HTML do PNG – krok za krokem průvodce](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/net/working-with-html-documents/_index.md b/html/czech/net/working-with-html-documents/_index.md index fc568fc97..e9768295e 100644 --- a/html/czech/net/working-with-html-documents/_index.md +++ b/html/czech/net/working-with-html-documents/_index.md @@ -36,11 +36,14 @@ Jakmile pochopíte základy, ponoříme se hlouběji do procesu tvorby. V této Nyní posuňte vaše dovednosti na další úroveň. Úpravy HTML dokumentů jsou běžným úkolem webových vývojářů a Aspose.HTML tento proces výrazně zjednodušuje. V této části se budeme zabývat tvorbou dokumentu, manipulací s ním a stylováním. Zjistíte, jak vylepšit vzhled a funkčnost vašeho webového obsahu, aby byl poutavý a uživatelsky přívětivý. +### [Jak načíst HTML dokument ze souboru pomocí Aspose.HTML v C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [Jak uložit HTML v C# – Kompletní průvodce pomocí vlastního resource handleru](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Jak zvýraznit nadpis tučným písmem pomocí CSS a C# – Kompletní průvodce krok za krokem](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [Jak uložit HTML v C# – Vlastní manipulátory zdrojů a ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Jak uložit HTML pomocí Aspose.Html – Kompletní průvodce v C#](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [Jak zkomprimovat HTML v C# – Kompletní průvodce krok za krokem](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Jak použít HtmlSaveOptions v C# s Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/czech/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/czech/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..020c20593 --- /dev/null +++ b/html/czech/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Naučte se načíst HTML dokument ze souboru pomocí Aspose.HTML v C#. Zahrnuje + možnosti vykreslování obrázků, možnosti vykreslování textu a vlastní obslužný program + zdrojů. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: cs +lastmod: 2026-09-10 +og_description: Načtěte HTML dokument ze souboru pomocí Aspose.HTML v C#. Tento průvodce + zahrnuje možnosti renderování, vlastní manipulátor zdrojů a kompletní kód, který + můžete spustit ještě dnes. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Načtěte HTML dokument ze souboru pomocí Aspose.HTML – krok za krokem průvodce + C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Jak načíst HTML dokument ze souboru pomocí Aspose.HTML v C# +url: /cs/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak načíst HTML dokument ze souboru pomocí Aspose.HTML v C# + +Pokud potřebujete **načíst HTML dokument ze souboru** a řídit jeho vykreslování, tento tutoriál vám ukáže kompletní, připravené řešení. Uvidíte, jak nastavit vykreslování obrázků, povolit textové hintování a poskytnout vlastní handler zdrojů, který vrací prázdné streamy pro externí assety. Na konci průvodce můžete uložit zpracované HTML do paměťového streamu nebo jakéhokoli jiného cíle, který preferujete. + +Příklad používá Aspose.HTML pro .NET, knihovnu, která zjednodušuje zpracování HTML, CSS a SVG bez prohlížečového enginu. Není potřeba žádné externí nástroje a kód funguje s .NET 6 nebo novějším. Ujistěte se, že máte před zahájením nainstalovaný NuGet balíček Aspose.HTML. + +## Požadavky + +- .NET 6 SDK (nebo jakákoli verze .NET podporovaná Aspose.HTML) +- Visual Studio 2022 nebo jiné C# IDE +- NuGet balíček Aspose.HTML pro .NET (`Install-Package Aspose.HTML`) +- HTML soubor pojmenovaný `input.html` umístěný ve složce, na kterou můžete odkazovat z kódu + +## Krok 1: Načíst HTML dokument ze souboru + +Prvním krokem je vytvořit instanci `HTMLDocument`, která načte zdrojový soubor. Tento objekt představuje celý strom DOM a poskytuje metody pro další manipulaci. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Proč je to důležité:** Načtení souboru do `HTMLDocument` vám poskytuje plný přístup ke struktuře dokumentu, stylům a zdrojům, které můžete později vykreslovat nebo transformovat. + +## Krok 2: Nastavit možnosti vykreslování obrázků (renderování Aspose.HTML) + +Pokud plánujete stránku později rasterizovat, nastavení vykreslování obrázků zlepšuje vizuální kvalitu. Antialiasing vyhlazuje hrany a snižuje zubaté artefakty. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` je zvláště užitečný pro vektorovou grafiku a text, který bude rasterizován do PNG nebo JPEG. + +## Krok 3: Povolit textové hintování (možnosti vykreslování textu) + +Textové hintování ovlivňuje, jak jsou glyfy zarovnány k pixelovým mřížkám, což může malé fonty učinit ostřejšími. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Proč je to důležité:** Když později exportujete HTML do obrázku, hintování snižuje rozmazané znaky a zajišťuje konzistentní typografii napříč platformami. + +## Krok 4: Vytvořit vlastní handler zdrojů (custom resource handler) + +Externí zdroje jako fonty, obrázky nebo skripty mohou být v HTML odkazovány. `ResourceHandler` vám umožní řídit, jak jsou tyto zdroje získávány. V tomto příkladu handler vrací prázdný `MemoryStream` pro každý požadavek, čímž efektivně odstraňuje externí assety. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Kdy použít:** Tento vzor je užitečný v prostředích s omezenou bezpečností, při unit testování nebo když potřebujete pouze markup bez externích souborů. + +## Krok 5: Sestavit možnosti uložení HTML (konverze HTML na obrázek) + +Všechny části – handler zdrojů, nastavení vykreslování a styl písma – jsou připojeny k objektu `HtmlSaveOptions`. Tento objekt říká Aspose.HTML, jak dokument serializovat. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Vysvětlení:** `WebFontStyle` může vynutit konkrétní styl (např. tučný) pro webové fonty, které mohou chybět. `ImageRenderingOptions` a `TextOptions`, které jsme dříve nakonfigurovali, jsou zde vloženy, aby ovlivnily jakoukoli pozdější rasterizaci. + +## Krok 6: Uložit dokument do paměťového streamu (kompletní řešení) + +Nakonec zapíšete zpracované HTML do `MemoryStream`. Odtud můžete stream zapsat do souboru, odeslat jej po síti nebo předat jinému API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Výsledek:** `output.html` nyní obsahuje stejný markup jako `input.html`, ale se všemi externími zdroji nahrazenými prázdnými streamy a s nastavenými preferencemi vykreslování zakomponovanými do možností uložení. + +## Kompletní spustitelný příklad + +Spojením všech kroků získáte samostatný program, který můžete zkopírovat, vložit a spustit. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Spuštěním tohoto programu se v aktuálním adresáři vytvoří `output.html`. Otevřete soubor v prohlížeči a ověřte, že se načte původní markup, ale všechny odkazované obrázky, fonty nebo skripty chybí (byly nahrazeny prázdnými streamy). + +## Časté otázky a okrajové případy + +| Otázka | Odpověď | +|----------|--------| +| **Co když potřebuji původní zdroje místo prázdných streamů?** | Nahraďte `MemoryResourceHandler` handlerem, který čte soubory z disku nebo je stahuje přes HTTP. | +| **Mohu renderovat HTML přímo do PNG nebo JPEG?** | Ano. Použijte `ImageRenderer` se stejnými `ImageRenderingOptions` a `TextOptions`, které jste nakonfigurovali, a poté zavolejte `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Je `WebFontStyle.Bold` vyžadován?** | Ne. Je uveden jako příklad přepsání stylu písma. Vynechte ho nebo změňte na `WebFontStyle.Normal`, pokud nepotřebujete vynucený styl. | +| **Funguje to na .NET Core?** | Aspose.HTML podporuje .NET 5/6/7, takže stejný kód běží v projektech .NET Core. | +| **Jak efektivně zpracovat velké HTML soubory?** | Streamujte soubor do `HTMLDocument` pomocí konstruktoru `FileStream`, abyste se vyhnuli načtení celého souboru najednou do paměti. | + +## Závěr + +Nyní víte, jak **načíst HTML dokument ze souboru** pomocí Aspose.HTML, nakonfigurovat **možnosti vykreslování obrázků** a **možnosti vykreslování textu**, a použít **vlastní handler zdrojů** k řízení externích assetů. Kompletní příklad ukazuje uložení zpracovaného HTML do paměťového streamu, který můžete podle potřeby uložit nebo přenést. + +Dále můžete prozkoumat **konverzi HTML na obrázek** výměnou `HtmlSaveOptions` za `ImageRenderer`, nebo experimentovat s funkcemi **renderování Aspose.HTML**, jako jsou CSS media queries, podpora SVG a export do PDF. Tyto rozšíření vám umožní vytvořit bohaté pipeline pro zpracování dokumentů kompletně v C#. + +Příjemné programování! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/czech/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..9264990f5 --- /dev/null +++ b/html/czech/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: Naučte se, jak používat HtmlSaveOptions v C# k řízení stylů webových + fontů a ukládání HTML souborů pomocí Aspose.HTML. Obsahuje kompletní ukázkový kód + a praktické tipy. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: cs +lastmod: 2026-09-10 +og_description: Jak použít HtmlSaveOptions v C# k povolení tučných a kurzívních webových + fontů při ukládání HTML pomocí Aspose.HTML. Sledujte kompletní příklad a tipy na + osvědčené postupy. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Jak používat HtmlSaveOptions v C# s Aspose.HTML – průvodce krok za krokem +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Jak použít HtmlSaveOptions v C# s Aspose.HTML +url: /cs/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak používat HtmlSaveOptions v C# s Aspose.HTML + +Pokud potřebujete řídit, jak Aspose.HTML ukládá HTML dokument, **je nezbytné se naučit, jak používat HtmlSaveOptions**. Tento tutoriál vám krok za krokem ukáže, jak pomocí HtmlSaveOptions povolit tučné a kurzívní web‑fontové styly při ukládání dokumentu. + +Knihovna Aspose HTML poskytuje bohaté API pro načítání, manipulaci a export HTML obsahu. Na konci tohoto průvodce budete schopni: + +* Načíst existující HTML soubor do `HTMLDocument`. +* Nastavit `HtmlSaveOptions` tak, aby použil konkrétní příznaky `WebFontStyle`. +* Uložit upravený dokument na nové místo nebo do streamu. +* Rozšířit řešení o další fontové styly, vlastní CSS a zpracování chyb. + +## Požadavky + +Před zahájením se ujistěte, že máte: + +* .NET 6.0 nebo novější nainstalovaný. +* Platnou licenci pro **Aspose.HTML for .NET** (pro tento příklad funguje i bezplatná zkušební verze). +* Visual Studio 2022 (nebo jakékoli C# IDE) pro kompilaci a spuštění kódu. + +Kromě `Aspose.HTML` nejsou vyžadovány žádné další NuGet balíčky. + +## Krok 1: Nastavení projektu a import jmenných prostorů + +Vytvořte nový projekt **Console App** a přidejte NuGet balíček Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Poté na začátku souboru `Program.cs` importujte požadované jmenné prostory: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Tyto jmenné prostory poskytují typy `HTMLDocument`, `HtmlSaveOptions` a `WebFontStyle`, které budete během tutoriálu používat. + +## Krok 2: Načtení zdrojového HTML dokumentu + +Prvním krokem je načíst HTML, které chcete zpracovat. Nahraďte `"YOUR_DIRECTORY/input.html"` skutečnou cestou k vašemu souboru. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` parsuje značkování, vytvoří strom DOM a připraví jej k manipulaci. Pokud soubor neexistuje, je vyvolána výjimka, takže pro produkční kód můžete tento volání zabalit do bloku try‑catch. + +## Krok 3: Vytvoření a konfigurace HtmlSaveOptions + +`HtmlSaveOptions` vám umožňuje jemně doladit proces ukládání. Pro povolení tučných a kurzívních web‑fontových stylů kombinujte odpovídající příznaky `WebFontStyle` pomocí bitového OR operátoru (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Proč konfigurovat WebFontStyle? + +Při exportu HTML dokumentu může Aspose.HTML vložit webové fonty, které odpovídají původnímu stylu. Nastavením `WebFontStyle` řeknete exportéru, které varianty fontů zahrnout. To snižuje konečnou velikost souboru, pokud potřebujete jen konkrétní styly, a zajišťuje, že vykreslený výstup odpovídá zdroji. + +#### Běžné varianty + +| Požadovaný styl | Corresponding `WebFontStyle` flag | +|-----------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +Můžete kombinovat libovolné varianty, které vyhovují vašemu scénáři. + +## Krok 4: Uložení dokumentu s nakonfigurovanými možnostmi + +Nyní zapište dokument do nového souboru. Metoda `Save` přijímá cílovou cestu a připravenou instanci `HtmlSaveOptions`. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Pokud potřebujete zapisovat do paměťového streamu (např. pro odeslání souboru přes HTTP), použijte přetížení, které přijímá objekt `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Krok 5: Ověření výsledku + +Otevřete `output.html` v prohlížeči nebo prohlédněte soubor v textovém editoru. Měli byste vidět, že blok ` + + +
+ +"; +``` + +De HTML definieert een eenvoudige vectorvorm die profiteert van antialiasing bij rasterisatie. + +## Stap 2: Initialiseert de renderengine + +Aspose.HTML gebruikt een `HtmlRenderer` samen met `ImageRenderingOptions`. Hier schakel je **how to enable antialiasing** in voor de uiteindelijke bitmap. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Waarom `UseAntialiasing = true` belangrijk is**: De renderengine tekent vectorvormen, tekst en verlopen met sub‑pixel‑precisie. Antialiasing inschakelen vertelt de rasterizer om randpixels te mengen met hun buren, waardoor gekartelde lijnen verdwijnen die ontstaan wanneer `UseAntialiasing` op de standaardwaarde `false` blijft staan. Dit is de kern van **high quality image rendering**. + +## Stap 3: Render de HTML naar een afbeelding + +Met de opties geconfigureerd, roep je de `RenderToImage`‑methode aan. De methode retourneert een `Image`‑object dat je kunt opslaan op schijf of direct kunt streamen naar een response. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Na uitvoering bevat `output.png` een gladde, antialiased cirkel. Open het bestand in een willekeurige afbeeldingsviewer om het resultaat te verifiëren. + +![hoe antialiasing in te schakelen in Aspose.HTML rendering](/images/antialiasing-example.png){alt="hoe antialiasing in te schakelen in Aspose.HTML rendering"} + +## Stap 4: Controleer de hoogwaardige output (how to render html image) + +Je kunt programmatisch de afbeeldingsafmetingen en DPI bevestigen om er zeker van te zijn dat de rendering aan je verwachtingen voldoet. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typische console‑output: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +De verhoogde DPI gecombineerd met antialiasing levert een schoon resultaat op, zelfs wanneer de afbeelding wordt opgeschaald. Dit demonstreert **how to render html image** met professionele kwaliteit. + +## Veelvoorkomende variaties en randgevallen + +| Situatie | Aanbevolen aanpassing | +|-----------|-------------------| +| Zeer grote pagina's renderen (bijv. full‑screen web‑apps) | Verhoog `ImageRenderingOptions.Width` / `Height` of stel `Scale` in om geheugengebruik te beheersen. | +| Transparante achtergrond nodig | Stel `imageOptions.BackgroundColor = Color.Transparent;` | +| Doel JPEG voor kleinere bestandsgrootte | Verander `ImageFormat` naar `ImageFormat.Jpeg` en pas `Quality` aan (0‑100). | +| Uitvoeren in een Linux‑container zonder GUI | Aspose.HTML is volledig headless; er zijn geen extra afhankelijkheden nodig. | +| Je moet antialiasing uitschakelen voor een pixel‑perfecte UI‑test | Stel `UseAntialiasing = false;` – de randen zijn scherp maar kunnen gekarteld lijken. | + +### Pro tip + +Wanneer je een batch van afbeeldingen genereert, hergebruik dan één `HTMLDocument`‑instantie en wijzig alleen de `Content`‑eigenschap tussen renders. Dit vermindert de overhead van het herhaaldelijk parseren van dezelfde HTML en verbetert de doorvoersnelheid. + +## Volledige broncode + +Hieronder staat het volledige programma dat je kunt kopiëren naar een nieuw console‑app‑project en direct kunt uitvoeren. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [How to render html to an image with C# – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML to Image Tutorial – Render HTML to PNG in C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/dutch/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..55388b122 --- /dev/null +++ b/html/dutch/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: Verbeter de teksthelderheid bij het renderen van HTML met Aspose.HTML + door hinting in te schakelen. Deze gids laat zien hoe je hinting inschakelt en waarom + het belangrijk is. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: nl +lastmod: 2026-09-10 +og_description: Verbeter de teksthelderheid in Aspose.HTML door te leren hoe je hinting + inschakelt. Volg de stap‑voor‑stap gids voor duidelijkere tekst op elk platform. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Verbeter de teksthelderheid in Aspose.HTML – schakel hinting in voor scherpere + weergave +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Hoe de teksthelderheid in Aspose.HTML te verbeteren met hinting +url: /nl/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe de teksthelderheid te verbeteren in Aspose.HTML met hinting + +Als je de teksthelderheid wilt verbeteren bij het renderen van HTML met Aspose.HTML, laat deze gids je een volledige oplossing zien. Door hinting in te schakelen krijg je scherpere glyphs, vooral op niet‑Windows platforms waar de standaardrendering wazig kan lijken. + +In deze tutorial leer je hoe je hinting inschakelt, waarom het belangrijk is voor teksthelderheid, en hoe je de instelling integreert in een typische Aspose.HTML‑workflow. Er is geen externe documentatie nodig—alles wat je nodig hebt staat in de onderstaande stappen. + +## Vereisten + +* .NET 6.0 of later (de code werkt ook met .NET Framework 4.7+) +* Een gelicentieerde kopie van **Aspose.HTML for .NET** (de gratis proefversie werkt voor testen) +* Basiskennis van C# en Visual Studio of een andere IDE naar keuze + +Deze vereisten zijn minimaal; dezelfde aanpak werkt in console‑applicaties, ASP.NET Core‑services of desktop‑applicaties. + +## Waarom het inschakelen van hinting de teksthelderheid verbetert + +Hinting is een proces dat de omtrek van elke glyph aanpast zodat deze op het pixelrooster van het beeldscherm uitlijnt. Zonder hinting, vooral op lage resolutie of high‑DPI schermen, kunnen tekens er wazig of ongelijkmatig uitzien. Het inschakelen van hinting vertelt de renderengine om deze aanpassingen automatisch toe te passen, wat resulteert in: + +* Consistente lijndikte over alle tekens +* Betere leesbaarheid op Linux, macOS en oudere Windows‑versies +* Een professionele uitstraling voor PDF’s, screenshots of on‑screen previews + +Aspose.HTML maakt dit gedrag beschikbaar via de **TextOptions.UseHinting**‑eigenschap, die standaard `false` is voor achterwaartse compatibiliteit. + +## Stap 1: Maak een `TextOptions`‑instantie + +De eerste stap is het instantieren van de **TextOptions**‑klasse. Dit object groepeert alle tekstgerelateerde renderinstellingen, waardoor ze eenvoudig aan de render‑pipeline kunnen worden doorgegeven. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Het aanmaken van het object wijzigt de rendering nog niet; het bereidt alleen een container voor de opties die je later zult instellen. + +## Stap 2: Schakel hinting in om de teksthelderheid te verbeteren + +Stel de **UseHinting**‑eigenschap in op `true`. Deze ene regel activeert het hinting‑algoritme voor elk stuk tekst dat wordt gerenderd met de bijbehorende opties. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Wanneer `UseHinting` `true` is, past Aspose.HTML automatisch sub‑pixel‑aanpassingen toe op elke glyph. Het effect is het duidelijkst bij lettertypen met fijne details, zoals schreeflettertypen of kleine tekst. + +### Pro‑tip: Combineer hinting met anti‑aliasing + +Als je ook gladdere randen wilt, kun je anti‑aliasing inschakelen naast hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Beide instellingen samen leveren de beste visuele nauwkeurigheid over een breed scala aan apparaten. + +## Stap 3: Koppel `TextOptions` aan het renderproces + +Je moet de geconfigureerde `TextOptions` doorgeven aan de **HtmlRenderer** (of een andere renderklasse die je gebruikt). Hieronder staat een minimaal voorbeeld dat een HTML‑string laadt, de opties toepast en de uitvoer naar een PNG‑bestand schrijft. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Uitleg van belangrijke regels** + +* `HTMLDocument` parseert de HTML‑markup. +* `ImageDevice` definieert de uitvoerafmetingen (800 × 600 pixels in dit geval). +* `HtmlRenderer` voert de daadwerkelijke rendering uit; door `textOptions` toe te wijzen aan `renderer.Options.TextOptions` wordt gegarandeerd dat hinting wordt toegepast. +* `device.Save("output.png")` schrijft de uiteindelijke afbeelding naar schijf. + +Het uitvoeren van deze code produceert `output.png` waarin de kop en alinea scherp verschijnen, zelfs op een 96 dpi‑monitor. + +## Stap 4: Verifieer het resultaat + +Open de gegenereerde afbeelding in een willekeurige viewer. Vergelijk deze met een afbeelding die **zonder** hinting is gerenderd (stel `UseHinting = false` in). Je zou het volgende moeten opmerken: + +* Scherper randen op de letters “H”, “e”, “l”, “o” +* Meer uniforme lijndikte door de hele alinea +* Verminderde ghosting op diagonale lijnen van tekens + +Als het verschil subtiel is op je scherm, zoom dan in of print de afbeelding; de verbetering wordt duidelijker bij hogere vergrotingen. + +## Veelvoorkomende variaties en randgevallen + +### Renderen naar PDF in plaats van PNG + +Als je doel een PDF is, vervang dan de `ImageDevice` door een `PdfDevice`. Hetzelfde `TextOptions`‑object werkt zonder wijziging: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### High‑DPI schermen + +Op schermen met schaalfactoren (bijv. 150 % of 200 %) wil je misschien de apparaatgrootte proportioneel vergroten om de visuele kwaliteit te behouden. Hinting blijft van toepassing en het resultaat blijft scherp. + +### Linux‑ of macOS‑omgevingen + +Op Linux kan de standaard renderengine terugvallen op een bitmap‑fontrenderer die hinting negeert tenzij je het expliciet inschakelt. De vlag `UseHinting = true` dwingt de engine om TrueType‑hinting toe te passen, waardoor het typische “vage” uiterlijk op die platforms verdwijnt. + +### Lettertypen zonder hinting‑tabellen + +Sommige moderne OpenType‑lettertypen laten hinting‑gegevens weg. In die gevallen valt Aspose.HTML terug op auto‑hinting, wat nog steeds de duidelijkheid verbetert ten opzichte van geen hinting. + +## Stap 5: Best practices voor productiecodel + +1. **Maak één enkele `TextOptions`‑instantie** en hergebruik deze bij renderaanroepen. Dit vermindert de overhead van objectallocatie. +2. **Combineer hinting met anti‑aliasing** (`UseAntiAliasing = true`) voor de gladste output. +3. **Test op de doelplatformen** (Windows, Linux, macOS) omdat visuele verschillen kunnen variëren. +4. **Log de renderconfiguratie** in productielogs; dit helpt bij het oplossen van onverwachte visuele artefacten. +5. **Houd Aspose.HTML up‑to‑date**. Nieuwere versies kunnen extra tekst‑renderverbeteringen introduceren. + +## Volledig werkend voorbeeld + +Hieronder staat een zelfstandige console‑applicatie die alles wat besproken is demonstreert. Kopieer de code naar een nieuw .NET console‑project, voeg het Aspose.HTML NuGet‑pakket toe, en voer het uit. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Verwachte output** + +Het uitvoeren van het programma maakt `hinted_output.png` aan. De kop “Hinting in action” en de alinea‑tekst verschijnen scherp, met uniforme lijndiktes en geen vage randen. Als je `UseHinting = true` uitcommentarieert, zal dezelfde afbeelding licht vervaagde tekens tonen, wat het voordeel van de instelling illustreert. + +## Conclusie + +Je weet nu hoe je de teksthelderheid in Aspose.HTML kunt verbeteren door hinting in te schakelen. Het proces omvat het maken van een `TextOptions`‑object, het instellen van `UseHinting` (optioneel `UseAntiAliasing`), en het koppelen van de opties aan de renderer. Deze aanpak werkt voor PNG, JPEG, PDF en andere uitvoerformaten, en levert consistente visuele kwaliteit op Windows, Linux en macOS. + +Vervolgens kun je gerelateerde onderwerpen verkennen, zoals **hoe hinting in te schakelen** voor aangepaste lettertypen, **renderprestaties optimaliseren**, of **CSS gebruiken om de tekstweergave** in Aspose.HTML te regelen. Experimenteer met verschillende lettertypen en DPI‑instellingen om te zien hoe hinting zich aan elk scenario aanpast. + +Veel plezier met coderen, en geniet van scherpere tekst in elke Aspose.HTML‑rendering! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids zijn getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe HTML te renderen naar PNG met Aspose – Complete gids](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Hoe Aspose te gebruiken om HTML te renderen naar PNG – Stapsgewijze gids](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [HTML‑document maken met gestylede tekst en exporteren naar PDF – Volledige gids](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/dutch/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..943f02e4e --- /dev/null +++ b/html/dutch/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Hoe HTML te renderen in C# met Aspose.Html. Leer HTML en CSS te verwerken, + HTML op te slaan, HTML naar een stream te converteren en een HTML-document te laden + in .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: nl +lastmod: 2026-09-10 +og_description: Hoe HTML te renderen in C# met Aspose.Html. Deze gids laat zien hoe + je HTML en CSS verwerkt, HTML opslaat, HTML naar een stream converteert en een HTML-document + efficiënt laadt. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: HTML renderen in C# met Aspose.Html – stapsgewijze tutorial +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Hoe HTML te renderen in C# met Aspose.Html – volledige gids +url: /nl/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe HTML renderen in C# met Aspose.Html – volledige gids + +Als je **how to render html** binnen een .NET‑applicatie moet uitvoeren, laat deze tutorial je de complete workflow zien. Je zult zien hoe je HTML CSS verwerkt, hoe je HTML opslaat, HTML naar een stream converteert en een HTML‑document laadt in C# met behulp van de Aspose.Html‑bibliotheek. + +HTML renderen in een server‑side context vereist vaak meer dan alleen een bestand laden—je moet ook gekoppelde bronnen zoals afbeeldingen en stylesheets afhandelen. Deze gids leidt je door elke stap, van het laden van het document tot het aanpassen van resource‑handling en uiteindelijk het extraheren van de gerenderde output als een memory stream. + +Aan het einde van het artikel kun je: + +* Een HTML‑document laden vanaf schijf of een URL (`load html document c#`). +* Een aangepaste `ResourceHandler` leveren om **process html css** on‑the‑fly. +* De gerenderde HTML opslaan en **convert html to stream** voor verdere verwerking. +* Het resultaat behouden met **how to save html**‑technieken die in elke .NET‑omgeving werken. + +## Vereisten + +Voordat je begint, zorg ervoor dat je het volgende hebt: + +* .NET 6.0 SDK of later geïnstalleerd. +* Visual Studio 2022 (of een IDE die .NET 6 ondersteunt). +* Een NuGet‑referentie naar **Aspose.Html** (`dotnet add package Aspose.Html`). +* Een `input.html`‑bestand geplaatst in een bekende map (het voorbeeld gebruikt `YOUR_DIRECTORY/input.html`). + +Er zijn geen extra third‑party bibliotheken vereist. + +## Hoe HTML renderen – stapsgewijze gids + +### Stap 1: Laad het HTML‑document in C# + +De eerste handeling is het maken van een `HTMLDocument`‑instance die de bron‑markup vertegenwoordigt. Dit is de kern van **how to render html** met Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Waarom dit belangrijk is:* Het laden van het document parseert de markup en bouwt een interne DOM, die de renderer later gebruikt om CSS toe te passen en bronnen op te lossen. + +### Stap 2: Maak een aangepaste resource‑handler om **process html css** + +Wanneer de renderer externe bronnen tegenkomt (afbeeldingen, CSS‑bestanden, fonts), vraagt hij een `ResourceHandler` om een stream. Door een aangepaste handler te bieden krijg je volledige controle over hoe elke bron wordt opgehaald, getransformeerd of gesimuleerd. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Waarom dit belangrijk is:* De handler is waar je **process html css**‑logica implementeert—bijv. inline CSS, afbeeldingen vervangen door placeholders, of beveiligingsfilters toepassen. + +### Stap 3: Configureer `HtmlSaveOptions` om de aangepaste handler te gebruiken + +`HtmlSaveOptions` vertelt de renderer hoe de output moet worden weggeschreven. Wijs de `ResourceHandler` die je zojuist hebt gemaakt toe zodat de renderer deze aanroept voor elke externe referentie. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Het instellen van `EmbedCss` en `EmbedImages` is nuttig wanneer je later **convert html to stream** en een zelf‑containende uitkomst nodig hebt. + +### Stap 4: Sla het document op en **convert html to stream** + +Nu kun je het document renderen en het resultaat vastleggen in een `MemoryStream`. Dit is de kern van **how to save html** wanneer je de output in het geheugen wilt hebben in plaats van in een fysiek bestand. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Waarom dit belangrijk is:* De `MemoryStream` biedt een flexibele, binaire representatie van de gerenderde HTML, die je kunt opslaan, verzenden of verder manipuleren zonder het bestandssysteem aan te raken. + +## Veelvoorkomende randgevallen afhandelen + +| Situatie | Aanbevolen aanpak | +|-----------|----------------------| +| **Ontbrekende CSS‑ of afbeeldingsbestanden** | In `MyResourceHandler.HandleResource`, controleer `File.Exists` voordat je opent. Retourneer een lege `MemoryStream` of een placeholder‑afbeelding als het bestand ontbreekt. | +| **Grote HTML‑bestanden (>10 MB)** | Verhoog de standaard buffer‑grootte van de `MemoryStream` (`new MemoryStream(capacity)`) om frequente herallocaties te voorkomen. | +| **Relatieve URL's met `..` segmenten** | Gebruik `new Uri(baseUri, info.Uri)` om het volledige pad op te lossen voordat je het bestandssysteem benadert. | +| **Thread‑veiligheid in ASP.NET** | Instantieer een nieuw `HTMLDocument` en `MyResourceHandler` per request; vermijd het delen van instanties tussen threads. | +| **Encoding‑problemen** | Stel `saveOpts.Encoding = Encoding.UTF8` in om UTF‑8 output te garanderen, vooral wanneer de bron niet‑ASCII tekens bevat. | + +## Pro‑tip: dezelfde handler hergebruiken voor meerdere documenten + +Als je veel HTML‑bestanden in één batch verwerkt, kun je één `MyResourceHandler`‑instance behouden en alleen de interne lookup‑tabel aanpassen. Dit vermindert de overhead van object‑allocatie en versnelt de **process html css**‑fase. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Volledig, uitvoerbaar voorbeeld + +Hieronder staat een compleet programma dat je kunt plakken in een console‑applicatie. Het demonstreert **how to render html**, **process html css**, **how to save html**, **convert html to stream**, en **load html document c#**—alles in één stroom. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Verwachte output** (afgekapt voor beknoptheid): + + + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met stapsgewijze uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe HTML opslaan met Aspose.Html – Complete C#‑gids](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Hoe Aspose gebruiken om HTML naar PNG te renderen in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Hoe Aspose gebruiken om HTML naar PNG te renderen – Stapsgewijze gids](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/net/working-with-html-documents/_index.md b/html/dutch/net/working-with-html-documents/_index.md index 21c84d694..7475e7230 100644 --- a/html/dutch/net/working-with-html-documents/_index.md +++ b/html/dutch/net/working-with-html-documents/_index.md @@ -36,11 +36,14 @@ Zodra u de basis onder de knie hebt, gaan we dieper in op het creatieproces. In Laten we nu uw vaardigheden naar een hoger niveau tillen. Het bewerken van HTML-documenten is een veelvoorkomende taak voor webontwikkelaars, en Aspose.HTML vereenvoudigt dit proces aanzienlijk. In deze sectie behandelen we het maken, manipuleren en stylen van documenten. U ontdekt hoe u het uiterlijk en de functionaliteit van uw webcontent kunt verbeteren, waardoor deze aantrekkelijk en gebruiksvriendelijk wordt. +### [HTML-document laden vanuit bestand met Aspose.HTML in C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [HTML opslaan in C# – Complete gids met een aangepaste resourcehandler](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Koptekst vet maken met CSS & C# – Complete stapsgewijze handleiding](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [HTML opslaan in C# – Aangepaste resourcehandlers & ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [HTML opslaan met Aspose.Html – Complete C#‑gids](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [HTML zippen in C# – Complete stapsgewijze handleiding](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Hoe HtmlSaveOptions te gebruiken in C# met Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/dutch/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/dutch/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..3cec37fee --- /dev/null +++ b/html/dutch/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Leer hoe je een HTML‑document uit een bestand laadt met Aspose.HTML in + C#. Inclusief opties voor afbeeldingsrendering, tekstrendering en een aangepaste + resourcehandler. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: nl +lastmod: 2026-09-10 +og_description: Laad HTML-document vanuit een bestand met Aspose.HTML in C#. Deze + gids behandelt renderopties, een aangepaste resourcehandler en volledige code die + je vandaag nog kunt uitvoeren. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: HTML-document laden vanuit bestand met Aspose.HTML – stapsgewijze C#-gids +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Hoe een HTML‑document te laden vanuit een bestand met Aspose.HTML in C# +url: /nl/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe HTML-document laden vanuit bestand met Aspose.HTML in C# + +Als je een **HTML-document vanuit bestand** moet laden en de weergave ervan wilt controleren, laat deze tutorial je een complete, kant‑klaar oplossing zien. Je ziet hoe je afbeeldingsweergave configureert, tekst‑hinting inschakelt en een aangepaste resource‑handler levert die lege streams retourneert voor externe assets. Aan het einde van de gids kun je de verwerkte HTML opslaan in een geheugen‑stream of een andere bestemming naar keuze. + +Het voorbeeld maakt gebruik van Aspose.HTML for .NET, een bibliotheek die HTML, CSS en SVG verwerking vereenvoudigt zonder een browser‑engine. Er zijn geen externe tools nodig en de code werkt met .NET 6 of later. Zorg ervoor dat je het Aspose.HTML NuGet‑pakket geïnstalleerd hebt voordat je begint. + +## Vereisten + +- .NET 6 SDK (of een andere .NET‑versie ondersteund door Aspose.HTML) +- Visual Studio 2022 of een andere C#‑IDE +- Aspose.HTML for .NET NuGet‑pakket (`Install-Package Aspose.HTML`) +- Een HTML‑bestand genaamd `input.html` geplaatst in een map die je vanuit code kunt refereren + +## Stap 1: Laad het HTML-document vanuit een bestand + +De eerste handeling is het aanmaken van een `HTMLDocument`‑instantie die het bronbestand leest. Dit object vertegenwoordigt de volledige DOM‑boom en biedt methoden voor verdere manipulatie. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Waarom dit belangrijk is:** Het laden van het bestand in een `HTMLDocument` geeft je volledige toegang tot de structuur, stijlen en bronnen van het document, die je later kunt renderen of transformeren. + +## Stap 2: Stel afbeeldingsrenderopties in (Aspose.HTML rendering) + +Als je later de pagina wilt rasteren, verbetert het configureren van afbeeldingsrenderen de visuele kwaliteit. Antialiasing maakt randen gladder en vermindert gekartelde artefacten. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` is vooral nuttig voor vectorafbeeldingen en tekst die naar PNG of JPEG wordt gerasterd. + +## Stap 3: Schakel tekst‑hinting in (tekst‑renderopties) + +Tekst‑hinting beïnvloedt hoe glyphs op pixelrasters worden uitgelijnd, waardoor kleine lettergroottes scherper kunnen lijken. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Waarom het belangrijk is:** Wanneer je later de HTML naar een afbeelding exporteert, vermindert hinting onscherpe tekens en zorgt het voor consistente typografie over verschillende platformen. + +## Stap 4: Maak een aangepaste resource‑handler (custom resource handler) + +Externe bronnen zoals lettertypen, afbeeldingen of scripts kunnen in de HTML worden gerefereerd. Een `ResourceHandler` stelt je in staat te bepalen hoe die bronnen worden opgehaald. In dit voorbeeld retourneert de handler een lege `MemoryStream` voor elk verzoek, waardoor externe assets effectief worden verwijderd. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Wanneer te gebruiken:** Dit patroon is handig voor omgevingen met beveiligingsbeperkingen, unit‑tests, of wanneer je alleen de markup nodig hebt zonder externe bestanden. + +## Stap 5: Stel HTML‑opslaanopties samen (HTML naar afbeelding conversie) + +Alle onderdelen — resource‑handler, renderinstellingen en lettertype‑stijl — worden gekoppeld aan een `HtmlSaveOptions`‑object. Dit object vertelt Aspose.HTML hoe het document moet serialiseren. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Uitleg:** `WebFontStyle` kan een bepaalde stijl (bijv. vet) afdwingen voor webfonts die mogelijk ontbreken. De `ImageRenderingOptions` en `TextOptions` die we eerder hebben geconfigureerd, worden hier geïnjecteerd, zodat ze van invloed zijn op eventuele rasterisatie die later plaatsvindt. + +## Stap 6: Sla het document op in een geheugen‑stream (volledige oplossing) + +Tot slot schrijf je de verwerkte HTML naar een `MemoryStream`. Vanaf hier kun je de stream naar een bestand schrijven, via een netwerk verzenden, of doorgeven aan een andere API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Resultaat:** `output.html` bevat nu dezelfde markup als `input.html`, maar met alle externe bronnen vervangen door lege streams, en met de rendervoorkeuren ingebakken in de opslaanopties. + +## Volledig uitvoerbaar voorbeeld + +Alle stappen samenvoegen geeft je een zelfstandige applicatie die je kunt kopiëren, plakken en uitvoeren. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Het uitvoeren van dit programma genereert `output.html` in de huidige map. Open het bestand in een browser om te bevestigen dat de oorspronkelijke markup wordt geladen, maar dat gekoppelde afbeeldingen, lettertypen of scripts ontbreken (ze zijn vervangen door lege streams). + +## Veelgestelde vragen en randgevallen + +| Vraag | Antwoord | +|----------|--------| +| **Wat als ik de originele bronnen nodig heb in plaats van lege streams?** | Vervang `MemoryResourceHandler` door een handler die bestanden van de schijf leest of ze downloadt via HTTP. | +| **Kan ik de HTML direct renderen naar PNG of JPEG?** | Ja. Gebruik `ImageRenderer` met dezelfde `ImageRenderingOptions` en `TextOptions` die je hebt geconfigureerd, en roep vervolgens `renderer.Render(page, outputStream, ImageFormat.Png)` aan. | +| **Is `WebFontStyle.Bold` vereist?** | Nee. Het wordt getoond als een voorbeeld van het overschrijven van de lettertype‑stijl. Laat het weg of wijzig het naar `WebFontStyle.Normal` als je geen geforceerde stijl nodig hebt. | +| **Werkt dit op .NET Core?** | Aspose.HTML ondersteunt .NET 5/6/7, dus dezelfde code werkt in .NET Core‑projecten. | +| **Hoe verwerk ik grote HTML‑bestanden efficiënt?** | Stream het bestand naar `HTMLDocument` met behulp van een `FileStream`‑constructor om te voorkomen dat het volledige bestand in één keer in het geheugen wordt geladen. | + +## Conclusie + +Je weet nu hoe je een **HTML-document vanuit bestand** kunt **laden** met Aspose.HTML, **afbeeldingsrenderopties** en **tekst‑renderopties** kunt configureren, en een **aangepaste resource‑handler** kunt toepassen om externe assets te beheersen. Het volledige voorbeeld laat zien hoe je de verwerkte HTML opslaat in een geheugen‑stream, die je naar behoefte kunt bewaren of verzenden. + +Vervolgens kun je **HTML naar afbeelding conversie** verkennen door de `HtmlSaveOptions` te vervangen door een `ImageRenderer`, of experimenteren met **Aspose.HTML rendering**‑functies zoals CSS‑media‑queries, SVG‑ondersteuning en PDF‑export. Deze uitbreidingen stellen je in staat om volledige document‑verwerkingspijplijnen te bouwen, volledig in C#. + +Veel programmeerplezier! + +## Wat kun je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stapsgewijze uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [HTML laden via een externe server in .NET met Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [HTML laden via URL in .NET met Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [HTML opslaan in C# – Complete gids met een aangepaste resource‑handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/dutch/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..5e8708696 --- /dev/null +++ b/html/dutch/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Leer hoe je HtmlSaveOptions in C# kunt gebruiken om web‑fontstijlen te + beheren en HTML‑bestanden op te slaan met Aspose.HTML. Volledig codevoorbeeld en + praktische tips inbegrepen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: nl +lastmod: 2026-09-10 +og_description: Hoe HtmlSaveOptions in C# te gebruiken om vette en cursieve web‑fontstijlen + in te schakelen bij het opslaan van HTML met Aspose.HTML. Volg het volledige voorbeeld + en de best‑practice‑tips. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Hoe HtmlSaveOptions te gebruiken in C# met Aspose.HTML – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Hoe HtmlSaveOptions te gebruiken in C# met Aspose.HTML +url: /nl/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe HtmlSaveOptions te gebruiken in C# met Aspose.HTML + +Als je de manier wilt controleren waarop Aspose.HTML een HTML‑document opslaat, **is het leren gebruiken van HtmlSaveOptions essentieel**. Deze tutorial laat je stap‑voor‑stap zien hoe je HtmlSaveOptions gebruikt om vette en cursieve web‑font‑stijlen in te schakelen tijdens het opslaan van een document. + +De Aspose HTML‑bibliotheek biedt een uitgebreide API voor het laden, manipuleren en exporteren van HTML‑inhoud. Aan het einde van deze gids kun je: + +* Een bestaand HTML‑bestand laden in een `HTMLDocument`. +* `HtmlSaveOptions` configureren om specifieke `WebFontStyle`‑vlaggen toe te passen. +* Het gewijzigde document opslaan naar een nieuwe locatie of een stream. +* De oplossing uitbreiden voor andere lettertype‑stijlen, aangepaste CSS en foutafhandeling. + +## Vereisten + +Zorg ervoor dat je het volgende hebt: + +* .NET 6.0 of hoger geïnstalleerd. +* Een geldige licentie voor **Aspose.HTML for .NET** (de gratis proefversie werkt voor dit voorbeeld). +* Visual Studio 2022 (of een andere C#‑IDE) om de code te compileren en uit te voeren. + +Er zijn geen extra NuGet‑pakketten vereist naast `Aspose.HTML`. + +## Stap 1: Het project instellen en namespaces importeren + +Maak een nieuw **Console App**‑project aan en voeg het Aspose.HTML NuGet‑pakket toe: + +```bash +dotnet add package Aspose.HTML +``` + +Importeer vervolgens bovenaan `Program.cs` de benodigde namespaces: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Deze namespaces maken de types `HTMLDocument`, `HtmlSaveOptions` en `WebFontStyle` beschikbaar die je gedurende de tutorial zult gebruiken. + +## Stap 2: Laad het bron‑HTML‑document + +De eerste handeling is het lezen van de HTML die je wilt verwerken. Vervang `"YOUR_DIRECTORY/input.html"` door het daadwerkelijke pad naar je bestand. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` parseert de markup, bouwt een DOM‑boom en maakt deze klaar voor manipulatie. Als het bestand niet bestaat, wordt er een uitzondering gegooid, dus je wilt deze oproep wellicht omhullen met een try‑catch‑blok voor productiecodel. + +## Stap 3: Maak en configureer HtmlSaveOptions + +`HtmlSaveOptions` stelt je in staat het opslaan fijn af te stemmen. Om vette en cursieve web‑font‑stijlen in te schakelen, combineer je de bijbehorende `WebFontStyle`‑vlaggen met de bitwise OR‑operator (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Waarom WebFontStyle configureren? + +Wanneer je een HTML‑document exporteert, kan Aspose.HTML web‑fonts insluiten die overeenkomen met de oorspronkelijke opmaak. Door `WebFontStyle` in te stellen, vertel je de exporter welke font‑varianten moeten worden opgenomen. Dit verkleint de uiteindelijke bestandsgrootte wanneer je alleen specifieke stijlen nodig hebt en garandeert dat de gerenderde output overeenkomt met de bron. + +#### Veelvoorkomende variaties + +| Gewenste stijl | Bijbehorende `WebFontStyle`‑vlag | +|----------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +Je kunt elke gewenste combinatie gebruiken die bij je scenario past. + +## Stap 4: Sla het document op met de geconfigureerde opties + +Schrijf nu het document naar een nieuw bestand. De `Save`‑methode accepteert het doelpad en de `HtmlSaveOptions`‑instantie die je hebt voorbereid. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Als je naar een memory‑stream wilt schrijven (bijvoorbeeld om het bestand via HTTP te verzenden), gebruik dan de overload die een `Stream`‑object accepteert: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Stap 5: Verifieer het resultaat + +Open `output.html` in een browser of inspecteer het bestand met een teksteditor. Je zou moeten zien dat het ` + + +
+ +"; +``` + +The HTML defines a simple vector shape that benefits from antialiasing when rasterized. + +## Step 2: Initialize the rendering engine + +Aspose.HTML uses a `HtmlRenderer` together with `ImageRenderingOptions`. This is where you **how to enable antialiasing** for the final bitmap. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Why `UseAntialiasing = true` matters**: The rendering engine draws vector shapes, text, and gradients using sub‑pixel precision. Enabling antialiasing tells the rasterizer to blend edge pixels with their neighbors, eliminating jagged lines that appear when `UseAntialiasing` is left at the default `false`. This is the core of **high quality image rendering**. + +## Step 3: Render the HTML to an image + +With the options configured, call the `RenderToImage` method. The method returns an `Image` object that you can save to disk or stream directly to a response. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +After execution, `output.png` contains a smooth, antialiased circle. Open the file in any image viewer to verify the result. + +![how to enable antialiasing in Aspose.HTML rendering](/images/antialiasing-example.png){alt="how to enable antialiasing in Aspose.HTML rendering"} + +## Step 4: Verify high‑quality output (how to render html image) + +You can programmatically confirm the image dimensions and DPI to ensure the rendering meets your expectations. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typical console output: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +The increased DPI combined with antialiasing produces a clean result even when the image is scaled up. This demonstrates **how to render html image** with professional quality. + +## Common variations and edge cases + +| Situation | Recommended tweak | +|-----------|-------------------| +| Rendering very large pages (e.g., full‑screen web apps) | Increase `ImageRenderingOptions.Width` / `Height` or set `Scale` to control memory usage. | +| Need transparent background | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| Targeting JPEG for smaller file size | Change `ImageFormat` to `ImageFormat.Jpeg` and adjust `Quality` (0‑100). | +| Running in a Linux container without a GUI | Aspose.HTML is fully headless; no additional dependencies are required. | +| You must disable antialiasing for a pixel‑perfect UI test | Set `UseAntialiasing = false;` – the edges will be crisp but may look jagged. | + +### Pro tip + +When generating a batch of images, reuse a single `HTMLDocument` instance and only modify its `Content` property between renders. This reduces the overhead of parsing the same HTML repeatedly and improves throughput. + +## Full source listing + +Below is the complete program that you can copy into a new console‑app project and run immediately. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to render html to an image with C# – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML to Image Tutorial – Render HTML to PNG in C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/og-image.png b/html/english/net/rendering-html-documents/how-to-enable-antialiasing-for-html-image-rendering-in-c/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..3f6fce28b45b2a667bf2745862fb60a228094f66 GIT binary patch literal 45701 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to improve text clarity in Aspose.HTML with hinting + +If you need to improve text clarity while rendering HTML with Aspose.HTML, this guide shows you a complete solution. By enabling hinting you get sharper glyphs, especially on non‑Windows platforms where default rendering can appear fuzzy. + +In this tutorial you will learn how to enable hinting, why it matters for text clarity, and how to integrate the setting into a typical Aspose.HTML workflow. No external documentation is required—everything you need is included in the steps below. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 or later (the code works with .NET Framework 4.7+ as well) +* A licensed copy of **Aspose.HTML for .NET** (the free trial works for testing) +* Basic familiarity with C# and Visual Studio or any IDE you prefer + +These requirements are minimal; the same approach works in console apps, ASP.NET Core services, or desktop applications. + +## Why enabling hinting improves text clarity + +Hinting is a process that adjusts the outline of each glyph to align it with the pixel grid of the display device. Without hinting, especially on low‑resolution or high‑DPI screens, characters can look blurry or uneven. Enabling hinting tells the rendering engine to apply these adjustments automatically, resulting in: + +* Consistent stroke thickness across characters +* Better readability on Linux, macOS, and older Windows versions +* A professional look for PDFs, screenshots, or on‑screen previews + +Aspose.HTML exposes this behavior through the **TextOptions.UseHinting** property, which defaults to `false` for backward compatibility. + +## Step 1: Create a `TextOptions` instance + +The first step is to instantiate the **TextOptions** class. This object groups all text‑related rendering settings, making it easy to pass them to the rendering pipeline. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Creating the object does not alter rendering yet; it simply prepares a container for the options you will set later. + +## Step 2: Enable hinting to improve text clarity + +Set the **UseHinting** property to `true`. This single line activates the hinting algorithm for every piece of text rendered with the associated options. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +When `UseHinting` is `true`, Aspose.HTML automatically applies sub‑pixel adjustments to each glyph. The effect is most noticeable on fonts that contain fine details, such as serif typefaces or small‑size text. + +### Pro tip: Combine hinting with anti‑aliasing + +If you also want smoother edges, you can enable anti‑aliasing alongside hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Both settings together give the best visual fidelity across a wide range of devices. + +## Step 3: Attach `TextOptions` to the rendering process + +You need to pass the configured `TextOptions` to the **HtmlRenderer** (or any other rendering class you use). Below is a minimal example that loads an HTML string, applies the options, and writes the output to a PNG file. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Explanation of key lines** + +* `HTMLDocument` parses the HTML markup. +* `ImageDevice` defines the output dimensions (800 × 600 pixels in this case). +* `HtmlRenderer` performs the actual rendering; assigning `textOptions` to `renderer.Options.TextOptions` ensures that hinting is applied. +* `device.Save("output.png")` writes the final image to disk. + +Running this code produces `output.png` where the heading and paragraph appear crisp, even on a 96 dpi monitor. + +## Step 4: Verify the result + +Open the generated image in any viewer. Compare it with an image rendered **without** hinting (set `UseHinting = false`). You should notice: + +* Sharper edges on the letters “H”, “e”, “l”, “o” +* More uniform stroke weight across the paragraph +* Reduced ghosting on diagonal lines of characters + +If the difference is subtle on your screen, try zooming in or printing the image; the improvement becomes clearer at higher magnifications. + +## Common variations and edge cases + +### Rendering to PDF instead of PNG + +If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. The same `TextOptions` object works without modification: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### High‑DPI displays + +On displays with scaling factors (e.g., 150 % or 200 %), you might want to increase the device size proportionally to retain visual quality. Hinting still applies, and the result stays sharp. + +### Linux or macOS environments + +On Linux, the default rendering engine may fall back to a bitmap font renderer that ignores hinting unless you enable it explicitly. The `UseHinting = true` flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” look on those platforms. + +### Fonts without hinting tables + +Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML falls back to auto‑hinting, which still improves clarity compared to no hinting at all. + +## Step 5: Best practices for production code + +1. **Create a single `TextOptions` instance** and reuse it across rendering calls. This reduces object allocation overhead. +2. **Combine hinting with anti‑aliasing** (`UseAntiAliasing = true`) for the smoothest output. +3. **Test on the target platforms** (Windows, Linux, macOS) because visual differences can vary. +4. **Log the rendering configuration** in production logs; it helps troubleshoot any unexpected visual artifacts. +5. **Keep Aspose.HTML up to date**. Newer versions may introduce additional text‑rendering improvements. + +## Full working example + +Below is a self‑contained console application that demonstrates everything discussed. Copy the code into a new .NET console project, add the Aspose.HTML NuGet package, and run it. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Expected output** + +Running the program creates `hinted_output.png`. The heading “Hinting in action” and the paragraph text appear crisp, with uniform stroke widths and no fuzzy edges. If you comment out `UseHinting = true`, the same image will show slightly blurred characters, illustrating the benefit of the setting. + +## Conclusion + +You now know how to improve text clarity in Aspose.HTML by enabling hinting. The process involves creating a `TextOptions` object, setting `UseHinting` (and optionally `UseAntiAliasing`), and attaching the options to the renderer. This approach works for PNG, JPEG, PDF, and other output formats, and it delivers consistent visual quality across Windows, Linux, and macOS. + +Next, you might explore related topics such as **how to enable hinting** for custom fonts, **optimizing rendering performance**, or **using CSS to control text appearance** in Aspose.HTML. Experiment with different fonts and DPI settings to see how hinting adapts to each scenario. + +Happy coding, and enjoy sharper text in every Aspose.HTML rendering! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/og-image.png b/html/english/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..9d717131c3ea43ded66ef0a1b522891782f171da GIT binary patch literal 47486 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to render HTML in C# with Aspose.Html – full guide + +If you need to **how to render html** inside a .NET application, this tutorial shows you the complete workflow. You’ll see how to process HTML CSS, how to save HTML, convert HTML to stream, and load an HTML document in C# using the Aspose.Html library. + +Rendering HTML in a server‑side context often requires more than just loading a file—you must also handle linked resources such as images and style sheets. This guide walks you through every step, from loading the document to customizing resource handling and finally extracting the rendered output as a memory stream. + +By the end of the article you will be able to: + +* Load an HTML document from disk or a URL (`load html document c#`). +* Supply a custom `ResourceHandler` to **process html css** on the fly. +* Save the rendered HTML and **convert html to stream** for further processing. +* Persist the result using **how to save html** techniques that work in any .NET environment. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 SDK or later installed. +* Visual Studio 2022 (or any IDE that supports .NET 6). +* A NuGet reference to **Aspose.Html** (`dotnet add package Aspose.Html`). +* An `input.html` file placed in a known folder (the example uses `YOUR_DIRECTORY/input.html`). + +No additional third‑party libraries are required. + +## How to render HTML – step‑by‑step guide + +### Step 1: Load the HTML document in C# + +The first operation is to create an `HTMLDocument` instance that represents the source markup. This is the core of **how to render html** with Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Why this matters:* Loading the document parses the markup and builds an internal DOM, which the renderer later uses to apply CSS and resolve resources. + +### Step 2: Create a custom resource handler to **process html css** + +When the renderer encounters external resources (images, CSS files, fonts), it asks a `ResourceHandler` for a stream. By providing a custom handler you gain full control over how each resource is fetched, transformed, or stubbed. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Why this matters:* The handler is where you **process html css** logic—e.g., inline CSS, replace images with placeholders, or apply security filters. + +### Step 3: Configure `HtmlSaveOptions` to use the custom handler + +`HtmlSaveOptions` tells the renderer how to write the output. Assign the `ResourceHandler` you just created so that the renderer calls it for every external reference. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Setting `EmbedCss` and `EmbedImages` is useful when you later **convert html to stream** and need a self‑contained result. + +### Step 4: Save the document and **convert html to stream** + +Now you can render the document and capture the result in a `MemoryStream`. This is the core of **how to save html** when you want the output in memory rather than a physical file. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Why this matters:* The `MemoryStream` gives you a flexible, binary representation of the rendered HTML, which you can store, transmit, or further manipulate without touching the file system. + +## Handling common edge cases + +| Situation | Recommended approach | +|-----------|----------------------| +| **Missing CSS or image files** | In `MyResourceHandler.HandleResource`, check `File.Exists` before opening. Return an empty `MemoryStream` or a placeholder image if the file is absent. | +| **Large HTML files (>10 MB)** | Increase the default buffer size of the `MemoryStream` (`new MemoryStream(capacity)`) to avoid frequent reallocations. | +| **Relative URLs with `..` segments** | Use `new Uri(baseUri, info.Uri)` to resolve the full path before accessing the file system. | +| **Thread‑safety in ASP.NET** | Instantiate a new `HTMLDocument` and `MyResourceHandler` per request; avoid sharing instances between threads. | +| **Encoding issues** | Set `saveOpts.Encoding = Encoding.UTF8` to guarantee UTF‑8 output, especially when the source contains non‑ASCII characters. | + +## Pro tip: reuse the same handler for multiple documents + +If you process many HTML files in a batch, you can keep a single `MyResourceHandler` instance and just change its internal lookup table. This reduces object allocation overhead and speeds up the **process html css** phase. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Full, runnable example + +Below is a complete program you can paste into a console application. It demonstrates **how to render html**, **process html css**, **how to save html**, **convert html to stream**, and **load html document c#**—all in one flow. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Expected output** (truncated for brevity): + +``` +Requested: style.css (type: text/css) +Requested: image.png (type: image/png) + +=== Rendered HTML (first 500 chars + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/og-image.png b/html/english/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..03e5214c312527f81276e54f571f3df1e84f5c61 GIT binary patch literal 45390 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

=zoEH1VMH=zz5_1oGfxt1O%C%AlI;EjJg+ zib6;q(oj=ffgjr*b8!1oY$?^?CFc9V$;8bvlWv3Dn~5nlhT7T{o;A)}E5s*GOmolP zx1{^BFM)<7T|vF6rQRvvq-$v%sjCSep0ngR%f>u%!|jT9wd3Xr7ph15@kT;AoiQ&| zp*~{Nil?O~-JHj?z`=e_$1RHFi&a|o7lFn$kUn>Ut+rcm>m;3pl!K@req!>08r(6$ zzId`t(MN-ANiNVyTVF++@u*QMJ-@!Dt~}}Tni!6cGSMPl-(!jl#B997{1Dx58mB)f zbl9v!43*~@&%6imE%L!l{-d5%K2%re{DDmp5Pu`>ORS(lW!Ljk3}ykVCn@1^xD3w$P z)@OV@<&v$K_uID_pUX@fQ?7EUmbss{(5cNClB)}zn);lAS$X5JQCGUXYL33a{K0X* zLxD@oC}MVI#|+>TaT{JaNpgvgmbajKBvUcX_Llcp*zS$!jAm$&^4+Trt#J_65V0(1 zRJ=kC;Va+d%+EpymWL8%=;tSJf-ir4D9`w!=o87QK8tbnWa<mAkB5QCl9);O3GdAE*$62kF$Y`<#kJWcw>G@kpxG7h;q%$ zt$g&Q^Vb<@ZbYs2te#egp1m_CHpovuBy5a8KR$hhNfe>DF{~>u7fGEK%qPo*A){xJ z$6jIG8%2xD)W7gi6o_KE^}Y*^W|G`wIQ6~p&5N|2#E&04Tnb6fGYd(v2dRE~_;Rxb z7lch7{pz$k$v*@`hIc(n#v1;rDKc_iKeKIwSOihNNu12A6`Zh4#7^t>sP)#%tsJ() z8qq_uskq06hQ`KgD<52PFe~4Hd7H66K4+$6)bLmm;0(dxw6w*pI~2kGDTa?CY2#G} z?vge=sJeXP2`a@XXKXf1K9i>z3tyNTT3DoT5@Af6dVR&$)rG{xrKoK=tGnQHoHTC1 zVL~z@K5TIi+tAb&=9!i`fuqnPq2GBc$aI#!c0<+nfbH~P(v-P=$>F$iYdNqgm6VhY zKdGTW$wKD%4{k#jK}Vu)wUuu zamhIrRCWNT94|oy9N+7R zN(fhrO81?9)*i%Hm_0=V34qh3e5Pfwrd|kI*Fb&em)k~DUH{FVPu*gME%f>-bMZzC26!IxUp=Qc9WV9hze&qo&iP zw=_RxNU*n#ea!z3L;}@MBYg9y1#oqDW@yb1?nw-uJUP}4Vz@wB?<>Ud6|c&ZcaM>T zzk_xs{@sWCA07Pxhn)CGDRiUd+Ud-{jnm;bM#gsB$v?j1510Jkec~tnAd5e8y&dBm i|D9p~HJx~E9I(_8s5N8jJ@${@;(?s%y)5XH*Z&3_o^U4s literal 0 HcmV?d00001 diff --git a/html/english/net/working-with-html-documents/_index.md b/html/english/net/working-with-html-documents/_index.md index 4ec3659ee..cdb5cbd9f 100644 --- a/html/english/net/working-with-html-documents/_index.md +++ b/html/english/net/working-with-html-documents/_index.md @@ -40,7 +40,9 @@ Now, let's take your skills to the next level. Editing HTML documents is a commo ### [How to Bold Heading with CSS & C# – Complete Step‑by‑Step Guide](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [How to Save HTML in C# – Custom Resource Handlers & ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [How to Save HTML with Aspose.Html – Complete C# Guide](./how-to-save-html-with-aspose-html-complete-c-guide/) +### [How to use HtmlSaveOptions in C# with Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) ### [how to zip html in C# – Complete Step‑by‑Step Guide](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [How to load HTML document from file with Aspose.HTML in C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..1031d6b48 --- /dev/null +++ b/html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: en +lastmod: 2026-09-10 +og_description: Load HTML document from file using Aspose.HTML in C#. This guide covers + rendering options, a custom resource handler, and complete code you can run today. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Load HTML document from file with Aspose.HTML – step‑by‑step C# guide +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: How to load HTML document from file with Aspose.HTML in C# +url: /net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to load HTML document from file with Aspose.HTML in C# + +If you need to **load HTML document from file** and control its rendering, this tutorial shows you a complete, ready‑to‑run solution. You’ll see how to configure image rendering, enable text hinting, and supply a custom resource handler that returns empty streams for external assets. By the end of the guide you can save the processed HTML into a memory stream or any other destination you prefer. + +The example uses Aspose.HTML for .NET, a library that simplifies HTML, CSS, and SVG processing without a browser engine. No external tools are required, and the code works with .NET 6 or later. Make sure you have the Aspose.HTML NuGet package installed before you begin. + +## Prerequisites + +- .NET 6 SDK (or any .NET version supported by Aspose.HTML) +- Visual Studio 2022 or another C# IDE +- Aspose.HTML for .NET NuGet package (`Install-Package Aspose.HTML`) +- An HTML file named `input.html` placed in a folder you can reference from code + +## Step 1: Load the HTML document from a file + +The first operation is to create an `HTMLDocument` instance that reads the source file. This object represents the entire DOM tree and provides methods for further manipulation. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** Loading the file into an `HTMLDocument` gives you full access to the document’s structure, styles, and resources, which you can later render or transform. + +## Step 2: Set up image rendering options (Aspose.HTML rendering) + +If you plan to rasterize the page later, configuring image rendering improves visual quality. Antialiasing smooths edges and reduces jagged artifacts. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` is especially useful for vector graphics and text that will be rasterized to PNG or JPEG. + +## Step 3: Enable text hinting (text rendering options) + +Text hinting influences how glyphs are aligned to pixel grids, which can make small‑size fonts look sharper. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Why it’s important:** When you later export the HTML to an image, hinting reduces blurry characters and ensures consistent typography across platforms. + +## Step 4: Create a custom resource handler (custom resource handler) + +External resources such as fonts, images, or scripts may be referenced in the HTML. A `ResourceHandler` lets you control how those resources are retrieved. In this example the handler returns an empty `MemoryStream` for every request, effectively stripping out external assets. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**When to use:** This pattern is handy for security‑constrained environments, unit testing, or when you only need the markup without external files. + +## Step 5: Assemble HTML save options (HTML to image conversion) + +All the pieces—resource handler, rendering settings, and font style—are attached to an `HtmlSaveOptions` object. This object tells Aspose.HTML how to serialize the document. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explanation:** `WebFontStyle` can force a particular style (e.g., bold) for web fonts that might be missing. The `ImageRenderingOptions` and `TextOptions` we configured earlier are injected here, ensuring they affect any rasterization that occurs later. + +## Step 6: Save the document to a memory stream (complete solution) + +Finally, write the processed HTML into a `MemoryStream`. From here you can write the stream to a file, send it over a network, or pass it to another API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Result:** `output.html` now holds the same markup as `input.html` but with all external resources replaced by empty streams, and with the rendering preferences baked into the save options. + +## Full runnable example + +Putting all steps together gives you a self‑contained program you can copy, paste, and run. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Running this program produces `output.html` in the current directory. Open the file in a browser to confirm that the original markup loads, but any linked images, fonts, or scripts are absent (they were replaced by empty streams). + +## Common questions and edge cases + +| Question | Answer | +|----------|--------| +| **What if I need the original resources instead of empty streams?** | Replace `MemoryResourceHandler` with a handler that reads files from disk or downloads them over HTTP. | +| **Can I render the HTML directly to PNG or JPEG?** | Yes. Use `ImageRenderer` with the same `ImageRenderingOptions` and `TextOptions` you configured, then call `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Is `WebFontStyle.Bold` required?** | No. It’s shown as an example of overriding font style. Omit or change it to `WebFontStyle.Normal` if you don’t need a forced style. | +| **Does this work on .NET Core?** | Aspose.HTML supports .NET 5/6/7, so the same code runs on .NET Core projects. | +| **How do I handle large HTML files efficiently?** | Stream the file into `HTMLDocument` using a `FileStream` constructor to avoid loading the entire file into memory at once. | + +## Conclusion + +You now know how to **load HTML document from file** using Aspose.HTML, configure **image rendering options** and **text rendering options**, and apply a **custom resource handler** to control external assets. The complete example demonstrates saving the processed HTML into a memory stream, which you can persist or transmit as needed. + +Next, you might explore **HTML to image conversion** by swapping the `HtmlSaveOptions` for an `ImageRenderer`, or experiment with **Aspose.HTML rendering** features such as CSS media queries, SVG support, and PDF export. These extensions let you build rich document‑processing pipelines entirely in C#. + +Happy coding! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/og-image.png b/html/english/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..62d4b254921abdad91210f701935538b4b89ecd9 GIT binary patch literal 47142 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 literal 0 HcmV?d00001 diff --git a/html/english/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/english/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..15436dc10 --- /dev/null +++ b/html/english/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: en +lastmod: 2026-09-10 +og_description: How to use HtmlSaveOptions in C# to enable bold and italic web‑font + styles when saving HTML with Aspose.HTML. Follow the complete example and best‑practice + tips. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: How to use HtmlSaveOptions in C# with Aspose.HTML – step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: How to use HtmlSaveOptions in C# with Aspose.HTML +url: /net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to use HtmlSaveOptions in C# with Aspose.HTML + +If you need to control how Aspose.HTML saves an HTML document, **learning how to use HtmlSaveOptions is essential**. This tutorial shows you step‑by‑step how to use HtmlSaveOptions to enable bold and italic web‑font styles while saving a document. + +The Aspose HTML library provides a rich API for loading, manipulating, and exporting HTML content. By the end of this guide you will be able to: + +* Load an existing HTML file into an `HTMLDocument`. +* Configure `HtmlSaveOptions` to apply specific `WebFontStyle` flags. +* Save the modified document to a new location or a stream. +* Extend the solution for other font styles, custom CSS, and error handling. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 or later installed. +* A valid license for **Aspose.HTML for .NET** (the free trial works for this example). +* Visual Studio 2022 (or any C# IDE) to compile and run the code. + +No additional NuGet packages are required beyond `Aspose.HTML`. + +## Step 1: Set up the project and import namespaces + +Create a new **Console App** project and add the Aspose.HTML NuGet package: + +```bash +dotnet add package Aspose.HTML +``` + +Then, at the top of `Program.cs`, import the required namespaces: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +These namespaces expose the `HTMLDocument`, `HtmlSaveOptions`, and `WebFontStyle` types you will use throughout the tutorial. + +## Step 2: Load the source HTML document + +The first operation is to read the HTML you want to process. Replace `"YOUR_DIRECTORY/input.html"` with the actual path to your file. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` parses the markup, builds a DOM tree, and makes it ready for manipulation. If the file does not exist, an exception is thrown, so you may want to wrap this call in a try‑catch block for production code. + +## Step 3: Create and configure HtmlSaveOptions + +`HtmlSaveOptions` lets you fine‑tune the saving process. To enable bold and italic web‑font styles, combine the corresponding `WebFontStyle` flags using the bitwise OR operator (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Why configure WebFontStyle? + +When you export an HTML document, Aspose.HTML can embed web fonts that match the original styling. By setting `WebFontStyle`, you tell the exporter which font variants to include. This reduces the final file size when you only need specific styles and guarantees that the rendered output matches the source. + +#### Common variations + +| Desired style | Corresponding `WebFontStyle` flag | +|---------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +You can combine any combination that fits your scenario. + +## Step 4: Save the document with the configured options + +Now write the document to a new file. The `Save` method accepts the target path and the `HtmlSaveOptions` instance you prepared. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +If you need to write to a memory stream (e.g., for sending the file over HTTP), use the overload that accepts a `Stream` object: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Step 5: Verify the result + +Open `output.html` in a browser or inspect the file with a text editor. You should see that the ` + + +

+ +"; +``` + +Le HTML définit une forme vectorielle simple qui bénéficie de l’anticrénelage lorsqu’elle est rasterisée. + +## Étape 2 : Initialiser le moteur de rendu + +Aspose.HTML utilise un `HtmlRenderer` conjointement avec `ImageRenderingOptions`. C’est ici que vous **comment activer l'anticrénelage** pour le bitmap final. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Pourquoi `UseAntialiasing = true` est important** : le moteur de rendu dessine les formes vectorielles, le texte et les dégradés avec une précision sous‑pixel. Activer l’anticrénelage indique au rasteriseur de mélanger les pixels de bord avec leurs voisins, éliminant ainsi les lignes dentelées qui apparaissent lorsque `UseAntialiasing` reste à la valeur par défaut `false`. C’est le cœur du **rendu d’image de haute qualité**. + +## Étape 3 : Rendre le HTML en image + +Une fois les options configurées, appelez la méthode `RenderToImage`. Cette méthode renvoie un objet `Image` que vous pouvez enregistrer sur disque ou transmettre directement à une réponse. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Après exécution, `output.png` contient un cercle lisse et antialiasé. Ouvrez le fichier dans n’importe quel visualiseur d’images pour vérifier le résultat. + +![comment activer l'anticrénelage dans le rendu Aspose.HTML](/images/antialiasing-example.png){alt="comment activer l'anticrénelage dans le rendu Aspose.HTML"} + +## Étape 4 : Vérifier la sortie haute qualité (comment rendre une image HTML) + +Vous pouvez confirmer programmatique les dimensions et le DPI de l’image afin de vous assurer que le rendu répond à vos attentes. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Sortie typique de la console : + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Le DPI augmenté combiné à l’anticrénelage produit un résultat net même lorsque l’image est agrandie. Cela démontre **comment rendre une image HTML** avec une qualité professionnelle. + +## Variations courantes et cas limites + +| Situation | Ajustement recommandé | +|-----------|-----------------------| +| Rendu de pages très volumineuses (p. ex. applications web plein écran) | Augmentez `ImageRenderingOptions.Width` / `Height` ou définissez `Scale` pour contrôler la consommation mémoire. | +| Besoin d’un arrière‑plan transparent | Définissez `imageOptions.BackgroundColor = Color.Transparent;` | +| Cibler JPEG pour une taille de fichier plus petite | Changez `ImageFormat` en `ImageFormat.Jpeg` et ajustez `Quality` (0‑100). | +| Exécution dans un conteneur Linux sans interface graphique | Aspose.HTML fonctionne entièrement en mode headless ; aucune dépendance supplémentaire n’est requise. | +| Vous devez désactiver l'anticrénelage pour un test UI pixel‑perfect | Définissez `UseAntialiasing = false;` – les bords seront nets mais pourront paraître dentelés. | + +### Astuce pro + +Lorsque vous générez un lot d’images, réutilisez une seule instance `HTMLDocument` et ne modifiez que sa propriété `Content` entre les rendus. Cela réduit le coût d’analyse du même HTML à plusieurs reprises et améliore le débit. + +## Liste complète du code source + +Voici le programme complet que vous pouvez copier dans un nouveau projet console et exécuter immédiatement. + + + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques démontrées dans ce guide. Chaque ressource inclut des exemples de code complets avec des explications pas à pas pour vous aider à maîtriser d’autres fonctionnalités de l’API et explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment rendre le HTML en image avec C# – Guide complet](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutoriel HTML vers Image – Rendre le HTML en PNG en C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Comment utiliser Aspose pour rendre le HTML en PNG – Guide étape par étape](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/french/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..e6b3175a7 --- /dev/null +++ b/html/french/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: Améliorez la clarté du texte lors du rendu HTML avec Aspose.HTML en activant + le hinting. Ce guide montre comment activer le hinting et pourquoi c’est important. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: fr +lastmod: 2026-09-10 +og_description: Améliorez la clarté du texte dans Aspose.HTML en apprenant comment + activer le hinting. Suivez le guide étape par étape pour obtenir un texte plus net + sur toutes les plateformes. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Améliorer la clarté du texte dans Aspose.HTML – activer le hinting pour + un rendu plus net +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Comment améliorer la clarté du texte dans Aspose.HTML avec le hinting +url: /fr/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment améliorer la clarté du texte dans Aspose.HTML avec le hinting + +Si vous devez améliorer la clarté du texte lors du rendu HTML avec Aspose.HTML, ce guide vous présente une solution complète. En activant le hinting, vous obtenez des glyphes plus nets, en particulier sur les plateformes non‑Windows où le rendu par défaut peut apparaître flou. + +Dans ce tutoriel, vous apprendrez comment activer le hinting, pourquoi il est important pour la clarté du texte, et comment intégrer ce paramètre dans un flux de travail typique d’Aspose.HTML. Aucune documentation externe n’est requise — tout ce dont vous avez besoin est inclus dans les étapes ci‑dessous. + +## Prérequis + +* .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework 4.7+) +* Une copie sous licence de **Aspose.HTML for .NET** (l’essai gratuit fonctionne pour les tests) +* Une connaissance de base de C# et de Visual Studio ou de tout IDE de votre choix + +Ces exigences sont minimales ; la même approche fonctionne dans les applications console, les services ASP.NET Core ou les applications de bureau. + +## Pourquoi l’activation du hinting améliore la clarté du texte + +Le hinting est un processus qui ajuste le contour de chaque glyphe pour l’aligner avec la grille de pixels du dispositif d’affichage. Sans hinting, en particulier sur des écrans à basse résolution ou à haute densité DPI, les caractères peuvent paraître flous ou irréguliers. Activer le hinting indique au moteur de rendu d’appliquer ces ajustements automatiquement, ce qui donne : + +* Une épaisseur de trait constante entre les caractères +* Une meilleure lisibilité sur Linux, macOS et les versions plus anciennes de Windows +* Un aspect professionnel pour les PDF, captures d’écran ou aperçus à l’écran + +Aspose.HTML expose ce comportement via la propriété **TextOptions.UseHinting**, qui est à `false` par défaut pour assurer la compatibilité ascendante. + +## Étape 1 : Créer une instance de `TextOptions` + +La première étape consiste à instancier la classe **TextOptions**. Cet objet regroupe tous les paramètres de rendu liés au texte, ce qui facilite leur passage au pipeline de rendu. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +La création de l’objet ne modifie pas encore le rendu ; elle prépare simplement un conteneur pour les options que vous définirez ultérieurement. + +## Étape 2 : Activer le hinting pour améliorer la clarté du texte + +Définissez la propriété **UseHinting** sur `true`. Cette ligne unique active l’algorithme de hinting pour chaque morceau de texte rendu avec les options associées. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Lorsque `UseHinting` est `true`, Aspose.HTML applique automatiquement des ajustements sous‑pixel à chaque glyphe. L’effet est le plus visible sur les polices contenant des détails fins, comme les polices à empattement ou le texte de petite taille. + +### Astuce : Combiner le hinting avec l’anti‑aliasing + +Si vous souhaitez également des bords plus lisses, vous pouvez activer l’anti‑aliasing en même temps que le hinting : + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Ces deux paramètres combinés offrent la meilleure fidélité visuelle sur une large gamme d’appareils. + +## Étape 3 : Attacher `TextOptions` au processus de rendu + +Vous devez transmettre les `TextOptions` configurés au **HtmlRenderer** (ou à toute autre classe de rendu que vous utilisez). Voici un exemple minimal qui charge une chaîne HTML, applique les options et écrit le résultat dans un fichier PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Explication des lignes clés** + +* `HTMLDocument` analyse le balisage HTML. +* `ImageDevice` définit les dimensions de sortie (800 × 600 pixels dans ce cas). +* `HtmlRenderer` effectue le rendu réel ; affecter `textOptions` à `renderer.Options.TextOptions` garantit que le hinting est appliqué. +* `device.Save("output.png")` écrit l’image finale sur le disque. + +L’exécution de ce code produit `output.png` où le titre et le paragraphe apparaissent nets, même sur un moniteur à 96 dpi. + +## Étape 4 : Vérifier le résultat + +Ouvrez l’image générée dans n’importe quel visualiseur. Comparez‑la avec une image rendue **sans** hinting (définissez `UseHinting = false`). Vous devriez remarquer : + +* Des bords plus nets sur les lettres « H », « e », « l », « o » +* Un poids de trait plus uniforme dans tout le paragraphe +* Une réduction des effets de flou sur les lignes diagonales des caractères + +Si la différence est subtile sur votre écran, essayez de zoomer ou d’imprimer l’image ; l’amélioration devient plus évidente à des grossissements plus élevés. + +## Variantes courantes et cas limites + +### Rendu en PDF au lieu de PNG + +Si votre cible est un PDF, remplacez le `ImageDevice` par un `PdfDevice`. Le même objet `TextOptions` fonctionne sans modification : + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Écrans haute‑DPI + +Sur des écrans avec des facteurs de mise à l’échelle (par ex., 150 % ou 200 %), vous pouvez augmenter la taille du dispositif proportionnellement pour conserver la qualité visuelle. Le hinting s’applique toujours, et le résultat reste net. + +### Environnements Linux ou macOS + +Sur Linux, le moteur de rendu par défaut peut revenir à un rendu de police bitmap qui ignore le hinting à moins que vous ne l’activiez explicitement. Le drapeau `UseHinting = true` force le moteur à appliquer le hinting TrueType, éliminant l’aspect typiquement « flou » sur ces plateformes. + +### Polices sans tables de hinting + +Certaines polices OpenType modernes omettent les données de hinting. Dans ces cas, Aspose.HTML revient à l’auto‑hinting, ce qui améliore tout de même la clarté par rapport à l’absence totale de hinting. + +## Étape 5 : Bonnes pratiques pour le code de production + +1. **Créer une seule instance de `TextOptions`** et la réutiliser pour tous les appels de rendu. Cela réduit la surcharge d’allocation d’objets. +2. **Combiner le hinting avec l’anti‑aliasing** (`UseAntiAliasing = true`) pour le rendu le plus fluide. +3. **Tester sur les plateformes cibles** (Windows, Linux, macOS) car les différences visuelles peuvent varier. +4. **Consigner la configuration du rendu** dans les journaux de production ; cela aide à dépanner d’éventuels artefacts visuels inattendus. +5. **Maintenir Aspose.HTML à jour**. Les versions plus récentes peuvent introduire des améliorations supplémentaires du rendu du texte. + +## Exemple complet fonctionnel + +Voici une application console autonome qui démontre tout ce qui a été abordé. Copiez le code dans un nouveau projet console .NET, ajoutez le package NuGet Aspose.HTML, puis exécutez‑le. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Résultat attendu** + +L’exécution du programme crée `hinted_output.png`. Le titre « Hinting in action » et le texte du paragraphe apparaissent nets, avec des largeurs de trait uniformes et sans bords flous. Si vous commentez `UseHinting = true`, la même image affichera des caractères légèrement flous, illustrant le bénéfice de ce paramètre. + +## Conclusion + +Vous savez maintenant comment améliorer la clarté du texte dans Aspose.HTML en activant le hinting. Le processus consiste à créer un objet `TextOptions`, à définir `UseHinting` (et éventuellement `UseAntiAliasing`), puis à attacher les options au moteur de rendu. Cette approche fonctionne pour PNG, JPEG, PDF et d’autres formats de sortie, et elle offre une qualité visuelle constante sous Windows, Linux et macOS. + +Ensuite, vous pourriez explorer des sujets connexes tels que **comment activer le hinting** pour des polices personnalisées, **optimiser les performances de rendu**, ou **utiliser le CSS pour contrôler l’apparence du texte** dans Aspose.HTML. Expérimentez avec différentes polices et réglages DPI pour voir comment le hinting s’adapte à chaque scénario. + +Bonne programmation, et profitez d’un texte plus net dans chaque rendu Aspose.HTML ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques présentées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités supplémentaires de l’API et à explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment rendre du HTML en PNG avec Aspose – Guide complet](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Comment utiliser Aspose pour rendre du HTML en PNG – Guide étape par étape](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Créer un document HTML avec du texte stylisé et l’exporter en PDF – Guide complet](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/french/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..715bc1519 --- /dev/null +++ b/html/french/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Comment rendre le HTML en C# avec Aspose.Html. Apprenez à traiter le + HTML et le CSS, enregistrer le HTML, convertir le HTML en flux et charger le document + HTML dans .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: fr +lastmod: 2026-09-10 +og_description: Comment rendre le HTML en C# avec Aspose.Html. Ce guide vous montre + comment traiter le CSS du HTML, enregistrer le HTML, convertir le HTML en flux et + charger efficacement un document HTML. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Rendre du HTML en C# avec Aspose.Html – tutoriel étape par étape +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Comment rendre le HTML en C# avec Aspose.Html – guide complet +url: /fr/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment rendre du HTML en C# avec Aspose.Html – guide complet + +Si vous avez besoin de **how to render html** dans une application .NET, ce tutoriel vous montre le flux de travail complet. Vous verrez comment **process html css**, comment enregistrer du HTML, convertir du HTML en flux, et charger un document HTML en C# en utilisant la bibliothèque Aspose.Html. + +Rendre du HTML dans un contexte côté serveur nécessite souvent plus que le simple chargement d’un fichier — vous devez également gérer les ressources liées telles que les images et les feuilles de style. Ce guide vous accompagne à chaque étape, du chargement du document à la personnalisation de la gestion des ressources, jusqu’à l’extraction du rendu sous forme de flux mémoire. + +À la fin de l’article, vous serez capable de : + +* Charger un document HTML depuis le disque ou une URL (`load html document c#`). +* Fournir un `ResourceHandler` personnalisé pour **process html css** à la volée. +* Enregistrer le HTML rendu et **convert html to stream** pour un traitement ultérieur. +* Conserver le résultat en utilisant les techniques **how to save html** qui fonctionnent dans n’importe quel environnement .NET. + +## Prérequis + +Avant de commencer, assurez-vous d’avoir : + +* .NET 6.0 SDK ou une version ultérieure installé. +* Visual Studio 2022 (ou tout IDE supportant .NET 6). +* Une référence NuGet à **Aspose.Html** (`dotnet add package Aspose.Html`). +* Un fichier `input.html` placé dans un dossier connu (l’exemple utilise `YOUR_DIRECTORY/input.html`). + +Aucune bibliothèque tierce supplémentaire n’est requise. + +## Comment rendre du HTML – guide étape par étape + +### Étape 1 : Charger le document HTML en C# + +La première opération consiste à créer une instance `HTMLDocument` qui représente le balisage source. C’est le cœur de **how to render html** avec Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Pourquoi c’est important :* Le chargement du document analyse le balisage et construit un DOM interne, que le moteur de rendu utilise ensuite pour appliquer le CSS et résoudre les ressources. + +### Étape 2 : Créer un gestionnaire de ressources personnalisé pour **process html css** + +Lorsque le moteur de rendu rencontre des ressources externes (images, fichiers CSS, polices), il sollicite un `ResourceHandler` pour obtenir un flux. En fournissant un gestionnaire personnalisé, vous obtenez un contrôle total sur la façon dont chaque ressource est récupérée, transformée ou simulée. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Pourquoi c’est important :* Le gestionnaire est l’endroit où vous implémentez la logique **process html css** — par exemple, mettre le CSS en ligne, remplacer les images par des espaces réservés, ou appliquer des filtres de sécurité. + +### Étape 3 : Configurer `HtmlSaveOptions` pour utiliser le gestionnaire personnalisé + +`HtmlSaveOptions` indique au moteur de rendu comment écrire la sortie. Assignez le `ResourceHandler` que vous venez de créer afin que le rendu l’appelle pour chaque référence externe. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Configurer `EmbedCss` et `EmbedImages` est utile lorsque vous devez ensuite **convert html to stream** et obtenir un résultat autonome. + +### Étape 4 : Enregistrer le document et **convert html to stream** + +Vous pouvez maintenant rendre le document et capturer le résultat dans un `MemoryStream`. C’est le cœur de **how to save html** lorsque vous souhaitez la sortie en mémoire plutôt que dans un fichier physique. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Pourquoi c’est important :* Le `MemoryStream` vous fournit une représentation binaire flexible du HTML rendu, que vous pouvez stocker, transmettre ou manipuler davantage sans toucher au système de fichiers. + +## Gestion des cas limites courants + +| Situation | Approche recommandée | +|-----------|----------------------| +| **Fichiers CSS ou images manquants** | Dans `MyResourceHandler.HandleResource`, vérifiez `File.Exists` avant d’ouvrir. Retournez un `MemoryStream` vide ou une image de substitution si le fichier est absent. | +| **Fichiers HTML volumineux (>10 Mo)** | Augmentez la taille du tampon par défaut du `MemoryStream` (`new MemoryStream(capacity)`) pour éviter des réallocations fréquentes. | +| **URL relatives avec des segments `..`** | Utilisez `new Uri(baseUri, info.Uri)` pour résoudre le chemin complet avant d’accéder au système de fichiers. | +| **Sécurité des threads dans ASP.NET** | Instanciez un nouveau `HTMLDocument` et `MyResourceHandler` par requête ; évitez de partager des instances entre les threads. | +| **Problèmes d’encodage** | Définissez `saveOpts.Encoding = Encoding.UTF8` pour garantir une sortie UTF‑8, surtout lorsque la source contient des caractères non‑ASCII. | + +## Astuce pro : réutiliser le même gestionnaire pour plusieurs documents + +Si vous traitez de nombreux fichiers HTML en lot, vous pouvez conserver une seule instance `MyResourceHandler` et simplement modifier sa table de recherche interne. Cela réduit la surcharge d’allocation d’objets et accélère la phase **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Exemple complet et exécutable + +Voici un programme complet que vous pouvez coller dans une application console. Il démontre **how to render html**, **process html css**, **how to save html**, **convert html to stream**, et **load html document c#** — le tout en un seul flux. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Sortie attendue** (troncature pour la brièveté) : + + + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités API supplémentaires et à explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment enregistrer du HTML avec Aspose.Html – Guide complet C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Comment utiliser Aspose pour rendre du HTML en PNG en C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Comment utiliser Aspose pour rendre du HTML en PNG – Guide étape par étape](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/net/working-with-html-documents/_index.md b/html/french/net/working-with-html-documents/_index.md index 6a4e9a3df..7d52c5192 100644 --- a/html/french/net/working-with-html-documents/_index.md +++ b/html/french/net/working-with-html-documents/_index.md @@ -41,6 +41,7 @@ Maintenant, passons à un niveau supérieur de compétences. L'édition de docum Apprenez à enregistrer du HTML en C# en utilisant un gestionnaire de ressources personnalisé pour contrôler le flux de sortie et les ressources liées. ### [Comment mettre en gras un titre avec CSS & C# – Guide complet étape par étape](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + ### [Comment enregistrer du HTML en C# – Gestionnaires de ressources personnalisés et ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) Apprenez à enregistrer du HTML en C# en utilisant des gestionnaires de ressources personnalisés et à compresser le résultat dans un fichier ZIP. @@ -53,6 +54,10 @@ Apprenez à enregistrer du HTML en C# avec Aspose.Html grâce à ce guide comple Apprenez à compresser des fichiers HTML en C# en suivant un guide complet étape par étape. +### [Comment utiliser HtmlSaveOptions en C# avec Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [Comment charger un document HTML depuis un fichier avec Aspose.HTML en C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/french/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/french/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..97b6665eb --- /dev/null +++ b/html/french/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Apprenez à charger un document HTML à partir d’un fichier en utilisant + Aspose.HTML en C#. Inclut les options de rendu d’image, les options de rendu de + texte et un gestionnaire de ressources personnalisé. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: fr +lastmod: 2026-09-10 +og_description: Charger un document HTML à partir d'un fichier en utilisant Aspose.HTML + en C#. Ce guide couvre les options de rendu, un gestionnaire de ressources personnalisé + et le code complet que vous pouvez exécuter dès aujourd'hui. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Charger un document HTML à partir d’un fichier avec Aspose.HTML – guide + C# étape par étape +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Comment charger un document HTML depuis un fichier avec Aspose.HTML en C# +url: /fr/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment charger un document HTML à partir d'un fichier avec Aspose.HTML en C# + +Si vous devez **charger un document HTML à partir d'un fichier** et contrôler son rendu, ce tutoriel vous présente une solution complète, prête à l'emploi. Vous verrez comment configurer le rendu des images, activer le hinting du texte et fournir un gestionnaire de ressources personnalisé qui renvoie des flux vides pour les ressources externes. À la fin du guide, vous pourrez enregistrer le HTML traité dans un flux mémoire ou toute autre destination de votre choix. + +L'exemple utilise Aspose.HTML pour .NET, une bibliothèque qui simplifie le traitement du HTML, du CSS et du SVG sans moteur de navigateur. Aucun outil externe n'est requis, et le code fonctionne avec .NET 6 ou une version ultérieure. Assurez-vous d'avoir le package NuGet Aspose.HTML installé avant de commencer. + +## Pré-requis + +- .NET 6 SDK (ou toute version .NET prise en charge par Aspose.HTML) +- Visual Studio 2022 ou un autre IDE C# +- Package NuGet Aspose.HTML pour .NET (`Install-Package Aspose.HTML`) +- Un fichier HTML nommé `input.html` placé dans un dossier que vous pouvez référencer depuis le code + +## Étape 1 : Charger le document HTML à partir d'un fichier + +La première opération consiste à créer une instance `HTMLDocument` qui lit le fichier source. Cet objet représente l'arbre DOM complet et fournit des méthodes pour une manipulation ultérieure. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Pourquoi c'est important :** Charger le fichier dans un `HTMLDocument` vous donne un accès complet à la structure, aux styles et aux ressources du document, que vous pourrez ensuite rendre ou transformer. + +## Étape 2 : Configurer les options de rendu d'image (rendu Aspose.HTML) + +Si vous prévoyez de rasteriser la page ultérieurement, la configuration du rendu d'image améliore la qualité visuelle. L'anticrénelage lisse les bords et réduit les artefacts en escalier. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Astuce :** `UseAntialiasing` est particulièrement utile pour les graphiques vectoriels et le texte qui seront rasterisés en PNG ou JPEG. + +## Étape 3 : Activer le hinting du texte (options de rendu du texte) + +Le hinting du texte influence la façon dont les glyphes sont alignés sur les grilles de pixels, ce qui peut rendre les polices de petite taille plus nettes. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Pourquoi c'est important :** Lorsque vous exportez plus tard le HTML en image, le hinting réduit les caractères flous et assure une typographie cohérente sur toutes les plateformes. + +## Étape 4 : Créer un gestionnaire de ressources personnalisé (custom resource handler) + +Des ressources externes telles que des polices, des images ou des scripts peuvent être référencées dans le HTML. Un `ResourceHandler` vous permet de contrôler la façon dont ces ressources sont récupérées. Dans cet exemple, le gestionnaire renvoie un `MemoryStream` vide pour chaque requête, supprimant ainsi les ressources externes. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Quand l'utiliser :** Ce modèle est pratique pour les environnements à contraintes de sécurité, les tests unitaires, ou lorsque vous avez uniquement besoin du balisage sans fichiers externes. + +## Étape 5 : Assembler les options d'enregistrement HTML (conversion HTML vers image) + +Tous les éléments—gestionnaire de ressources, paramètres de rendu et style de police—sont attachés à un objet `HtmlSaveOptions`. Cet objet indique à Aspose.HTML comment sérialiser le document. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explication :** `WebFontStyle` peut forcer un style particulier (par ex., gras) pour les polices web qui pourraient manquer. Les `ImageRenderingOptions` et `TextOptions` que nous avons configurés précédemment sont injectés ici, garantissant qu'ils affectent toute rasterisation ultérieure. + +## Étape 6 : Enregistrer le document dans un flux mémoire (solution complète) + +Enfin, écrivez le HTML traité dans un `MemoryStream`. À partir de là, vous pouvez écrire le flux dans un fichier, l'envoyer sur un réseau ou le transmettre à une autre API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Résultat :** `output.html` contient désormais le même balisage que `input.html` mais avec toutes les ressources externes remplacées par des flux vides, et avec les préférences de rendu intégrées dans les options d'enregistrement. + +## Exemple complet exécutable + +Assembler toutes les étapes vous fournit un programme autonome que vous pouvez copier, coller et exécuter. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +L'exécution de ce programme génère `output.html` dans le répertoire actuel. Ouvrez le fichier dans un navigateur pour confirmer que le balisage original se charge, mais que toutes les images, polices ou scripts liés sont absents (ils ont été remplacés par des flux vides). + +## Questions fréquentes et cas particuliers + +| Question | Réponse | +|----------|--------| +| **Et si j'ai besoin des ressources originales au lieu de flux vides ?** | Remplacez `MemoryResourceHandler` par un gestionnaire qui lit les fichiers depuis le disque ou les télécharge via HTTP. | +| **Puis-je rendre le HTML directement en PNG ou JPEG ?** | Oui. Utilisez `ImageRenderer` avec les mêmes `ImageRenderingOptions` et `TextOptions` que vous avez configurés, puis appelez `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **`WebFontStyle.Bold` est‑il requis ?** | Non. Il est présenté comme un exemple de surcharge du style de police. Omettez‑le ou changez‑le en `WebFontStyle.Normal` si vous n’avez pas besoin d’un style imposé. | +| **Cela fonctionne‑t‑il sur .NET Core ?** | Aspose.HTML prend en charge .NET 5/6/7, donc le même code fonctionne sur les projets .NET Core. | +| **Comment gérer efficacement de gros fichiers HTML ?** | Diffusez le fichier dans `HTMLDocument` en utilisant le constructeur `FileStream` afin d'éviter de charger l'intégralité du fichier en mémoire d'un coup. | + +## Conclusion + +Vous savez maintenant comment **charger un document HTML à partir d'un fichier** en utilisant Aspose.HTML, configurer les **options de rendu d'image** et les **options de rendu du texte**, et appliquer un **gestionnaire de ressources personnalisé** pour contrôler les actifs externes. L'exemple complet montre comment enregistrer le HTML traité dans un flux mémoire, que vous pouvez persister ou transmettre selon vos besoins. + +Ensuite, vous pourriez explorer la **conversion HTML vers image** en remplaçant le `HtmlSaveOptions` par un `ImageRenderer`, ou expérimenter les fonctionnalités de **rendu Aspose.HTML** telles que les media queries CSS, la prise en charge du SVG et l'exportation PDF. Ces extensions vous permettent de créer des pipelines de traitement de documents riches entièrement en C#. + +Bonne programmation ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités supplémentaires de l'API et à explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Charger du HTML à l'aide d'un serveur distant en .NET avec Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Charger du HTML à l'aide d'une URL en .NET avec Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Comment enregistrer du HTML en C# – Guide complet avec un gestionnaire de ressources personnalisé](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/french/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..2a43283d9 --- /dev/null +++ b/html/french/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,314 @@ +--- +category: general +date: 2026-09-10 +description: Apprenez à utiliser HtmlSaveOptions en C# pour contrôler les styles de + polices Web et enregistrer des fichiers HTML avec Aspose.HTML. Exemple complet de + code et conseils pratiques inclus. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: fr +lastmod: 2026-09-10 +og_description: Comment utiliser HtmlSaveOptions en C# pour activer les styles de + police web gras et italique lors de l’enregistrement HTML avec Aspose.HTML. Suivez + l’exemple complet et les conseils de bonnes pratiques. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Comment utiliser HtmlSaveOptions en C# avec Aspose.HTML – guide étape par + étape +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Comment utiliser HtmlSaveOptions en C# avec Aspose.HTML +url: /fr/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment utiliser HtmlSaveOptions en C# avec Aspose.HTML + +Si vous devez contrôler la façon dont Aspose.HTML enregistre un document HTML, **apprendre à utiliser HtmlSaveOptions est essentiel**. Ce tutoriel vous montre étape par étape comment utiliser HtmlSaveOptions pour activer les styles de police web en gras et en italique lors de l’enregistrement d’un document. + +La bibliothèque Aspose HTML fournit une API riche pour charger, manipuler et exporter du contenu HTML. À la fin de ce guide, vous serez capable de : + +* Charger un fichier HTML existant dans un `HTMLDocument`. +* Configurer `HtmlSaveOptions` pour appliquer des indicateurs `WebFontStyle` spécifiques. +* Enregistrer le document modifié à un nouvel emplacement ou dans un flux. +* Étendre la solution à d’autres styles de police, CSS personnalisé et gestion des erreurs. + +## Prérequis + +Avant de commencer, assurez-vous d’avoir : + +* .NET 6.0 ou version ultérieure installé. +* Une licence valide pour **Aspose.HTML for .NET** (l’essai gratuit fonctionne pour cet exemple). +* Visual Studio 2022 (ou tout IDE C#) pour compiler et exécuter le code. + +Aucun package NuGet supplémentaire n’est requis au-delà de `Aspose.HTML`. + +## Étape 1 : Configurer le projet et importer les espaces de noms + +Créez un nouveau projet **Console App** et ajoutez le package NuGet Aspose.HTML : + +```bash +dotnet add package Aspose.HTML +``` + +Ensuite, en haut de `Program.cs`, importez les espaces de noms requis : + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Ces espaces de noms exposent les types `HTMLDocument`, `HtmlSaveOptions` et `WebFontStyle` que vous utiliserez tout au long du tutoriel. + +## Étape 2 : Charger le document HTML source + +La première opération consiste à lire le HTML que vous souhaitez traiter. Remplacez `"YOUR_DIRECTORY/input.html"` par le chemin réel de votre fichier. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analyse le balisage, construit un arbre DOM et le rend prêt à être manipulé. Si le fichier n’existe pas, une exception est levée, il peut donc être judicieux d’envelopper cet appel dans un bloc try‑catch pour le code de production. + +## Étape 3 : Créer et configurer HtmlSaveOptions + +`HtmlSaveOptions` vous permet d’ajuster finement le processus d’enregistrement. Pour activer les styles de police web en gras et en italique, combinez les indicateurs `WebFontStyle` correspondants à l’aide de l’opérateur OU binaire (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Pourquoi configurer WebFontStyle ? + +Lorsque vous exportez un document HTML, Aspose.HTML peut incorporer des polices web correspondant au style original. En définissant `WebFontStyle`, vous indiquez à l’exportateur quelles variantes de police inclure. Cela réduit la taille finale du fichier lorsque vous n’avez besoin que de styles spécifiques et garantit que le rendu correspond à la source. + +#### Variantes courantes + +| Style souhaité | Indicateur `WebFontStyle` correspondant | +|---------------|-----------------------------------| +| Normal (régulier) | `WebFontStyle.Regular` | +| Gras | `WebFontStyle.Bold` | +| Italique | `WebFontStyle.Italic` | +| Gras + Italique | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Toutes les variantes | `WebFontStyle.All` | + +Vous pouvez combiner n’importe quelle combinaison qui correspond à votre scénario. + +## Étape 4 : Enregistrer le document avec les options configurées + +Enregistrez maintenant le document dans un nouveau fichier. La méthode `Save` accepte le chemin cible et l’instance `HtmlSaveOptions` que vous avez préparée. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Si vous devez écrire dans un flux mémoire (par ex., pour envoyer le fichier via HTTP), utilisez la surcharge qui accepte un objet `Stream` : + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Étape 5 : Vérifier le résultat + +Ouvrez `output.html` dans un navigateur ou inspectez le fichier avec un éditeur de texte. Vous devriez voir que le bloc ` + + +
+ +"; +``` + +Das HTML definiert eine einfache Vektorform, die beim Rasterisieren von Antialiasing profitiert. + +## Schritt 2: Initialisieren der Rendering‑Engine + +Aspose.HTML verwendet einen `HtmlRenderer` zusammen mit `ImageRenderingOptions`. Hier aktivieren Sie **wie man Antialiasing aktiviert** für das endgültige Bitmap. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Warum `UseAntialiasing = true` wichtig ist**: Die Rendering‑Engine zeichnet Vektorformen, Text und Verläufe mit Sub‑Pixel‑Präzision. Das Aktivieren von Antialiasing weist den Rasterizer an, Randpixel mit ihren Nachbarn zu mischen, wodurch gezackte Linien, die bei `UseAntialiasing = false` entstehen, eliminiert werden. Das ist das Kernstück von **hochwertiger Bilddarstellung**. + +## Schritt 3: Rendern des HTML zu einem Bild + +Nachdem die Optionen konfiguriert sind, rufen Sie die Methode `RenderToImage` auf. Die Methode gibt ein `Image`‑Objekt zurück, das Sie auf die Festplatte speichern oder direkt an eine Antwort streamen können. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Nach der Ausführung enthält `output.png` einen glatten, antialiased Kreis. Öffnen Sie die Datei in einem beliebigen Bildbetrachter, um das Ergebnis zu überprüfen. + +![wie man Antialiasing in Aspose.HTML Rendering aktiviert](/images/antialiasing-example.png){alt="wie man Antialiasing in Aspose.HTML Rendering aktiviert"} + +## Schritt 4: Überprüfen der hochwertigen Ausgabe (wie man HTML‑Bild rendert) + +Sie können programmgesteuert die Bildabmessungen und DPI bestätigen, um sicherzustellen, dass das Rendering Ihren Erwartungen entspricht. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typische Konsolenausgabe: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Der erhöhte DPI‑Wert in Kombination mit Antialiasing liefert ein sauberes Ergebnis, selbst wenn das Bild skaliert wird. Dies demonstriert **wie man HTML‑Bild rendert** mit professioneller Qualität. + +## Häufige Variationen und Randfälle + +| Situation | Empfohlene Anpassung | +|-----------|----------------------| +| Rendern sehr großer Seiten (z. B. Vollbild‑Web‑Apps) | Erhöhen Sie `ImageRenderingOptions.Width` / `Height` oder setzen Sie `Scale`, um den Speicherverbrauch zu steuern. | +| Transparenter Hintergrund benötigt | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| JPEG für kleinere Dateigröße verwenden | Ändern Sie `ImageFormat` zu `ImageFormat.Jpeg` und passen Sie `Quality` (0‑100) an. | +| Ausführen in einem Linux‑Container ohne GUI | Aspose.HTML ist vollständig headless; es sind keine zusätzlichen Abhängigkeiten erforderlich. | +| Sie müssen Antialiasing für einen pixelgenauen UI‑Test deaktivieren | Setzen Sie `UseAntialiasing = false;` – die Kanten sind scharf, können aber gezackt aussehen. | + +### Profi‑Tipp + +Wenn Sie eine Stapelverarbeitung von Bildern durchführen, verwenden Sie eine einzelne `HTMLDocument`‑Instanz und ändern Sie nur deren `Content`‑Eigenschaft zwischen den Renderings. Dadurch wird der Aufwand für das wiederholte Parsen desselben HTML reduziert und der Durchsatz erhöht. + +## Vollständige Quellcode‑Auflistung + +Unten finden Sie das komplette Programm, das Sie in ein neues Konsolen‑App‑Projekt kopieren und sofort ausführen können. + + + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man HTML zu einem Bild mit C# rendert – Komplett‑Anleitung](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML‑zu‑Bild‑Tutorial – HTML zu PNG in C# rendern](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Wie man Aspose verwendet, um HTML zu PNG zu rendern – Schritt‑für‑Schritt‑Anleitung](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/german/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..e3dd82f07 --- /dev/null +++ b/html/german/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,298 @@ +--- +category: general +date: 2026-09-10 +description: Verbessern Sie die Textklarheit beim Rendern von HTML mit Aspose.HTML, + indem Sie Hinting aktivieren. Dieser Leitfaden zeigt, wie Sie Hinting aktivieren + und warum es wichtig ist. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: de +lastmod: 2026-09-10 +og_description: Verbessern Sie die Textklarheit in Aspose.HTML, indem Sie lernen, + wie man Hinting aktiviert. Folgen Sie der Schritt‑für‑Schritt‑Anleitung, um auf + jeder Plattform klareren Text zu erhalten. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Verbessern Sie die Textklarheit in Aspose.HTML – aktivieren Sie das Hinting + für schärfere Darstellung +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Wie man die Textklarheit in Aspose.HTML mit Hinting verbessert +url: /de/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# So verbessern Sie die Textklarheit in Aspose.HTML mit Hinting + +Wenn Sie die Textklarheit beim Rendern von HTML mit Aspose.HTML verbessern möchten, zeigt Ihnen dieser Leitfaden eine vollständige Lösung. Durch das Aktivieren von Hinting erhalten Sie schärfere Glyphen, insbesondere auf Nicht‑Windows‑Plattformen, wo die Standarddarstellung unscharf wirken kann. + +In diesem Tutorial lernen Sie, wie Sie Hinting aktivieren, warum es für die Textklarheit wichtig ist und wie Sie die Einstellung in einen typischen Aspose.HTML‑Workflow integrieren. Keine externe Dokumentation ist erforderlich – alles, was Sie benötigen, ist in den nachfolgenden Schritten enthalten. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben: + +* .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.7+) +* Eine lizenzierte Kopie von **Aspose.HTML for .NET** (die kostenlose Testversion reicht für Tests) +* Grundlegende Kenntnisse in C# und Visual Studio oder einer anderen IDE Ihrer Wahl + +Diese Anforderungen sind minimal; derselbe Ansatz funktioniert in Konsolen‑Apps, ASP.NET‑Core‑Diensten oder Desktop‑Anwendungen. + +## Warum das Aktivieren von Hinting die Textklarheit verbessert + +Hinting ist ein Prozess, der die Kontur jeder Glyphe so anpasst, dass sie mit dem Pixelraster des Ausgabegeräts ausgerichtet wird. Ohne Hinting können Zeichen, besonders auf niedrig aufgelösten oder hoch‑DPI‑Bildschirmen, verschwommen oder ungleichmäßig aussehen. Das Aktivieren von Hinting weist die Rendering‑Engine an, diese Anpassungen automatisch vorzunehmen, was zu folgendem führt: + +* Konsistente Strichstärke über alle Zeichen hinweg +* Bessere Lesbarkeit unter Linux, macOS und älteren Windows‑Versionen +* Ein professionelles Aussehen für PDFs, Screenshots oder On‑Screen‑Vorschauen + +Aspose.HTML stellt dieses Verhalten über die **TextOptions.UseHinting**‑Eigenschaft bereit, die standardmäßig auf `false` gesetzt ist, um die Abwärtskompatibilität zu wahren. + +## Schritt 1: Erstellen einer `TextOptions`‑Instanz + +Der erste Schritt besteht darin, die Klasse **TextOptions** zu instanziieren. Dieses Objekt fasst alle textbezogenen Rendering‑Einstellungen zusammen und lässt sich leicht an die Rendering‑Pipeline übergeben. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Das Erstellen des Objekts ändert das Rendering noch nicht; es bereitet lediglich einen Container für die später zu setzenden Optionen vor. + +## Schritt 2: Hinting aktivieren, um die Textklarheit zu verbessern + +Setzen Sie die Eigenschaft **UseHinting** auf `true`. Diese einzelne Zeile aktiviert den Hinting‑Algorithmus für jedes mit den zugehörigen Optionen gerenderte Textstück. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Wenn `UseHinting` auf `true` steht, wendet Aspose.HTML automatisch Sub‑Pixel‑Anpassungen auf jede Glyphe an. Der Effekt ist besonders bei Schriften mit feinen Details sichtbar, etwa bei Serif‑Fonts oder kleinformatigem Text. + +### Profi‑Tipp: Hinting mit Anti‑Aliasing kombinieren + +Wenn Sie zusätzlich glattere Kanten wünschen, können Sie Anti‑Aliasing zusammen mit Hinting aktivieren: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Beide Einstellungen zusammen liefern die beste visuelle Treue über ein breites Spektrum von Geräten. + +## Schritt 3: `TextOptions` an den Rendering‑Prozess anhängen + +Sie müssen die konfigurierten `TextOptions` an den **HtmlRenderer** (oder eine andere von Ihnen verwendete Rendering‑Klasse) übergeben. Nachfolgend ein minimales Beispiel, das einen HTML‑String lädt, die Optionen anwendet und das Ergebnis in einer PNG‑Datei speichert. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Erklärung der wichtigsten Zeilen** + +* `HTMLDocument` analysiert das HTML‑Markup. +* `ImageDevice` definiert die Ausgabedimensionen (800 × 600 Pixel in diesem Beispiel). +* `HtmlRenderer` führt das eigentliche Rendering aus; durch Zuweisung von `textOptions` zu `renderer.Options.TextOptions` wird sichergestellt, dass Hinting angewendet wird. +* `device.Save("output.png")` schreibt das finale Bild auf die Festplatte. + +Wenn Sie diesen Code ausführen, entsteht `output.png`, wobei die Überschrift und der Absatz selbst auf einem 96 dpi‑Monitor scharf erscheinen. + +## Schritt 4: Ergebnis überprüfen + +Öffnen Sie das erzeugte Bild in einem beliebigen Betrachter. Vergleichen Sie es mit einem Bild, das **ohne** Hinting gerendert wurde (`UseHinting = false`). Sie sollten Folgendes bemerken: + +* Schärfere Kanten bei den Buchstaben „H“, „e“, „l“, „o“ +* Einheitlichere Strichstärke im gesamten Absatz +* Reduziertes Ghosting bei diagonalen Linien der Zeichen + +Falls der Unterschied auf Ihrem Bildschirm kaum auffällt, zoomen Sie hinein oder drucken Sie das Bild aus; die Verbesserung wird bei höheren Vergrößerungen deutlicher. + +## Häufige Varianten und Sonderfälle + +### Rendering zu PDF statt PNG + +Wenn Ihr Ziel ein PDF ist, ersetzen Sie das `ImageDevice` durch ein `PdfDevice`. Das gleiche `TextOptions`‑Objekt funktioniert ohne Änderungen: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Hoch‑DPI‑Displays + +Auf Bildschirmen mit Skalierungsfaktoren (z. B. 150 % oder 200 %) sollten Sie die Gerätgröße proportional erhöhen, um die visuelle Qualität beizubehalten. Hinting wirkt weiterhin, und das Ergebnis bleibt scharf. + +### Linux‑ oder macOS‑Umgebungen + +Unter Linux kann die Standard‑Rendering‑Engine auf einen Bitmap‑Font‑Renderer zurückgreifen, der Hinting ignoriert, sofern es nicht explizit aktiviert wird. Das Flag `UseHinting = true` zwingt die Engine, TrueType‑Hinting anzuwenden, und beseitigt das typische „verschwommene“ Aussehen auf diesen Plattformen. + +### Schriften ohne Hinting‑Tabellen + +Einige moderne OpenType‑Schriften enthalten keine Hinting‑Daten. In solchen Fällen greift Aspose.HTML auf Auto‑Hinting zurück, das dennoch die Klarheit im Vergleich zu komplettem Verzicht auf Hinting verbessert. + +## Schritt 5: Best Practices für Produktionscode + +1. **Erstellen Sie eine einzige `TextOptions`‑Instanz** und verwenden Sie sie wiederholt für Rendering‑Aufrufe. Das reduziert den Overhead bei Objektallokationen. +2. **Kombinieren Sie Hinting mit Anti‑Aliasing** (`UseAntiAliasing = true`) für die glatteste Ausgabe. +3. **Testen Sie auf den Zielplattformen** (Windows, Linux, macOS), da visuelle Unterschiede variieren können. +4. **Protokollieren Sie die Rendering‑Konfiguration** in den Produktions‑Logs; das erleichtert die Fehlersuche bei unerwarteten visuellen Artefakten. +5. **Halten Sie Aspose.HTML aktuell**. Neuere Versionen können zusätzliche Verbesserungen beim Text‑Rendering bringen. + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie eine eigenständige Konsolen‑Anwendung, die alles demonstriert, was besprochen wurde. Kopieren Sie den Code in ein neues .NET‑Konsolenprojekt, fügen Sie das Aspose.HTML‑NuGet‑Paket hinzu und führen Sie das Projekt aus. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Erwartetes Ergebnis** + +Beim Ausführen des Programms wird `hinted_output.png` erstellt. Die Überschrift „Hinting in action“ und der Absatztext erscheinen scharf, mit einheitlichen Strichbreiten und ohne unscharfe Kanten. Kommentieren Sie `UseHinting = true` aus, zeigt das gleiche Bild leicht verschwommene Zeichen und verdeutlicht den Nutzen der Einstellung. + +## Fazit + +Sie wissen jetzt, wie Sie die Textklarheit in Aspose.HTML durch Aktivieren von Hinting verbessern. Der Vorgang besteht darin, ein `TextOptions`‑Objekt zu erstellen, `UseHinting` (und optional `UseAntiAliasing`) zu setzen und die Optionen dem Renderer zuzuweisen. Dieser Ansatz funktioniert für PNG, JPEG, PDF und andere Ausgabeformate und liefert konsistente visuelle Qualität unter Windows, Linux und macOS. + +Als Nächstes können Sie verwandte Themen erkunden, etwa **wie man Hinting für benutzerdefinierte Schriften aktiviert**, **Optimierung der Rendering‑Performance** oder **die Verwendung von CSS zur Steuerung des Textaussehens** in Aspose.HTML. Experimentieren Sie mit verschiedenen Schriften und DPI‑Einstellungen, um zu sehen, wie sich Hinting an jedes Szenario anpasst. + +Viel Spaß beim Coden und genießen Sie schärferen Text bei jeder Aspose.HTML‑Renderung! + +## Was sollten Sie als Nächstes lernen? + + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, damit Sie weitere API‑Funktionen meistern und alternative Implementierungsansätze in Ihren Projekten erkunden können. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/german/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..6152b440d --- /dev/null +++ b/html/german/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Wie man HTML in C# mit Aspose.Html rendert. Lernen Sie, HTML und CSS + zu verarbeiten, HTML zu speichern, HTML in einen Stream zu konvertieren und ein + HTML‑Dokument in .NET zu laden. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: de +lastmod: 2026-09-10 +og_description: Wie man HTML in C# mit Aspose.Html rendert. Dieser Leitfaden zeigt + Ihnen, wie Sie HTML und CSS verarbeiten, HTML speichern, HTML in einen Stream konvertieren + und HTML‑Dokumente effizient laden. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: HTML in C# mit Aspose.Html rendern – Schritt‑für‑Schritt‑Tutorial +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: HTML in C# mit Aspose.Html rendern – vollständige Anleitung +url: /de/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man HTML in C# mit Aspose.Html rendert – vollständige Anleitung + +Wenn Sie **HTML rendern** innerhalb einer .NET‑Anwendung benötigen, zeigt Ihnen dieses Tutorial den kompletten Workflow. Sie sehen, wie HTML CSS verarbeitet wird, wie HTML gespeichert, HTML in einen Stream konvertiert und ein HTML‑Dokument in C# mit der Aspose.Html‑Bibliothek geladen wird. + +Das Rendern von HTML in einem serverseitigen Kontext erfordert oft mehr als nur das Laden einer Datei — Sie müssen auch verknüpfte Ressourcen wie Bilder und Stylesheets handhaben. Dieser Leitfaden führt Sie durch jeden Schritt, vom Laden des Dokuments über die Anpassung der Ressourcenverarbeitung bis hin zum Extrahieren der gerenderten Ausgabe als Memory‑Stream. + +Am Ende des Artikels können Sie: + +* Ein HTML‑Dokument von der Festplatte oder einer URL laden (`load html document c#`). +* Einen benutzerdefinierten `ResourceHandler` bereitstellen, um **HTML CSS zu verarbeiten** on the fly. +* Das gerenderte HTML speichern und **HTML in einen Stream konvertieren** für weitere Verarbeitung. +* Das Ergebnis mit **wie man HTML speichert** Techniken persistieren, die in jeder .NET‑Umgebung funktionieren. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben: + +* .NET 6.0 SDK oder neuer installiert. +* Visual Studio 2022 (oder jede IDE, die .NET 6 unterstützt). +* Einen NuGet‑Verweis auf **Aspose.Html** (`dotnet add package Aspose.Html`). +* Eine `input.html`‑Datei in einem bekannten Ordner (das Beispiel verwendet `YOUR_DIRECTORY/input.html`). + +Keine zusätzlichen Drittanbieter‑Bibliotheken sind erforderlich. + +## Wie man HTML rendert – Schritt‑für‑Schritt‑Anleitung + +### Schritt 1: Das HTML‑Dokument in C# laden + +Der erste Vorgang besteht darin, eine `HTMLDocument`‑Instanz zu erstellen, die das Quell‑Markup repräsentiert. Dies ist das Kernstück von **wie man HTML rendert** mit Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Warum das wichtig ist:* Das Laden des Dokuments analysiert das Markup und baut ein internes DOM auf, das der Renderer später verwendet, um CSS anzuwenden und Ressourcen aufzulösen. + +### Schritt 2: Einen benutzerdefinierten Resource‑Handler erstellen, um **HTML CSS zu verarbeiten** + +Wenn der Renderer externe Ressourcen (Bilder, CSS‑Dateien, Schriften) findet, fragt er einen `ResourceHandler` nach einem Stream. Durch das Bereitstellen eines eigenen Handlers erhalten Sie die volle Kontrolle darüber, wie jede Ressource abgerufen, transformiert oder ersetzt wird. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Warum das wichtig ist:* Im Handler findet die Logik zum **Verarbeiten von HTML CSS** statt — z. B. Inline‑CSS, Ersetzen von Bildern durch Platzhalter oder Anwenden von Sicherheitsfiltern. + +### Schritt 3: `HtmlSaveOptions` konfigurieren, um den benutzerdefinierten Handler zu verwenden + +`HtmlSaveOptions` gibt dem Renderer vor, wie die Ausgabe geschrieben wird. Weisen Sie den gerade erstellten `ResourceHandler` zu, damit der Renderer ihn für jede externe Referenz aufruft. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Das Setzen von `EmbedCss` und `EmbedImages` ist nützlich, wenn Sie später **HTML in einen Stream konvertieren** und ein eigenständiges Ergebnis benötigen. + +### Schritt 4: Das Dokument speichern und **HTML in einen Stream konvertieren** + +Jetzt können Sie das Dokument rendern und das Ergebnis in einem `MemoryStream` festhalten. Das ist das Kernstück von **wie man HTML speichert**, wenn Sie die Ausgabe im Speicher statt in einer physischen Datei benötigen. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Warum das wichtig ist:* Der `MemoryStream` liefert Ihnen eine flexible, binäre Darstellung des gerenderten HTML, die Sie speichern, übertragen oder weiterverarbeiten können, ohne das Dateisystem zu berühren. + +## Umgang mit gängigen Randfällen + +| Situation | Empfohlener Ansatz | +|-----------|--------------------| +| **Fehlende CSS‑ oder Bilddateien** | In `MyResourceHandler.HandleResource` `File.Exists` prüfen, bevor Sie öffnen. Bei Abwesenheit einen leeren `MemoryStream` oder ein Platzhalter‑Bild zurückgeben. | +| **Große HTML‑Dateien (>10 MB)** | Die Standard‑Puffergröße des `MemoryStream` erhöhen (`new MemoryStream(capacity)`), um häufige Neu­allokationen zu vermeiden. | +| **Relative URLs mit `..`‑Segmenten** | `new Uri(baseUri, info.Uri)` verwenden, um den vollständigen Pfad vor dem Zugriff auf das Dateisystem zu ermitteln. | +| **Thread‑Sicherheit in ASP.NET** | Pro Anfrage eine neue `HTMLDocument`‑ und `MyResourceHandler`‑Instanz erzeugen; Instanzen nicht zwischen Threads teilen. | +| **Kodierungsprobleme** | `saveOpts.Encoding = Encoding.UTF8` setzen, um UTF‑8‑Ausgabe zu garantieren, besonders wenn die Quelle Nicht‑ASCII‑Zeichen enthält. | + +## Profi‑Tipp: denselben Handler für mehrere Dokumente wiederverwenden + +Wenn Sie viele HTML‑Dateien stapelweise verarbeiten, können Sie eine einzelne `MyResourceHandler`‑Instanz behalten und nur deren interne Lookup‑Tabelle anpassen. Das reduziert den Objekt‑Allokations‑Overhead und beschleunigt die **HTML CSS‑Verarbeitung**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Vollständiges, ausführbares Beispiel + +Unten finden Sie ein komplettes Programm, das Sie in eine Konsolen‑Anwendung einfügen können. Es demonstriert **wie man HTML rendert**, **HTML CSS verarbeitet**, **wie man HTML speichert**, **HTML in einen Stream konvertiert** und **HTML‑Dokument c# lädt** — alles in einem Durchlauf. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Erwartete Ausgabe (gekürzt zur Übersicht):** + + + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/net/working-with-html-documents/_index.md b/html/german/net/working-with-html-documents/_index.md index 9122a4c06..e3ef0f9ef 100644 --- a/html/german/net/working-with-html-documents/_index.md +++ b/html/german/net/working-with-html-documents/_index.md @@ -51,6 +51,12 @@ Erfahren Sie, wie Sie HTML mit Aspose.HTML in C# vollständig speichern können. Erfahren Sie, wie Sie HTML-Dateien in C# zu einer ZIP-Datei komprimieren können. +### [HtmlSaveOptions in C# mit Aspose.HTML verwenden](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +Erfahren Sie, wie Sie mit HtmlSaveOptions HTML-Ausgabe in C# gezielt konfigurieren und speichern. + +### [HTML-Dokument aus Datei mit Aspose.HTML in C# laden](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/german/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/german/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..402d478bc --- /dev/null +++ b/html/german/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Lernen Sie, ein HTML-Dokument aus einer Datei mit Aspose.HTML in C# zu + laden. Enthält Optionen für die Bilddarstellung, Textdarstellung und einen benutzerdefinierten + Ressourcen‑Handler. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: de +lastmod: 2026-09-10 +og_description: HTML-Dokument aus einer Datei mit Aspose.HTML in C# laden. Dieser + Leitfaden behandelt Rendering-Optionen, einen benutzerdefinierten Ressourcen‑Handler + und vollständigen Code, den Sie noch heute ausführen können. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: HTML-Dokument aus Datei mit Aspose.HTML laden – Schritt‑für‑Schritt C#‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Wie man ein HTML‑Dokument aus einer Datei mit Aspose.HTML in C# lädt +url: /de/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man ein HTML-Dokument aus einer Datei mit Aspose.HTML in C# lädt + +Wenn Sie ein **HTML-Dokument aus einer Datei laden** und dessen Rendering steuern müssen, zeigt Ihnen dieses Tutorial eine komplette, sofort ausführbare Lösung. Sie sehen, wie Sie die Bilddarstellung konfigurieren, Text‑Hinting aktivieren und einen benutzerdefinierten Resource‑Handler bereitstellen, der leere Streams für externe Ressourcen zurückgibt. Am Ende der Anleitung können Sie das verarbeitete HTML in einen Memory‑Stream oder ein anderes gewünschtes Ziel speichern. + +Das Beispiel verwendet Aspose.HTML for .NET, eine Bibliothek, die die Verarbeitung von HTML, CSS und SVG ohne Browser‑Engine vereinfacht. Es werden keine externen Tools benötigt, und der Code funktioniert mit .NET 6 oder höher. Stellen Sie sicher, dass das Aspose.HTML NuGet‑Paket installiert ist, bevor Sie beginnen. + +## Voraussetzungen + +- .NET 6 SDK (oder jede von Aspose.HTML unterstützte .NET‑Version) +- Visual Studio 2022 oder eine andere C#‑IDE +- Aspose.HTML for .NET NuGet‑Paket (`Install-Package Aspose.HTML`) +- Eine HTML‑Datei namens `input.html`, die in einem Ordner liegt, den Sie im Code referenzieren können + +## Schritt 1: HTML-Dokument aus einer Datei laden + +Der erste Schritt besteht darin, eine `HTMLDocument`‑Instanz zu erstellen, die die Quelldatei liest. Dieses Objekt repräsentiert den gesamten DOM‑Baum und bietet Methoden für weitere Manipulationen. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Warum das wichtig ist:** Das Laden der Datei in ein `HTMLDocument` gibt Ihnen vollen Zugriff auf die Struktur, die Stile und die Ressourcen des Dokuments, die Sie später rendern oder transformieren können. + +## Schritt 2: Bilddarstellungsoptionen einrichten (Aspose.HTML Rendering) + +Wenn Sie die Seite später rasterisieren möchten, verbessert die Konfiguration der Bilddarstellung die visuelle Qualität. Antialiasing glättet Kanten und reduziert gezackte Artefakte. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tipp:** `UseAntialiasing` ist besonders nützlich für Vektorgrafiken und Text, die zu PNG oder JPEG rasterisiert werden. + +## Schritt 3: Text‑Hinting aktivieren (Text‑Rendering‑Optionen) + +Text‑Hinting beeinflusst, wie Glyphen an Pixel‑Gittern ausgerichtet werden, wodurch kleine Schriftgrößen schärfer wirken können. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Warum das wichtig ist:** Wenn Sie das HTML später in ein Bild exportieren, reduziert Hinting unscharfe Zeichen und sorgt für konsistente Typografie über verschiedene Plattformen hinweg. + +## Schritt 4: Benutzerdefinierten Resource‑Handler erstellen (custom resource handler) + +Externe Ressourcen wie Schriftarten, Bilder oder Skripte können im HTML referenziert werden. Ein `ResourceHandler` ermöglicht es Ihnen, zu steuern, wie diese Ressourcen abgerufen werden. In diesem Beispiel gibt der Handler für jede Anforderung einen leeren `MemoryStream` zurück und entfernt damit effektiv externe Assets. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Wann zu verwenden:** Dieses Muster ist praktisch für sicherheitsbeschränkte Umgebungen, Unit‑Tests oder wenn Sie nur das Markup ohne externe Dateien benötigen. + +## Schritt 5: HTML‑Speicheroptionen zusammenstellen (HTML‑zu‑Bild‑Konvertierung) + +Alle Bausteine – Resource‑Handler, Rendering‑Einstellungen und Schriftstil – werden einem `HtmlSaveOptions`‑Objekt zugewiesen. Dieses Objekt gibt Aspose.HTML an, wie das Dokument serialisiert werden soll. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Erklärung:** `WebFontStyle` kann einen bestimmten Stil (z. B. fett) für Web‑Fonts erzwingen, die möglicherweise fehlen. Die zuvor konfigurierten `ImageRenderingOptions` und `TextOptions` werden hier eingebunden, sodass sie jede spätere Rasterisierung beeinflussen. + +## Schritt 6: Dokument in einen Memory‑Stream speichern (komplette Lösung) + +Abschließend schreiben Sie das verarbeitete HTML in einen `MemoryStream`. Von hier aus können Sie den Stream in eine Datei schreiben, über ein Netzwerk senden oder an eine andere API weitergeben. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Ergebnis:** `output.html` enthält nun das gleiche Markup wie `input.html`, jedoch mit allen externen Ressourcen, die durch leere Streams ersetzt wurden, und mit den Rendering‑Einstellungen, die in die Speicheroptionen eingebettet sind. + +## Vollständiges ausführbares Beispiel + +Wenn Sie alle Schritte zusammenführen, erhalten Sie ein eigenständiges Programm, das Sie kopieren, einfügen und ausführen können. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Das Ausführen dieses Programms erzeugt `output.html` im aktuellen Verzeichnis. Öffnen Sie die Datei in einem Browser, um zu bestätigen, dass das ursprüngliche Markup geladen wird, jedoch alle verknüpften Bilder, Schriftarten oder Skripte fehlen (sie wurden durch leere Streams ersetzt). + +## Häufige Fragen und Sonderfälle + +| Frage | Antwort | +|----------|--------| +| **Was, wenn ich die Originalressourcen anstelle von leeren Streams benötige?** | Ersetzen Sie `MemoryResourceHandler` durch einen Handler, der Dateien von der Festplatte liest oder sie über HTTP herunterlädt. | +| **Kann ich das HTML direkt zu PNG oder JPEG rendern?** | Ja. Verwenden Sie `ImageRenderer` mit denselben `ImageRenderingOptions` und `TextOptions`, die Sie konfiguriert haben, und rufen Sie dann `renderer.Render(page, outputStream, ImageFormat.Png)` auf. | +| **Ist `WebFontStyle.Bold` erforderlich?** | Nein. Es wird als Beispiel für das Überschreiben des Schriftstils gezeigt. Lassen Sie es weg oder ändern Sie es zu `WebFontStyle.Normal`, wenn Sie keinen erzwungenen Stil benötigen. | +| **Funktioniert das auf .NET Core?** | Aspose.HTML unterstützt .NET 5/6/7, sodass derselbe Code in .NET‑Core‑Projekten läuft. | +| **Wie gehe ich effizient mit großen HTML‑Dateien um?** | Streamen Sie die Datei in `HTMLDocument` mithilfe eines `FileStream`‑Konstruktors, um zu vermeiden, dass die gesamte Datei gleichzeitig in den Speicher geladen wird. | + +## Fazit + +Sie wissen jetzt, wie man **HTML-Dokument aus einer Datei lädt** mit Aspose.HTML, **Bilddarstellungsoptionen** und **Text‑Rendering‑Optionen** konfiguriert und einen **benutzerdefinierten Resource‑Handler** anwendet, um externe Assets zu steuern. Das vollständige Beispiel zeigt, wie das verarbeitete HTML in einen Memory‑Stream gespeichert wird, den Sie bei Bedarf persistieren oder übertragen können. + +Als Nächstes könnten Sie **HTML‑zu‑Bild‑Konvertierung** erkunden, indem Sie die `HtmlSaveOptions` durch einen `ImageRenderer` ersetzen, oder mit **Aspose.HTML‑Rendering**‑Funktionen wie CSS‑Media‑Queries, SVG‑Unterstützung und PDF‑Export experimentieren. Diese Erweiterungen ermöglichen es Ihnen, komplette Dokument‑Verarbeitungspipelines vollständig in C# zu erstellen. + +Viel Spaß beim Coden! + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [HTML mit einem Remote‑Server in .NET mit Aspose.HTML laden](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [HTML über URL in .NET mit Aspose.HTML laden](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Wie man HTML in C# speichert – Komplett‑Leitfaden mit benutzerdefiniertem Resource‑Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/german/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..dd353bea2 --- /dev/null +++ b/html/german/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: Erfahren Sie, wie Sie HtmlSaveOptions in C# verwenden, um Web‑Font‑Stile + zu steuern und HTML‑Dateien mit Aspose.HTML zu speichern. Vollständiges Codebeispiel + und praktische Tipps inklusive. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: de +lastmod: 2026-09-10 +og_description: Wie man HtmlSaveOptions in C# verwendet, um fette und kursive Web‑Font‑Stile + beim Speichern von HTML mit Aspose.HTML zu aktivieren. Folgen Sie dem vollständigen + Beispiel und den Best‑Practice‑Tipps. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Wie man HtmlSaveOptions in C# mit Aspose.HTML verwendet – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Wie man HtmlSaveOptions in C# mit Aspose.HTML verwendet +url: /de/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man HtmlSaveOptions in C# mit Aspose.HTML verwendet + +Wenn Sie steuern müssen, wie Aspose.HTML ein HTML‑Dokument speichert, **ist das Erlernen der Verwendung von HtmlSaveOptions unerlässlich**. Dieses Tutorial zeigt Ihnen Schritt für Schritt, wie Sie HtmlSaveOptions verwenden, um fette und kursive Web‑Font‑Stile beim Speichern eines Dokuments zu aktivieren. + +Die Aspose‑HTML‑Bibliothek bietet eine umfangreiche API zum Laden, Manipulieren und Exportieren von HTML‑Inhalten. Am Ende dieses Leitfadens können Sie: + +* Eine vorhandene HTML‑Datei in ein `HTMLDocument` laden. +* `HtmlSaveOptions` konfigurieren, um bestimmte `WebFontStyle`‑Flags anzuwenden. +* Das modifizierte Dokument an einem neuen Ort oder in einen Stream speichern. +* Die Lösung für andere Schriftstile, benutzerdefiniertes CSS und Fehlerbehandlung erweitern. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben: + +* .NET 6.0 oder höher installiert. +* Eine gültige Lizenz für **Aspose.HTML for .NET** (die kostenlose Testversion funktioniert für dieses Beispiel). +* Visual Studio 2022 (oder jede C#‑IDE), um den Code zu kompilieren und auszuführen. + +Keine zusätzlichen NuGet‑Pakete sind über `Aspose.HTML` hinaus erforderlich. + +## Schritt 1: Projekt einrichten und Namespaces importieren + +Erstellen Sie ein neues **Console‑App**‑Projekt und fügen Sie das Aspose.HTML‑NuGet‑Paket hinzu: + +```bash +dotnet add package Aspose.HTML +``` + +Fügen Sie dann am Anfang von `Program.cs` die erforderlichen Namespaces ein: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Diese Namespaces stellen die Typen `HTMLDocument`, `HtmlSaveOptions` und `WebFontStyle` bereit, die Sie im gesamten Tutorial verwenden werden. + +## Schritt 2: Quell‑HTML‑Dokument laden + +Der erste Schritt besteht darin, das zu verarbeitende HTML zu lesen. Ersetzen Sie `"YOUR_DIRECTORY/input.html"` durch den tatsächlichen Pfad zu Ihrer Datei. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analysiert das Markup, erstellt einen DOM‑Baum und macht ihn zur Manipulation bereit. Wenn die Datei nicht existiert, wird eine Ausnahme ausgelöst, daher sollten Sie diesen Aufruf in Produktionscode in einen try‑catch‑Block einbetten. + +## Schritt 3: HtmlSaveOptions erstellen und konfigurieren + +`HtmlSaveOptions` ermöglicht es Ihnen, den Speicherprozess fein abzustimmen. Um fette und kursive Web‑Font‑Stile zu aktivieren, kombinieren Sie die entsprechenden `WebFontStyle`‑Flags mit dem bitweisen ODER‑Operator (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Warum WebFontStyle konfigurieren? + +Wenn Sie ein HTML‑Dokument exportieren, kann Aspose.HTML Web‑Fonts einbetten, die dem ursprünglichen Styling entsprechen. Durch das Setzen von `WebFontStyle` teilen Sie dem Exporter mit, welche Schriftvarianten eingebunden werden sollen. Dies reduziert die endgültige Dateigröße, wenn Sie nur bestimmte Stile benötigen, und stellt sicher, dass die gerenderte Ausgabe dem Original entspricht. + +#### Häufige Varianten + +| Gewünschter Stil | Entsprechendes `WebFontStyle`‑Flag | +|------------------|------------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Fett | `WebFontStyle.Bold` | +| Kursiv | `WebFontStyle.Italic` | +| Fett + Kursiv | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Alle Varianten | `WebFontStyle.All` | + +Sie können jede Kombination verwenden, die zu Ihrem Szenario passt. + +## Schritt 4: Dokument mit den konfigurierten Optionen speichern + +Schreiben Sie nun das Dokument in eine neue Datei. Die Methode `Save` akzeptiert den Zielpfad und die vorbereitete `HtmlSaveOptions`‑Instanz. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Falls Sie in einen Memory‑Stream schreiben müssen (z. B. um die Datei über HTTP zu senden), verwenden Sie die Überladung, die ein `Stream`‑Objekt akzeptiert: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Schritt 5: Ergebnis überprüfen + +Öffnen Sie `output.html` in einem Browser oder prüfen Sie die Datei mit einem Texteditor. Sie sollten sehen, dass der ` + + +
+ +"; +``` + +Το HTML ορίζει ένα απλό διανυσματικό σχήμα που ωφελείται από το antialiasing όταν μετατρέπεται σε raster. + +## Βήμα 2: Αρχικοποίηση της μηχανής απόδοσης + +Το Aspose.HTML χρησιμοποιεί ένα `HtmlRenderer` μαζί με `ImageRenderingOptions`. Εδώ είναι που **πώς να ενεργοποιήσετε το antialiasing** για το τελικό bitmap. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Γιατί το `UseAntialiasing = true` είναι σημαντικό**: Η μηχανή απόδοσης σχεδιάζει διανυσματικά σχήματα, κείμενο και διαβαθμίσεις χρησιμοποιώντας υπο‑εικονοστοιχείο ακρίβεια. Η ενεργοποίηση του antialiasing λέει στον rasterizer να αναμειγνύει τα pixel των άκρων με τα γειτονικά, εξαλείφοντας τις σκαλιστές γραμμές που εμφανίζονται όταν το `UseAntialiasing` παραμείνει στην προεπιλογή `false`. Αυτό είναι ο πυρήνας της **υψηλής ποιότητας απόδοσης εικόνας**. + +## Βήμα 3: Απόδοση του HTML σε εικόνα + +Με τις επιλογές διαμορφωμένες, καλέστε τη μέθοδο `RenderToImage`. Η μέθοδος επιστρέφει ένα αντικείμενο `Image` που μπορείτε να αποθηκεύσετε στο δίσκο ή να το ρέξετε απευθείας σε μια απάντηση. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Μετά την εκτέλεση, το `output.png` περιέχει έναν ομαλό, antialiased κύκλο. Ανοίξτε το αρχείο σε οποιονδήποτε προβολέα εικόνας για να επαληθεύσετε το αποτέλεσμα. + +![πώς να ενεργοποιήσετε το antialiasing στην απόδοση Aspose.HTML rendering](/images/antialiasing-example.png){alt="πώς να ενεργοποιήσετε το antialiasing στην απόδοση Aspose.HTML rendering"} + +## Βήμα 4: Επαλήθευση εξόδου υψηλής ποιότητας (πώς να αποδώσετε εικόνα html) + +Μπορείτε προγραμματιστικά να επιβεβαιώσετε τις διαστάσεις της εικόνας και το DPI για να διασφαλίσετε ότι η απόδοση ανταποκρίνεται στις προσδοκίες σας. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Τυπική έξοδος κονσόλας: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Το αυξημένο DPI σε συνδυασμό με το antialiasing παράγει ένα καθαρό αποτέλεσμα ακόμη και όταν η εικόνα κλιμακώνεται. Αυτό δείχνει **πώς να αποδώσετε εικόνα html** με επαγγελματική ποιότητα. + +## Συνηθισμένες παραλλαγές και περιπτώσεις άκρων + +| Κατάσταση | Συνιστώμενη ρύθμιση | +|-----------|-------------------| +| Απόδοση πολύ μεγάλων σελίδων (π.χ., εφαρμογές web πλήρους οθόνης) | Αυξήστε το `ImageRenderingOptions.Width` / `Height` ή ορίστε `Scale` για έλεγχο χρήσης μνήμης. | +| Απαιτείται διαφανές φόντο | Ορίστε `imageOptions.BackgroundColor = Color.Transparent;` | +| Στόχευση JPEG για μικρότερο μέγεθος αρχείου | Αλλάξτε το `ImageFormat` σε `ImageFormat.Jpeg` και προσαρμόστε το `Quality` (0‑100). | +| Εκτέλεση σε Linux container χωρίς GUI | Το Aspose.HTML είναι πλήρως headless· δεν απαιτούνται πρόσθετες εξαρτήσεις. | +| Πρέπει να απενεργοποιήσετε το antialiasing για δοκιμή UI pixel‑perfect | Ορίστε `UseAntialiasing = false;` – οι άκρες θα είναι καθαρές αλλά μπορεί να φαίνονται σκαλιστές. | + +### Συμβουλή επαγγελματία + +Κατά τη δημιουργία μιας δέσμης εικόνων, επαναχρησιμοποιήστε ένα μόνο αντικείμενο `HTMLDocument` και τροποποιήστε μόνο την ιδιότητα `Content` του μεταξύ των αποδόσεων. Αυτό μειώνει το κόστος ανάλυσης του ίδιου HTML επανειλημμένα και βελτιώνει τη διαπερατότητα. + +## Πλήρης λίστα κώδικα + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Τι Θα Πρέπει Να Μάθετε Στη Σειρά; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε σε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να αποδώσετε html σε εικόνα με C# – Πλήρης Οδηγός](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML σε Εικόνα Tutorial – Απόδοση HTML σε PNG σε C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Πώς να Χρησιμοποιήσετε το Aspose για Απόδοση HTML σε PNG – Οδηγός Βήμα‑Βήμα](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/greek/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..d01047ac6 --- /dev/null +++ b/html/greek/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Βελτιώστε την καθαρότητα του κειμένου κατά την απόδοση HTML με το Aspose.HTML + ενεργοποιώντας το hinting. Αυτός ο οδηγός δείχνει πώς να ενεργοποιήσετε το hinting + και γιατί είναι σημαντικό. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: el +lastmod: 2026-09-10 +og_description: Βελτιώστε την καθαρότητα του κειμένου στο Aspose.HTML μαθαίνοντας + πώς να ενεργοποιήσετε το hinting. Ακολουθήστε τον οδηγό βήμα‑βήμα για να έχετε πιο + καθαρό κείμενο σε κάθε πλατφόρμα. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Βελτιώστε την ευκρίνεια του κειμένου στο Aspose.HTML – ενεργοποιήστε το + hinting για πιο οξεία απόδοση +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Πώς να βελτιώσετε την καθαρότητα του κειμένου στο Aspose.HTML με hinting +url: /el/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να βελτιώσετε την καθαρότητα κειμένου στο Aspose.HTML με hinting + +Εάν χρειάζεστε να βελτιώσετε την καθαρότητα του κειμένου κατά την απόδοση HTML με το Aspose.HTML, αυτός ο οδηγός σας παρουσιάζει μια πλήρη λύση. Ενεργοποιώντας το hinting λαμβάνετε πιο οξείς γλύφους, ειδικά σε πλατφόρμες που δεν είναι Windows, όπου η προεπιλεγμένη απόδοση μπορεί να φαίνεται θολή. + +Σε αυτό το tutorial θα μάθετε πώς να ενεργοποιήσετε το hinting, γιατί είναι σημαντικό για την καθαρότητα του κειμένου και πώς να ενσωματώσετε αυτή τη ρύθμιση σε μια τυπική ροή εργασίας του Aspose.HTML. Δεν απαιτείται εξωτερική τεκμηρίωση — όλα όσα χρειάζεστε περιλαμβάνονται στα παρακάτω βήματα. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7+) +* Ένα αδειοδοτημένο αντίγραφο του **Aspose.HTML for .NET** (η δωρεάν δοκιμή λειτουργεί για δοκιμές) +* Βασική εξοικείωση με C# και Visual Studio ή οποιοδήποτε IDE προτιμάτε + +Αυτές οι απαιτήσεις είναι ελάχιστες· η ίδια προσέγγιση λειτουργεί σε εφαρμογές κονσόλας, υπηρεσίες ASP.NET Core ή εφαρμογές επιφάνειας εργασίας. + +## Γιατί η ενεργοποίηση του hinting βελτιώνει την καθαρότητα του κειμένου + +Το hinting είναι μια διαδικασία που προσαρμόζει το περίγραμμα κάθε γλύφου ώστε να ευθυγραμμίζεται με το πλέγμα εικονοστοιχείων της οθόνης. Χωρίς hinting, ειδικά σε οθόνες χαμηλής ανάλυσης ή υψηλής DPI, οι χαρακτήρες μπορεί να φαίνονται θολοί ή ανώμαλοι. Η ενεργοποίηση του hinting λέει στη μηχανή απόδοσης να εφαρμόζει αυτές τις προσαρμογές αυτόματα, με αποτέλεσμα: + +* Συνεπή πάχος γραμμής σε όλους τους χαρακτήρες +* Καλύτερη αναγνωσιμότητα σε Linux, macOS και παλαιότερες εκδόσεις των Windows +* Επαγγελματική εμφάνιση για PDF, στιγμιότυπα οθόνης ή προεπισκοπήσεις στην οθόνη + +Το Aspose.HTML εκθέτει αυτή τη συμπεριφορά μέσω της ιδιότητας **TextOptions.UseHinting**, η οποία προεπιλεγμένα είναι `false` για λόγους συμβατότητας. + +## Βήμα 1: Δημιουργία ενός αντικειμένου `TextOptions` + +Το πρώτο βήμα είναι η δημιουργία μιας στιγμής της κλάσης **TextOptions**. Αυτό το αντικείμενο ομαδοποιεί όλες τις ρυθμίσεις που αφορούν το κείμενο, καθιστώντας εύκολη τη μεταβίβαση τους στην αλυσίδα απόδοσης. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Η δημιουργία του αντικειμένου δεν αλλάζει ακόμη την απόδοση· απλώς προετοιμάζει ένα κοντέινερ για τις επιλογές που θα ορίσετε αργότερα. + +## Βήμα 2: Ενεργοποίηση του hinting για βελτίωση της καθαρότητας του κειμένου + +Ορίστε την ιδιότητα **UseHinting** σε `true`. Αυτή η μία γραμμή ενεργοποιεί τον αλγόριθμο hinting για κάθε κομμάτι κειμένου που αποδίδεται με τις αντίστοιχες επιλογές. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Όταν το `UseHinting` είναι `true`, το Aspose.HTML εφαρμόζει αυτόματα προσαρμογές sub‑pixel σε κάθε γλύφο. Το αποτέλεσμα είναι πιο εμφανές σε γραμματοσειρές που περιέχουν λεπτές λεπτομέρειες, όπως serif ή μικρού μεγέθους κείμενο. + +### Pro tip: Συνδυάστε το hinting με anti‑aliasing + +Αν θέλετε επίσης πιο ομαλές άκρες, μπορείτε να ενεργοποιήσετε το anti‑aliasing παράλληλα με το hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Οι δύο ρυθμίσεις μαζί προσφέρουν την καλύτερη οπτική πιστότητα σε ένα ευρύ φάσμα συσκευών. + +## Βήμα 3: Σύνδεση του `TextOptions` στη διαδικασία απόδοσης + +Πρέπει να περάσετε το διαμορφωμένο `TextOptions` στο **HtmlRenderer** (ή σε οποιαδήποτε άλλη κλάση απόδοσης χρησιμοποιείτε). Παρακάτω φαίνεται ένα ελάχιστο παράδειγμα που φορτώνει μια συμβολοσειρά HTML, εφαρμόζει τις επιλογές και γράφει το αποτέλεσμα σε αρχείο PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Επεξήγηση βασικών γραμμών** + +* `HTMLDocument` αναλύει το markup HTML. +* `ImageDevice` ορίζει τις διαστάσεις εξόδου (800 × 600 εικονοστοιχεία σε αυτήν την περίπτωση). +* `HtmlRenderer` εκτελεί την πραγματική απόδοση· η ανάθεση του `textOptions` στο `renderer.Options.TextOptions` εξασφαλίζει ότι το hinting εφαρμόζεται. +* `device.Save("output.png")` γράφει την τελική εικόνα στο δίσκο. + +Η εκτέλεση αυτού του κώδικα παράγει το `output.png` όπου ο τίτλος και η παράγραφος εμφανίζονται καθαρά, ακόμη και σε οθόνη 96 dpi. + +## Βήμα 4: Επαλήθευση του αποτελέσματος + +Ανοίξτε την παραγόμενη εικόνα σε οποιονδήποτε προβολέα. Συγκρίνετε την με μια εικόνα που αποδόθηκε **χωρίς** hinting (ορίστε `UseHinting = false`). Θα πρέπει να παρατηρήσετε: + +* Πιο οξείς άκρες στα γράμματα “H”, “e”, “l”, “o” +* Πιο ομοιόμορφο πάχος γραμμής σε όλη την παράγραφο +* Μειωμένο ghosting σε διαγώνιες γραμμές χαρακτήρων + +Αν η διαφορά είναι λεπτή στην οθόνη σας, δοκιμάστε να κάνετε ζουμ ή να εκτυπώσετε την εικόνα· η βελτίωση γίνεται πιο εμφανής σε υψηλότερες μεγαλοποιήσεις. + +## Κοινές παραλλαγές και ειδικές περιπτώσεις + +### Απόδοση σε PDF αντί για PNG + +Αν ο προορισμός σας είναι PDF, αντικαταστήστε το `ImageDevice` με ένα `PdfDevice`. Το ίδιο αντικείμενο `TextOptions` λειτουργεί χωρίς τροποποίηση: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Οθόνες υψηλής DPI + +Σε οθόνες με παράγοντες κλιμάκωσης (π.χ. 150 % ή 200 %), ίσως θελήσετε να αυξήσετε το μέγεθος της συσκευής αναλογικά για να διατηρήσετε την οπτική ποιότητα. Το hinting παραμένει ενεργό και το αποτέλεσμα παραμένει καθαρό. + +### Περιβάλλοντα Linux ή macOS + +Σε Linux, η προεπιλεγμένη μηχανή απόδοσης μπορεί να επιστρέψει σε έναν renderer bitmap γραμματοσειρών που αγνοεί το hinting εκτός αν το ενεργοποιήσετε ρητά. Η σημαία `UseHinting = true` αναγκάζει τη μηχανή να εφαρμόσει TrueType hinting, εξαλείφοντας την τυπική «θολή» εμφάνιση σε αυτές τις πλατφόρμες. + +### Γραμματοσειρές χωρίς πίνακες hinting + +Ορισμένες σύγχρονες γραμματοσειρές OpenType παραλείπουν τα δεδομένα hinting. Σε αυτές τις περιπτώσεις, το Aspose.HTML επαναπροσαρμόζει αυτόματα (auto‑hinting), κάτι που βελτιώνει την καθαρότητα σε σύγκριση με την πλήρη απουσία hinting. + +## Βήμα 5: Καλές πρακτικές για κώδικα παραγωγής + +1. **Δημιουργήστε μια μόνο στιγμιότυπο του `TextOptions`** και επαναχρησιμοποιήστε το σε όλες τις κλήσεις απόδοσης. Αυτό μειώνει το κόστος κατανομής αντικειμένων. +2. **Συνδυάστε το hinting με anti‑aliasing** (`UseAntiAliasing = true`) για την πιο ομαλή έξοδο. +3. **Δοκιμάστε στις πλατφόρμες-στόχο** (Windows, Linux, macOS) επειδή οι οπτικές διαφορές μπορεί να διαφέρουν. +4. **Καταγράψτε τη διαμόρφωση απόδοσης** στα logs παραγωγής· βοηθά στον εντοπισμό τυχόν απρόσμενων οπτικών προβλημάτων. +5. **Διατηρείτε το Aspose.HTML ενημερωμένο**. Νεότερες εκδόσεις μπορεί να εισάγουν πρόσθετες βελτιώσεις στην απόδοση κειμένου. + +## Πλήρες λειτουργικό παράδειγμα + +Ακολουθεί μια αυτόνομη εφαρμογή κονσόλας που δείχνει όλα όσα συζητήθηκαν. Αντιγράψτε τον κώδικα σε ένα νέο .NET project κονσόλας, προσθέστε το πακέτο NuGet Aspose.HTML και εκτελέστε το. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Αναμενόμενο αποτέλεσμα** + +Η εκτέλεση του προγράμματος δημιουργεί το `hinted_output.png`. Ο τίτλος “Hinting in action” και το κείμενο της παραγράφου εμφανίζονται καθαρά, με ομοιόμορφα πλάτη γραμμής και χωρίς θολές άκρες. Αν σχολιάσετε το `UseHinting = true`, η ίδια εικόνα θα δείχνει ελαφρώς θολούς χαρακτήρες, επιδεικνύοντας το όφελος της ρύθμισης. + +## Συμπέρασμα + +Τώρα γνωρίζετε πώς να βελτιώσετε την καθαρότητα του κειμένου στο Aspose.HTML ενεργοποιώντας το hinting. Η διαδικασία περιλαμβάνει τη δημιουργία ενός αντικειμένου `TextOptions`, τον ορισμό του `UseHinting` (και προαιρετικά του `UseAntiAliasing`), και την προσάρτηση των επιλογών στον renderer. Η προσέγγιση αυτή λειτουργεί για PNG, JPEG, PDF και άλλες μορφές εξόδου, παρέχοντας συνεπή οπτική ποιότητα σε Windows, Linux και macOS. + +Στη συνέχεια, μπορείτε να εξερευνήσετε συναφή θέματα όπως **πώς να ενεργοποιήσετε το hinting για προσαρμοσμένες γραμματοσειρές**, **βελτιστοποίηση της απόδοσης απόδοσης**, ή **χρήση CSS για έλεγχο της εμφάνισης του κειμένου** στο Aspose.HTML. Πειραματιστείτε με διαφορετικές γραμματοσειρές και ρυθμίσεις DPI για να δείτε πώς το hinting προσαρμόζεται σε κάθε σενάριο. + +Καλή προγραμματιστική και απολαύστε πιο οξέα κείμενα σε κάθε απόδοση του Aspose.HTML! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στην υλοποίηση των δικών σας έργων. + +- [Πώς να αποδώσετε HTML σε PNG με Aspose – Πλήρης Οδηγός](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Πώς να χρησιμοποιήσετε το Aspose για απόδοση HTML σε PNG – Οδηγός βήμα‑βήμα](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Δημιουργία HTML εγγράφου με μορφοποιημένο κείμενο και εξαγωγή σε PDF – Πλήρης Οδηγός](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/greek/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..416f1c1bb --- /dev/null +++ b/html/greek/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Πώς να αποδίδετε HTML σε C# χρησιμοποιώντας το Aspose.Html. Μάθετε να + επεξεργάζεστε HTML/CSS, να αποθηκεύετε HTML, να μετατρέπετε HTML σε ροή και να φορτώνετε + έγγραφο HTML στο .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: el +lastmod: 2026-09-10 +og_description: Πώς να αποδίδετε HTML σε C# με το Aspose.Html. Αυτός ο οδηγός σας + δείχνει πώς να επεξεργάζεστε HTML CSS, να αποθηκεύετε HTML, να μετατρέπετε HTML + σε ροή και να φορτώνετε έγγραφο HTML αποδοτικά. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Απόδοση HTML σε C# με το Aspose.Html – βήμα‑βήμα οδηγός +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Πώς να αποδίδετε HTML σε C# με το Aspose.Html – πλήρης οδηγός +url: /el/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να αποδώσετε HTML σε C# με Aspose.Html – πλήρης οδηγός + +Αν χρειάζεστε **how to render html** μέσα σε μια εφαρμογή .NET, αυτό το tutorial σας δείχνει τη πλήρη ροή εργασίας. Θα δείτε πώς να επεξεργαστείτε HTML CSS, πώς να αποθηκεύσετε HTML, να μετατρέψετε HTML σε stream, και να φορτώσετε ένα έγγραφο HTML σε C# χρησιμοποιώντας τη βιβλιοθήκη Aspose.Html. + +Η απόδοση HTML σε περιβάλλον server‑side συχνά απαιτεί περισσότερα από το απλό φόρτωμα ενός αρχείου—πρέπει επίσης να διαχειριστείτε τους συνδεδεμένους πόρους όπως εικόνες και φύλλα στυλ. Αυτός ο οδηγός σας καθοδηγεί βήμα‑βήμα, από το φόρτωμα του εγγράφου μέχρι την προσαρμογή της διαχείρισης πόρων και, τέλος, την εξαγωγή του αποδοθέντος αποτελέσματος ως memory stream. + +Στο τέλος του άρθρου θα μπορείτε να: + +* Φορτώσετε ένα έγγραφο HTML από δίσκο ή URL (`load html document c#`). +* Παρέχετε έναν προσαρμοσμένο `ResourceHandler` για **process html css** σε πραγματικό χρόνο. +* Αποθηκεύσετε το αποδοθέν HTML και **convert html to stream** για περαιτέρω επεξεργασία. +* Διατηρήσετε το αποτέλεσμα χρησιμοποιώντας τεχνικές **how to save html** που λειτουργούν σε οποιοδήποτε περιβάλλον .NET. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 SDK ή νεότερη έκδοση εγκατεστημένη. +* Visual Studio 2022 (ή οποιοδήποτε IDE που υποστηρίζει .NET 6). +* Μια αναφορά NuGet στη **Aspose.Html** (`dotnet add package Aspose.Html`). +* Ένα αρχείο `input.html` τοποθετημένο σε γνωστό φάκελο (το παράδειγμα χρησιμοποιεί `YOUR_DIRECTORY/input.html`). + +Δεν απαιτούνται πρόσθετες βιβλιοθήκες τρίτων. + +## Πώς να αποδώσετε HTML – οδηγός βήμα‑βήμα + +### Βήμα 1: Φορτώστε το έγγραφο HTML σε C# + +Η πρώτη ενέργεια είναι η δημιουργία μιας παρουσίας `HTMLDocument` που αντιπροσωπεύει το πηγαίο markup. Αυτό είναι ο πυρήνας του **how to render html** με Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Γιατί είναι σημαντικό:* Το φόρτωμα του εγγράφου αναλύει το markup και δημιουργεί ένα εσωτερικό DOM, το οποίο ο renderer χρησιμοποιεί αργότερα για την εφαρμογή του CSS και την επίλυση πόρων. + +### Βήμα 2: Δημιουργήστε έναν προσαρμοσμένο διαχειριστή πόρων για **process html css** + +Όταν ο renderer συναντά εξωτερικούς πόρους (εικόνες, αρχεία CSS, γραμματοσειρές), ζητά από έναν `ResourceHandler` ένα stream. Παρέχοντας έναν προσαρμοσμένο διαχειριστή αποκτάτε πλήρη έλεγχο για το πώς κάθε πόρος θα ληφθεί, μετατραπεί ή αντικατασταθεί. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Γιατί είναι σημαντικό:* Ο διαχειριστής είναι το σημείο όπου εφαρμόζετε τη λογική **process html css**—π.χ., ενσωμάτωση CSS, αντικατάσταση εικόνων με placeholders ή εφαρμογή φίλτρων ασφαλείας. + +### Βήμα 3: Διαμορφώστε το `HtmlSaveOptions` ώστε να χρησιμοποιεί τον προσαρμοσμένο διαχειριστή + +Το `HtmlSaveOptions` καθορίζει στον renderer πώς θα γράψει το αποτέλεσμα. Αναθέστε τον `ResourceHandler` που δημιουργήσατε ώστε ο renderer να τον καλεί για κάθε εξωτερική αναφορά. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Η ρύθμιση `EmbedCss` και `EmbedImages` είναι χρήσιμη όταν αργότερα **convert html to stream** και χρειάζεστε ένα αυτόνομο αποτέλεσμα. + +### Βήμα 4: Αποθηκεύστε το έγγραφο και **convert html to stream** + +Τώρα μπορείτε να αποδώσετε το έγγραφο και να καταγράψετε το αποτέλεσμα σε ένα `MemoryStream`. Αυτός είναι ο πυρήνας του **how to save html** όταν θέλετε το αποτέλεσμα στη μνήμη αντί για φυσικό αρχείο. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Γιατί είναι σημαντικό:* Το `MemoryStream` σας παρέχει μια ευέλικτη, δυαδική αναπαράσταση του αποδοθέντος HTML, την οποία μπορείτε να αποθηκεύσετε, μεταδώσετε ή να τη μεταχειριστείτε περαιτέρω χωρίς να αγγίξετε το σύστημα αρχείων. + +## Διαχείριση κοινών περιπτώσεων άκρων + +| Κατάσταση | Συνιστώμενη προσέγγιση | +|-----------|----------------------| +| **Απουσία αρχείων CSS ή εικόνας** | Στο `MyResourceHandler.HandleResource`, ελέγξτε `File.Exists` πριν ανοίξετε. Επιστρέψτε ένα κενό `MemoryStream` ή μια εικόνα placeholder αν το αρχείο λείπει. | +| **Μεγάλα αρχεία HTML (>10 MB)** | Αυξήστε το προεπιλεγμένο μέγεθος buffer του `MemoryStream` (`new MemoryStream(capacity)`) ώστε να αποφύγετε συχνές επανακατανομές. | +| **Σχετικά URLs με τμήματα `..`** | Χρησιμοποιήστε `new Uri(baseUri, info.Uri)` για να επιλύσετε το πλήρες μονοπάτι πριν προσπελάσετε το σύστημα αρχείων. | +| **Ασφάλεια νήματος σε ASP.NET** | Δημιουργήστε ένα νέο `HTMLDocument` και `MyResourceHandler` ανά αίτημα· αποφύγετε την κοινή χρήση αντικειμένων μεταξύ νημάτων. | +| **Προβλήματα κωδικοποίησης** | Ορίστε `saveOpts.Encoding = Encoding.UTF8` για να εγγυηθείτε έξοδο UTF‑8, ειδικά όταν η πηγή περιέχει μη‑ASCII χαρακτήρες. | + +## Συμβουλή Pro: επαναχρησιμοποιήστε τον ίδιο διαχειριστή για πολλαπλά έγγραφα + +Αν επεξεργάζεστε πολλά αρχεία HTML σε batch, μπορείτε να διατηρήσετε μία μόνο παρουσία `MyResourceHandler` και απλώς να αλλάζετε τον εσωτερικό του πίνακα αναζήτησης. Αυτό μειώνει το κόστος κατανομής αντικειμένων και επιταχύνει τη φάση **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Πλήρες, εκτελέσιμο παράδειγμα + +Παρακάτω υπάρχει ένα πλήρες πρόγραμμα που μπορείτε να επικολλήσετε σε μια εφαρμογή console. Δείχνει **how to render html**, **process html css**, **how to save html**, **convert html to stream**, και **load html document c#**—όλα σε μία ροή. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Αναμενόμενη έξοδος** (συνοπτική για συντομία): + + + +## Τι Θα Μάθετε Στη Σειρά; + +Οι παρακάτω οδηγίες καλύπτουν στενά σχετικές θεματικές που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κυριαρχήσετε επιπλέον δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να Αποθηκεύσετε HTML με Aspose.Html – Πλήρης Οδηγός C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Πώς να Χρησιμοποιήσετε το Aspose για Απόδοση HTML σε PNG σε C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Πώς να Χρησιμοποιήσετε το Aspose για Απόδοση HTML σε PNG – Οδηγός Βήμα‑Βήμα](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/net/working-with-html-documents/_index.md b/html/greek/net/working-with-html-documents/_index.md index 58e451602..7d7863f1f 100644 --- a/html/greek/net/working-with-html-documents/_index.md +++ b/html/greek/net/working-with-html-documents/_index.md @@ -41,16 +41,23 @@ url: /el/net/working-with-html-documents/ Μάθετε πώς να αποθηκεύετε HTML σε C# χρησιμοποιώντας έναν προσαρμοσμένο διαχειριστή πόρων, βήμα-βήμα οδηγός. ### [Πώς να κάνετε έντονο τίτλο με CSS & C# – Πλήρης οδηγός βήμα‑βήμα](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + ### [Πώς να αποθηκεύσετε HTML σε C# – Προσαρμοσμένοι Διαχειριστές Πόρων & ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) Μάθετε πώς να αποθηκεύσετε HTML χρησιμοποιώντας προσαρμοσμένους διαχειριστές πόρων και συμπίεση ZIP σε C#. ### [Πώς να αποθηκεύσετε HTML με Aspose.Html – Πλήρης οδηγός C#](./how-to-save-html-with-aspose-html-complete-c-guide/) +### [Πώς να χρησιμοποιήσετε HtmlSaveOptions σε C# με Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + ### [Πώς να συμπιέσετε HTML σε ZIP με C# – Πλήρης οδηγός βήμα‑βήμα](./how-to-zip-html-in-c-complete-step-by-step-guide/) Μάθετε πώς να συμπιέζετε αρχεία HTML σε αρχείο ZIP χρησιμοποιώντας C# βήμα‑βήμα. +### [Πώς να φορτώσετε έγγραφο HTML από αρχείο με Aspose.HTML σε C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + +Μάθετε πώς να φορτώσετε ένα αρχείο HTML χρησιμοποιώντας Aspose.HTML σε C#. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/greek/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/greek/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..903086619 --- /dev/null +++ b/html/greek/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Μάθετε πώς να φορτώνετε έγγραφο HTML από αρχείο χρησιμοποιώντας το Aspose.HTML + σε C#. Περιλαμβάνει επιλογές απόδοσης εικόνας, επιλογές απόδοσης κειμένου και έναν + προσαρμοσμένο διαχειριστή πόρων. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: el +lastmod: 2026-09-10 +og_description: Φορτώστε έγγραφο HTML από αρχείο χρησιμοποιώντας το Aspose.HTML σε + C#. Αυτός ο οδηγός καλύπτει τις επιλογές απόδοσης, έναν προσαρμοσμένο διαχειριστή + πόρων και πλήρες κώδικα που μπορείτε να εκτελέσετε σήμερα. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Φόρτωση εγγράφου HTML από αρχείο με το Aspose.HTML – βήμα‑βήμα οδηγός C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Πώς να φορτώσετε έγγραφο HTML από αρχείο με το Aspose.HTML σε C# +url: /el/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να φορτώσετε έγγραφο HTML από αρχείο με Aspose.HTML σε C# + +Εάν χρειάζεται να **φορτώσετε έγγραφο HTML από αρχείο** και να ελέγξετε την απόδοσή του, αυτό το tutorial σας παρουσιάζει μια πλήρη, έτοιμη‑για‑εκτέλεση λύση. Θα δείτε πώς να ρυθμίσετε την απόδοση εικόνων, να ενεργοποιήσετε το text hinting και να παρέχετε έναν προσαρμοσμένο διαχειριστή πόρων που επιστρέφει κενά streams για εξωτερικά assets. Στο τέλος του οδηγού μπορείτε να αποθηκεύσετε το επεξεργασμένο HTML σε ένα memory stream ή σε οποιονδήποτε άλλο προορισμό προτιμάτε. + +Το παράδειγμα χρησιμοποιεί το Aspose.HTML για .NET, μια βιβλιοθήκη που απλοποιεί την επεξεργασία HTML, CSS και SVG χωρίς μηχανή προγράμματος περιήγησης. Δεν απαιτούνται εξωτερικά εργαλεία και ο κώδικας λειτουργεί με .NET 6 ή νεότερο. Βεβαιωθείτε ότι έχετε εγκαταστήσει το πακέτο NuGet Aspose.HTML πριν ξεκινήσετε. + +## Προαπαιτούμενα + +- .NET 6 SDK (ή οποιαδήποτε έκδοση .NET υποστηρίζεται από το Aspose.HTML) +- Visual Studio 2022 ή άλλο IDE για C# +- Πακέτο NuGet Aspose.HTML for .NET (`Install-Package Aspose.HTML`) +- Ένα αρχείο HTML με όνομα `input.html` τοποθετημένο σε φάκελο που μπορείτε να αναφέρετε από τον κώδικα + +## Βήμα 1: Φόρτωση του εγγράφου HTML από αρχείο + +Η πρώτη ενέργεια είναι η δημιουργία ενός αντικειμένου `HTMLDocument` που διαβάζει το αρχείο πηγής. Αυτό το αντικείμενο αντιπροσωπεύει ολόκληρο το δέντρο DOM και παρέχει μεθόδους για περαιτέρω επεξεργασία. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Γιατί είναι σημαντικό:** Η φόρτωση του αρχείου σε ένα `HTMLDocument` σας δίνει πλήρη πρόσβαση στη δομή, τα στυλ και τους πόρους του εγγράφου, τα οποία μπορείτε αργότερα να αποδώσετε ή να μετασχηματίσετε. + +## Βήμα 2: Ρύθμιση επιλογών απόδοσης εικόνας (Aspose.HTML rendering) + +Εάν σκοπεύετε να ραστεροποιήσετε τη σελίδα αργότερα, η διαμόρφωση της απόδοσης εικόνας βελτιώνει την οπτική ποιότητα. Η αντι-αλλασσόδωση (antialiasing) λειαίνει τις άκρες και μειώνει τα σκαλιστά εφέ. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Συμβουλή:** Η `UseAntialiasing` είναι ιδιαίτερα χρήσιμη για διανυσματικά γραφικά και κείμενο που θα ραστεροποιηθεί σε PNG ή JPEG. + +## Βήμα 3: Ενεργοποίηση text hinting (text rendering options) + +Το text hinting επηρεάζει το πώς τα glyphs ευθυγραμμίζονται σε πλέγματα pixel, κάτι που μπορεί να κάνει τις μικρές γραμματοσειρές να φαίνονται πιο οξίνες. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Γιατί είναι σημαντικό:** Όταν εξάγετε αργότερα το HTML σε εικόνα, το hinting μειώνει την θολότητα των χαρακτήρων και εξασφαλίζει συνεπή τυπογραφία σε όλες τις πλατφόρμες. + +## Βήμα 4: Δημιουργία προσαρμοσμένου διαχειριστή πόρων (custom resource handler) + +Εξωτερικοί πόροι όπως γραμματοσειρές, εικόνες ή scripts μπορεί να αναφέρονται στο HTML. Ένας `ResourceHandler` σας επιτρέπει να ελέγξετε πώς ανακτώνται αυτοί οι πόροι. Σε αυτό το παράδειγμα ο διαχειριστής επιστρέφει ένα κενό `MemoryStream` για κάθε αίτηση, αφαιρώντας ουσιαστικά τα εξωτερικά assets. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Πότε να το χρησιμοποιήσετε:** Αυτό το μοτίβο είναι χρήσιμο σε περιβάλλοντα με περιορισμούς ασφαλείας, για unit testing, ή όταν χρειάζεστε μόνο το markup χωρίς εξωτερικά αρχεία. + +## Βήμα 5: Συναρμολόγηση επιλογών αποθήκευσης HTML (HTML to image conversion) + +Όλα τα κομμάτια — διαχειριστής πόρων, ρυθμίσεις απόδοσης και στυλ γραμματοσειράς — συνδέονται σε ένα αντικείμενο `HtmlSaveOptions`. Αυτό το αντικείμενο λέει στο Aspose.HTML πώς να σειριοποιήσει το έγγραφο. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Επεξήγηση:** Η `WebFontStyle` μπορεί να επιβάλει ένα συγκεκριμένο στυλ (π.χ., bold) για web fonts που μπορεί να λείπουν. Οι `ImageRenderingOptions` και `TextOptions` που διαμορφώσαμε νωρίτερα ενσωματώνονται εδώ, διασφαλίζοντας ότι θα επηρεάσουν οποιαδήποτε ραστεροποίηση πραγματοποιηθεί αργότερα. + +## Βήμα 6: Αποθήκευση του εγγράφου σε memory stream (complete solution) + +Τέλος, γράψτε το επεξεργασμένο HTML σε ένα `MemoryStream`. Από εδώ μπορείτε να γράψετε το stream σε αρχείο, να το στείλετε μέσω δικτύου ή να το περάσετε σε άλλο API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Αποτέλεσμα:** Το `output.html` περιέχει τώρα το ίδιο markup με το `input.html`, αλλά με όλους τους εξωτερικούς πόρους αντικατεστημένους από κενά streams, και με τις προτιμήσεις απόδοσης ενσωματωμένες στις επιλογές αποθήκευσης. + +## Πλήρες εκτελέσιμο παράδειγμα + +Συνδυάζοντας όλα τα βήματα παίρνετε ένα αυτόνομο πρόγραμμα που μπορείτε να αντιγράψετε, να επικολλήσετε και να εκτελέσετε. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Η εκτέλεση αυτού του προγράμματος παράγει το `output.html` στον τρέχοντα φάκελο. Ανοίξτε το αρχείο σε έναν περιηγητή για να επιβεβαιώσετε ότι το αρχικό markup φορτώνεται, αλλά τυχόν συνδεδεμένες εικόνες, γραμματοσειρές ή scripts λείπουν (αντικαταστάθηκαν από κενά streams). + +## Συχνές ερωτήσεις και ειδικές περιπτώσεις + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Τι κάνω αν χρειάζομαι τους αρχικούς πόρους αντί για κενά streams;** | Αντικαταστήστε το `MemoryResourceHandler` με έναν διαχειριστή που διαβάζει αρχεία από δίσκο ή τα κατεβάζει μέσω HTTP. | +| **Μπορώ να αποδώσω το HTML απευθείας σε PNG ή JPEG;** | Ναι. Χρησιμοποιήστε `ImageRenderer` με τις ίδιες `ImageRenderingOptions` και `TextOptions` που διαμορφώσατε, στη συνέχεια καλέστε `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Απαιτείται το `WebFontStyle.Bold`;** | Όχι. Εμφανίζεται ως παράδειγμα παράκαμψης στυλ γραμματοσειράς. Παραλείψτε το ή αλλάξτε το σε `WebFontStyle.Normal` αν δεν χρειάζεστε εξαναγκασμένο στυλ. | +| **Λειτουργεί αυτό σε .NET Core;** | Το Aspose.HTML υποστηρίζει .NET 5/6/7, οπότε ο ίδιος κώδικας εκτελείται σε έργα .NET Core. | +| **Πώς να διαχειριστώ μεγάλα αρχεία HTML αποδοτικά;** | Διαβάστε το αρχείο στο `HTMLDocument` χρησιμοποιώντας κατασκευαστή `FileStream` ώστε να αποφύγετε τη φόρτωση ολόκληρου του αρχείου στη μνήμη ταυτόχρονα. | + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **φορτώσετε έγγραφο HTML από αρχείο** χρησιμοποιώντας το Aspose.HTML, να διαμορφώσετε **επιλογές απόδοσης εικόνας** και **επιλογές απόδοσης κειμένου**, και να εφαρμόσετε έναν **προσαρμοσμένο διαχειριστή πόρων** για έλεγχο των εξωτερικών assets. Το πλήρες παράδειγμα δείχνει πώς να αποθηκεύσετε το επεξεργασμένο HTML σε memory stream, το οποίο μπορείτε να διατηρήσετε ή να μεταδώσετε όπως χρειάζεται. + +Στη συνέχεια, μπορείτε να εξερευνήσετε **μετατροπή HTML σε εικόνα** αντικαθιστώντας το `HtmlSaveOptions` με ένα `ImageRenderer`, ή να πειραματιστείτε με τις δυνατότητες **Aspose.HTML rendering** όπως CSS media queries, υποστήριξη SVG και εξαγωγή σε PDF. Αυτές οι επεκτάσεις σας επιτρέπουν να δημιουργήσετε πλούσιες pipelines επεξεργασίας εγγράφων εξ ολοκλήρου σε C#. + +Καλή κωδικοποίηση! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε επιπλέον δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στην υλοποίηση των δικών σας έργων. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/greek/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..bbc487a1a --- /dev/null +++ b/html/greek/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Μάθετε πώς να χρησιμοποιείτε το HtmlSaveOptions σε C# για να ελέγχετε + τα στυλ των web‑font και να αποθηκεύετε αρχεία HTML με το Aspose.HTML. Περιλαμβάνεται + πλήρες παράδειγμα κώδικα και πρακτικές συμβουλές. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: el +lastmod: 2026-09-10 +og_description: Πώς να χρησιμοποιήσετε το HtmlSaveOptions σε C# για να ενεργοποιήσετε + τα έντονα και πλάγια στυλ web‑font κατά την αποθήκευση HTML με το Aspose.HTML. Ακολουθήστε + το πλήρες παράδειγμα και τις συμβουλές βέλτιστων πρακτικών. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Πώς να χρησιμοποιήσετε το HtmlSaveOptions σε C# με το Aspose.HTML – βήμα‑βήμα + οδηγός +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Πώς να χρησιμοποιήσετε το HtmlSaveOptions σε C# με το Aspose.HTML +url: /el/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να χρησιμοποιήσετε το HtmlSaveOptions σε C# με το Aspose.HTML + +Εάν χρειάζεται να ελέγξετε πώς το Aspose.HTML αποθηκεύει ένα έγγραφο HTML, **η εκμάθηση της χρήσης του HtmlSaveOptions είναι ουσιώδης**. Αυτό το tutorial σας δείχνει βήμα‑βήμα πώς να χρησιμοποιήσετε το HtmlSaveOptions για να ενεργοποιήσετε τις έντονες και πλάγιες μορφές web‑font κατά την αποθήκευση ενός εγγράφου. + +Η βιβλιοθήκη Aspose HTML παρέχει ένα πλούσιο API για φόρτωση, επεξεργασία και εξαγωγή περιεχομένου HTML. Στο τέλος αυτού του οδηγού θα μπορείτε να: + +* Φορτώσετε ένα υπάρχον αρχείο HTML σε ένα `HTMLDocument`. +* Διαμορφώσετε το `HtmlSaveOptions` ώστε να εφαρμόζει συγκεκριμένες σημαίες `WebFontStyle`. +* Αποθηκεύσετε το τροποποιημένο έγγραφο σε νέα θέση ή σε ροή. +* Επεκτείνετε τη λύση για άλλες μορφές γραμματοσειρών, προσαρμοσμένο CSS και διαχείριση σφαλμάτων. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 ή νεότερη έκδοση εγκατεστημένη. +* Ένα έγκυρο license για **Aspose.HTML for .NET** (η δωρεάν δοκιμαστική έκδοση λειτουργεί για αυτό το παράδειγμα). +* Visual Studio 2022 (ή οποιοδήποτε IDE C#) για τη μεταγλώττιση και εκτέλεση του κώδικα. + +Δεν απαιτούνται πρόσθετα πακέτα NuGet πέρα από το `Aspose.HTML`. + +## Step 1: Set up the project and import namespaces + +Δημιουργήστε ένα νέο έργο **Console App** και προσθέστε το πακέτο NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Στη συνέχεια, στην κορυφή του `Program.cs`, εισάγετε τους απαιτούμενους χώρους ονομάτων: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Αυτοί οι χώροι ονομάτων εκθέτουν τους τύπους `HTMLDocument`, `HtmlSaveOptions` και `WebFontStyle` που θα χρησιμοποιήσετε σε όλο το tutorial. + +## Step 2: Load the source HTML document + +Η πρώτη ενέργεια είναι η ανάγνωση του HTML που θέλετε να επεξεργαστείτε. Αντικαταστήστε το `"YOUR_DIRECTORY/input.html"` με την πραγματική διαδρομή του αρχείου σας. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` αναλύει το markup, δημιουργεί ένα δέντρο DOM και το ετοιμάζει για επεξεργασία. Εάν το αρχείο δεν υπάρχει, θα ριχθεί εξαίρεση, επομένως ίσως θελήσετε να τυλίξετε αυτή την κλήση σε μπλοκ try‑catch για κώδικα παραγωγής. + +## Step 3: Create and configure HtmlSaveOptions + +`HtmlSaveOptions` σας επιτρέπει να ρυθμίσετε λεπτομερώς τη διαδικασία αποθήκευσης. Για να ενεργοποιήσετε τις έντονες και πλάγιες μορφές web‑font, συνδυάστε τις αντίστοιχες σημαίες `WebFontStyle` χρησιμοποιώντας τον τελεστή bitwise OR (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Γιατί να διαμορφώσετε το WebFontStyle; + +Κατά την εξαγωγή ενός εγγράφου HTML, το Aspose.HTML μπορεί να ενσωματώσει web fonts που ταιριάζουν με το αρχικό στυλ. Ορίζοντας το `WebFontStyle`, λέτε στον εξαγωγέα ποιες παραλλαγές γραμματοσειράς να συμπεριλάβει. Αυτό μειώνει το τελικό μέγεθος του αρχείου όταν χρειάζεστε μόνο συγκεκριμένα στυλ και εγγυάται ότι η παραγόμενη έξοδος ταιριάζει με την πηγή. + +#### Συνηθισμένες παραλλαγές + +| Επιθυμητό στυλ | Αντίστοιχη σημαία `WebFontStyle` | +|---------------|-----------------------------------| +| Κανονικό (regular) | `WebFontStyle.Regular` | +| Έντονο | `WebFontStyle.Bold` | +| Πλάγιο | `WebFontStyle.Italic` | +| Έντονο + Πλάγιο | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Όλες οι παραλλαγές | `WebFontStyle.All` | + +Μπορείτε να συνδυάσετε οποιονδήποτε συνδυασμό ταιριάζει στο σενάριό σας. + +## Step 4: Save the document with the configured options + +Τώρα γράψτε το έγγραφο σε νέο αρχείο. Η μέθοδος `Save` δέχεται τη διαδρομή προορισμού και το αντικείμενο `HtmlSaveOptions` που προετοιμάσατε. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Εάν χρειάζεται να γράψετε σε μνήμη (π.χ., για αποστολή του αρχείου μέσω HTTP), χρησιμοποιήστε την υπερφόρτωση που δέχεται αντικείμενο `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Step 5: Verify the result + +Ανοίξτε το `output.html` σε έναν περιηγητή ή ελέγξτε το αρχείο με έναν επεξεργαστή κειμένου. Θα πρέπει να δείτε ότι το τμήμα ` + + +
+ +"; +``` + +HTML एक सरल वेक्टर आकार को परिभाषित करता है जो रास्टराइज़ होने पर एंटीएलियासिंग से लाभान्वित होता है। + +## चरण 2: रेंडरिंग इंजन को इनिशियलाइज़ करें + +Aspose.HTML `HtmlRenderer` को `ImageRenderingOptions` के साथ उपयोग करता है। यही वह जगह है जहाँ आप अंतिम बिटमैप के लिए **एंटीएलियासिंग कैसे सक्षम करें**। + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**`UseAntialiasing = true` क्यों महत्वपूर्ण है**: रेंडरिंग इंजन वेक्टर आकार, टेक्स्ट और ग्रेडिएंट्स को सब‑पिक्सेल प्रिसीजन के साथ ड्रॉ करता है। एंटीएलियासिंग को सक्षम करने से रास्टराइज़र किनारे के पिक्सेल को उनके पड़ोसियों के साथ ब्लेंड करता है, जिससे `UseAntialiasing` को डिफ़ॉल्ट `false` पर छोड़ने पर दिखाई देने वाली जैग्ड लाइन्स समाप्त हो जाती हैं। यह **उच्च गुणवत्ता वाली इमेज रेंडरिंग** का मूल है। + +## चरण 3: HTML को इमेज में रेंडर करें + +विकल्पों को कॉन्फ़िगर करने के बाद, `RenderToImage` मेथड को कॉल करें। यह मेथड एक `Image` ऑब्जेक्ट लौटाता है जिसे आप डिस्क पर सहेज सकते हैं या सीधे रिस्पॉन्स में स्ट्रीम कर सकते हैं। + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +एक्ज़ीक्यूशन के बाद, `output.png` में एक स्मूद, एंटीएलियास्ड सर्कल होगा। परिणाम की पुष्टि करने के लिए फ़ाइल को किसी भी इमेज व्यूअर में खोलें। + +![Aspose.HTML रेंडरिंग में एंटीएलियासिंग कैसे सक्षम करें](/images/antialiasing-example.png){alt="Aspose.HTML रेंडरिंग में एंटीएलियासिंग कैसे सक्षम करें"} + +## चरण 4: उच्च‑गुणवत्ता आउटपुट की पुष्टि करें (HTML इमेज कैसे रेंडर करें) + +आप प्रोग्रामेटिकली इमेज के डायमेंशन और DPI की पुष्टि कर सकते हैं ताकि यह सुनिश्चित हो सके कि रेंडरिंग आपकी अपेक्षाओं को पूरा करती है। + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +सामान्य कंसोल आउटपुट: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +बढ़ा हुआ DPI और एंटीएलियासिंग मिलकर एक साफ़ परिणाम देते हैं, भले ही इमेज को स्केल अप किया जाए। यह **HTML इमेज कैसे रेंडर करें** को प्रोफेशनल क्वालिटी के साथ दर्शाता है। + +## सामान्य विविधताएँ और किनारे के केस + +| स्थिति | सिफ़ारिश किया गया बदलाव | +|-----------|-------------------| +| बहुत बड़े पेज रेंडर करना (जैसे, फुल‑स्क्रीन वेब ऐप्स) | मेमोरी उपयोग को नियंत्रित करने के लिए `ImageRenderingOptions.Width` / `Height` बढ़ाएँ या `Scale` सेट करें। | +| पारदर्शी बैकग्राउंड चाहिए | `imageOptions.BackgroundColor = Color.Transparent;` सेट करें। | +| छोटी फ़ाइल साइज के लिए JPEG टार्गेट करना | `ImageFormat` को `ImageFormat.Jpeg` बदलें और `Quality` (0‑100) को समायोजित करें। | +| GUI के बिना Linux कंटेनर में चलाना | Aspose.HTML पूरी तरह हेडलेस है; अतिरिक्त डिपेंडेंसीज़ की आवश्यकता नहीं है। | +| पिक्सेल‑परफेक्ट UI टेस्ट के लिए एंटीएलियासिंग डिसेबल करना आवश्यक है | `UseAntialiasing = false;` सेट करें – किनारे क्रिस्प होंगे लेकिन जैग्ड दिख सकते हैं। | + +### प्रो टिप + +जब इमेजों का बैच जेनरेट कर रहे हों, तो एक ही `HTMLDocument` इंस्टेंस को पुनः उपयोग करें और रेंडर के बीच केवल उसकी `Content` प्रॉपर्टी को बदलें। इससे समान HTML को बार‑बार पार्स करने का ओवरहेड कम होता है और थ्रूपुट में सुधार होता है। + +## पूर्ण स्रोत सूची + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप नई कंसोल‑ऐप प्रोजेक्ट में कॉपी करके तुरंत चला सकते हैं। + + + +## आगे क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स निकटतम संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर करने में मदद करती हैं। + +- [C# के साथ HTML को इमेज में रेंडर कैसे करें – पूर्ण गाइड](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML से इमेज ट्यूटोरियल – C# में HTML को PNG में रेंडर करें](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Aspose का उपयोग करके HTML को PNG में रेंडर कैसे करें – चरण‑दर‑चरण गाइड](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/hindi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..6f3f64522 --- /dev/null +++ b/html/hindi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTML के साथ HTML रेंडर करते समय हिन्टिंग सक्षम करके टेक्स्ट स्पष्टता + में सुधार करें। यह गाइड दिखाता है कि हिन्टिंग कैसे सक्षम करें और यह क्यों महत्वपूर्ण + है। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: hi +lastmod: 2026-09-10 +og_description: Aspose.HTML में टेक्स्ट की स्पष्टता को सुधारें, यह सीखकर कि हिन्टिंग + कैसे सक्षम करें। हर प्लेटफ़ॉर्म पर स्पष्ट टेक्स्ट पाने के लिए चरण‑दर‑चरण गाइड का + पालन करें। +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Aspose.HTML में टेक्स्ट स्पष्टता सुधारें – तेज़ रेंडरिंग के लिए हिन्टिंग + सक्षम करें +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Aspose.HTML में हिन्टिंग के साथ टेक्स्ट की स्पष्टता कैसे बढ़ाएँ +url: /hi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to improve text clarity in Aspose.HTML with hinting + +यदि आपको Aspose.HTML के साथ HTML रेंडर करते समय टेक्स्ट की स्पष्टता बढ़ानी है, तो यह गाइड एक पूर्ण समाधान दिखाता है। हिन्टिंग को सक्षम करके आपको तेज़ ग्लिफ़ मिलेंगे, विशेष रूप से गैर‑Windows प्लेटफ़ॉर्म पर जहाँ डिफ़ॉल्ट रेंडरिंग धुंधली दिख सकती है। + +इस ट्यूटोरियल में आप सीखेंगे कि हिन्टिंग को कैसे सक्षम करें, यह टेक्स्ट स्पष्टता के लिए क्यों महत्वपूर्ण है, और इस सेटिंग को एक सामान्य Aspose.HTML वर्कफ़्लो में कैसे एकीकृत करें। कोई बाहरी दस्तावेज़ीकरण आवश्यक नहीं है—नीचे दिए गए चरणों में सब कुछ शामिल है। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.7+ के साथ भी काम करता है) +* **Aspose.HTML for .NET** की लाइसेंस्ड कॉपी (टेस्टिंग के लिए फ्री ट्रायल चल सकता है) +* C# और Visual Studio या आपके पसंदीदा IDE का बुनियादी ज्ञान + +ये आवश्यकताएँ न्यूनतम हैं; वही तरीका कंसोल ऐप्स, ASP.NET Core सर्विसेज, या डेस्कटॉप एप्लिकेशन में भी काम करता है। + +## Why enabling hinting improves text clarity + +हिन्टिंग एक प्रक्रिया है जो प्रत्येक ग्लिफ़ की रूपरेखा को डिस्प्ले डिवाइस के पिक्सेल ग्रिड के साथ संरेखित करती है। हिन्टिंग के बिना, विशेष रूप से लो‑रिज़ॉल्यूशन या हाई‑DPI स्क्रीन पर, अक्षर धुंधले या असमान दिख सकते हैं। हिन्टिंग को सक्षम करने से रेंडरिंग इंजन स्वचालित रूप से ये समायोजन करता है, जिसके परिणामस्वरूप: + +* अक्षरों में समान स्ट्रोक मोटाई +* Linux, macOS, और पुराने Windows संस्करणों पर बेहतर पठनीयता +* PDFs, स्क्रीनशॉट, या ऑन‑स्क्रीन प्रीव्यू में पेशेवर लुक + +Aspose.HTML इस व्यवहार को **TextOptions.UseHinting** प्रॉपर्टी के माध्यम से एक्सपोज़ करता है, जिसका डिफ़ॉल्ट मान `false` है ताकि बैकवर्ड कंपैटिबिलिटी बनी रहे। + +## Step 1: Create a `TextOptions` instance + +पहला चरण **TextOptions** क्लास का एक इंस्टेंस बनाना है। यह ऑब्जेक्ट सभी टेक्स्ट‑संबंधित रेंडरिंग सेटिंग्स को समूहित करता है, जिससे इन्हें रेंडरिंग पाइपलाइन में पास करना आसान हो जाता है। + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +ऑब्जेक्ट बनाना अभी रेंडरिंग को नहीं बदलता; यह केवल बाद में सेट की जाने वाली विकल्पों के लिए एक कंटेनर तैयार करता है। + +## Step 2: Enable hinting to improve text clarity + +**UseHinting** प्रॉपर्टी को `true` सेट करें। यह एक ही लाइन सभी टेक्स्ट के लिए हिन्टिंग एल्गोरिद्म को सक्रिय कर देती है। + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +जब `UseHinting` `true` होता है, तो Aspose.HTML प्रत्येक ग्लिफ़ पर सब‑पिक्सेल समायोजन स्वचालित रूप से लागू करता है। प्रभाव सबसे अधिक उन फ़ॉन्ट्स में दिखता है जिनमें बारीक विवरण होते हैं, जैसे सेरिफ़ टाइपफ़ेस या छोटे आकार का टेक्स्ट। + +### Pro tip: Combine hinting with anti‑aliasing + +यदि आप और भी स्मूथ एज चाहते हैं, तो हिन्टिंग के साथ एंटी‑एलियासिंग भी सक्षम कर सकते हैं: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +दोनों सेटिंग्स मिलकर विभिन्न डिवाइसों पर सबसे बेहतर विज़ुअल फ़िडेलिटी प्रदान करती हैं। + +## Step 3: Attach `TextOptions` to the rendering process + +आपको कॉन्फ़िगर किए गए `TextOptions` को **HtmlRenderer** (या आप जो भी रेंडरिंग क्लास उपयोग कर रहे हैं) को पास करना होगा। नीचे एक न्यूनतम उदाहरण है जो HTML स्ट्रिंग लोड करता है, विकल्प लागू करता है, और आउटपुट को PNG फ़ाइल में लिखता है। + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**मुख्य लाइनों की व्याख्या** + +* `HTMLDocument` HTML मार्कअप को पार्स करता है। +* `ImageDevice` आउटपुट डाइमेंशन निर्धारित करता है (इस केस में 800 × 600 पिक्सेल)। +* `HtmlRenderer` वास्तविक रेंडरिंग करता है; `renderer.Options.TextOptions` को `textOptions` असाइन करने से हिन्टिंग लागू हो जाता है। +* `device.Save("output.png")` अंतिम इमेज को डिस्क पर लिखता है। + +इस कोड को चलाने पर `output.png` बनता है जहाँ हेडिंग और पैराग्राफ़ 96 dpi मॉनीटर पर भी स्पष्ट दिखते हैं। + +## Step 4: Verify the result + +जेनरेटेड इमेज को किसी भी व्यूअर में खोलें। इसे हिन्टिंग **बिना** (`UseHinting = false`) रेंडर की गई इमेज से तुलना करें। आपको दिखेगा: + +* अक्षरों “H”, “e”, “l”, “o” के किनारे अधिक तेज़ +* पैराग्राफ़ में स्ट्रोक वेट अधिक समान +* कैरेक्टर की तिरछी लाइनों पर घोस्टिंग कम + +यदि आपके स्क्रीन पर अंतर सूक्ष्म है, तो ज़ूम इन करें या इमेज प्रिंट करें; उच्च मैग्नीफ़िकेशन पर सुधार स्पष्ट दिखेगा। + +## Common variations and edge cases + +### Rendering to PDF instead of PNG + +यदि आपका लक्ष्य PDF है, तो `ImageDevice` को `PdfDevice` से बदलें। वही `TextOptions` ऑब्जेक्ट बिना किसी बदलाव के काम करता है: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### High‑DPI displays + +स्क्रीन पर स्केलिंग फैक्टर (जैसे 150 % या 200 %) होने पर, विज़ुअल क्वालिटी बनाए रखने के लिए डिवाइस साइज को अनुपातिक रूप से बढ़ा सकते हैं। हिन्टिंग अभी भी लागू रहेगा और परिणाम तेज़ रहेगा। + +### Linux or macOS environments + +Linux पर डिफ़ॉल्ट रेंडरिंग इंजन अक्सर एक बिटमैप फ़ॉन्ट रेंडरर पर फ़ॉल्बैक करता है जो हिन्टिंग को अनदेखा करता है, जब तक आप इसे स्पष्ट रूप से सक्षम न करें। `UseHinting = true` फ़्लैग इंजन को TrueType हिन्टिंग लागू करने के लिए मजबूर करता है, जिससे उन प्लेटफ़ॉर्म पर आम “blurry” लुक समाप्त हो जाता है। + +### Fonts without hinting tables + +कुछ आधुनिक OpenType फ़ॉन्ट्स में हिन्टिंग डेटा नहीं होता। ऐसे मामलों में, Aspose.HTML ऑटो‑हिन्टिंग पर फ़ॉल्बैक करता है, जो बिना हिन्टिंग के मुकाबले भी स्पष्टता में सुधार करता है। + +## Step 5: Best practices for production code + +1. **एक ही `TextOptions` इंस्टेंस बनाएं** और रेंडरिंग कॉल्स में पुन: उपयोग करें। इससे ऑब्जेक्ट अलोकेशन ओवरहेड कम होता है। +2. **हिन्टिंग को एंटी‑एलियासिंग** (`UseAntiAliasing = true`) के साथ मिलाएँ ताकि सबसे स्मूथ आउटपुट मिले। +3. **टार्गेट प्लेटफ़ॉर्म पर टेस्ट करें** (Windows, Linux, macOS) क्योंकि विज़ुअल अंतर अलग‑अलग हो सकते हैं। +4. **प्रोडक्शन लॉग्स में रेंडरिंग कॉन्फ़िगरेशन लॉग करें**; यह अप्रत्याशित विज़ुअल आर्टिफैक्ट्स को ट्रबलशूट करने में मदद करता है। +5. **Aspose.HTML को अपडेट रखें**। नए वर्ज़न अतिरिक्त टेक्स्ट‑रेंडरिंग सुधार ला सकते हैं। + +## Full working example + +नीचे एक स्व-निहित कंसोल एप्लिकेशन है जो सभी चर्चा किए गए बिंदुओं को दर्शाता है। कोड को नई .NET कंसोल प्रोजेक्ट में कॉपी करें, Aspose.HTML NuGet पैकेज जोड़ें, और चलाएँ। + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**अपेक्षित आउटपुट** + +प्रोग्राम चलाने पर `hinted_output.png` बनता है। हेडिंग “Hinting in action” और पैराग्राफ़ टेक्स्ट तेज़, समान स्ट्रोक विड्थ और बिना धुंधले किनारों के दिखते हैं। यदि आप `UseHinting = true` को कमेंट कर देते हैं, तो वही इमेज थोड़ा धुंधला दिखेगा, जिससे सेटिंग के लाभ स्पष्ट होते हैं। + +## Conclusion + +अब आप जानते हैं कि Aspose.HTML में हिन्टिंग को सक्षम करके टेक्स्ट की स्पष्टता कैसे बढ़ाएँ। प्रक्रिया में `TextOptions` ऑब्जेक्ट बनाना, `UseHinting` (और वैकल्पिक `UseAntiAliasing`) सेट करना, और विकल्पों को रेंडरर में अटैच करना शामिल है। यह तरीका PNG, JPEG, PDF और अन्य आउटपुट फ़ॉर्मेट्स के लिए काम करता है, और Windows, Linux, तथा macOS पर लगातार विज़ुअल क्वालिटी देता है। + +आगे आप **कस्टम फ़ॉन्ट्स के लिए हिन्टिंग कैसे सक्षम करें**, **रेंडरिंग परफ़ॉर्मेंस ऑप्टिमाइज़ करना**, या **Aspose.HTML में CSS के माध्यम से टेक्स्ट अपीयरेंस नियंत्रित करना** जैसे विषयों का अन्वेषण कर सकते हैं। विभिन्न फ़ॉन्ट्स और DPI सेटिंग्स के साथ प्रयोग करें ताकि हिन्टिंग प्रत्येक परिदृश्य में कैसे अनुकूलित होता है, देख सकें। + +Happy coding, and enjoy sharper text in every Aspose.HTML rendering! + +## What Should You Learn Next? + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/hindi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..e104952cc --- /dev/null +++ b/html/hindi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.Html का उपयोग करके C# में HTML को कैसे रेंडर करें। HTML और CSS + को प्रोसेस करना, HTML को सहेजना, HTML को स्ट्रीम में बदलना, और .NET में HTML दस्तावेज़ + लोड करना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: hi +lastmod: 2026-09-10 +og_description: Aspose.Html के साथ C# में HTML को रेंडर कैसे करें। यह गाइड आपको दिखाता + है कि HTML CSS को कैसे प्रोसेस करें, HTML को सहेजें, HTML को स्ट्रीम में बदलें, + और HTML दस्तावेज़ को कुशलतापूर्वक लोड करें। +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Aspose.Html के साथ C# में HTML रेंडर करें – चरण-दर-चरण ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Aspose.Html के साथ C# में HTML कैसे रेंडर करें – पूर्ण गाइड +url: /hi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में Aspose.Html के साथ HTML कैसे रेंडर करें – पूर्ण गाइड + +यदि आपको .NET एप्लिकेशन के भीतर **how to render html** की आवश्यकता है, तो यह ट्यूटोरियल आपको पूरा वर्कफ़्लो दिखाता है। आप देखेंगे कि HTML CSS को कैसे प्रोसेस करें, HTML को कैसे सहेजें, HTML को स्ट्रीम में कैसे कनवर्ट करें, और Aspose.Html लाइब्रेरी का उपयोग करके C# में HTML दस्तावेज़ को कैसे लोड करें। + +सर्वर‑साइड संदर्भ में HTML रेंडर करना अक्सर केवल फ़ाइल लोड करने से अधिक की आवश्यकता रखता है—आपको इमेज और स्टाइल शीट जैसी लिंक्ड रिसोर्सेज़ को भी संभालना पड़ता है। यह गाइड आपको हर चरण में ले जाता है, दस्तावेज़ को लोड करने से लेकर रिसोर्स हैंडलिंग को कस्टमाइज़ करने और अंत में रेंडर किए गए आउटपुट को मेमोरी स्ट्रीम के रूप में निकालने तक। + +लेख के अंत तक आप सक्षम होंगे: + +* डिस्क या URL से HTML दस्तावेज़ लोड करें (`load html document c#`). +* एक कस्टम `ResourceHandler` प्रदान करें ताकि **process html css** तुरंत किया जा सके. +* रेंडर किया गया HTML सहेजें और आगे की प्रोसेसिंग के लिए **convert html to stream** करें. +* **how to save html** तकनीकों का उपयोग करके परिणाम को स्थायी बनाएं जो किसी भी .NET वातावरण में काम करती हैं. + +## आवश्यकताएँ + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* .NET 6.0 SDK या बाद का संस्करण स्थापित हो. +* Visual Studio 2022 (या कोई भी IDE जो .NET 6 को सपोर्ट करता हो). +* **Aspose.Html** का NuGet रेफ़रेंस (`dotnet add package Aspose.Html`). +* `input.html` फ़ाइल को ज्ञात फ़ोल्डर में रखें (उदाहरण में `YOUR_DIRECTORY/input.html` उपयोग किया गया है). + +कोई अतिरिक्त थर्ड‑पार्टी लाइब्रेरीज़ आवश्यक नहीं हैं. + +## HTML कैसे रेंडर करें – चरण‑दर‑चरण गाइड + +### चरण 1: C# में HTML दस्तावेज़ लोड करें + +पहला ऑपरेशन `HTMLDocument` इंस्टेंस बनाना है जो स्रोत मार्कअप को दर्शाता है। यह **how to render html** का मूल है Aspose.Html के साथ. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*यह क्यों महत्वपूर्ण है:* दस्तावेज़ को लोड करने से मार्कअप पार्स होता है और एक आंतरिक DOM बनता है, जिसे रेंडरर बाद में CSS लागू करने और रिसोर्सेज़ को रिज़ॉल्व करने के लिए उपयोग करता है. + +### चरण 2: एक कस्टम रिसोर्स हैंडलर बनाएं ताकि **process html css** किया जा सके + +जब रेंडरर बाहरी रिसोर्सेज़ (इमेज, CSS फ़ाइलें, फ़ॉन्ट) का सामना करता है, तो वह `ResourceHandler` से स्ट्रीम मांगता है। एक कस्टम हैंडलर प्रदान करके आप प्रत्येक रिसोर्स को कैसे फ़ेच, ट्रांसफ़ॉर्म या स्टब किया जाए, इस पर पूर्ण नियंत्रण प्राप्त करते हैं. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*यह क्यों महत्वपूर्ण है:* हैंडलर वह जगह है जहाँ आप **process html css** लॉजिक लागू करते हैं—जैसे इनलाइन CSS, इमेज को प्लेसहोल्डर से बदलना, या सुरक्षा फ़िल्टर लागू करना. + +### चरण 3: कस्टम हैंडलर का उपयोग करने के लिए `HtmlSaveOptions` कॉन्फ़िगर करें + +`HtmlSaveOptions` रेंडरर को बताता है कि आउटपुट कैसे लिखना है। आपने जो `ResourceHandler` अभी बनाया है, उसे असाइन करें ताकि रेंडरर हर बाहरी रेफ़रेंस के लिए इसे कॉल करे. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +`EmbedCss` और `EmbedImages` सेट करना उपयोगी है जब आप बाद में **convert html to stream** करेंगे और एक स्व-निहित परिणाम चाहिए. + +### चरण 4: दस्तावेज़ सहेजें और **convert html to stream** करें + +अब आप दस्तावेज़ को रेंडर कर सकते हैं और परिणाम को `MemoryStream` में कैप्चर कर सकते हैं। यह **how to save html** का मूल है जब आप आउटपुट को फ़ाइल की बजाय मेमोरी में चाहते हैं. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*यह क्यों महत्वपूर्ण है:* `MemoryStream` आपको रेंडर किए गए HTML का लचीला, बाइनरी प्रतिनिधित्व देता है, जिसे आप फ़ाइल सिस्टम को छुए बिना स्टोर, ट्रांसमिट या आगे मैनिपुलेट कर सकते हैं. + +## सामान्य किनारी मामलों को संभालना + +| स्थिति | सुझाया गया तरीका | +|-----------|----------------------| +| **Missing CSS or image files** | `MyResourceHandler.HandleResource` में, खोलने से पहले `File.Exists` जांचें। यदि फ़ाइल मौजूद नहीं है तो खाली `MemoryStream` या प्लेसहोल्डर इमेज लौटाएँ। | +| **Large HTML files (>10 MB)** | `MemoryStream` का डिफ़ॉल्ट बफ़र साइज बढ़ाएँ (`new MemoryStream(capacity)`) ताकि बार‑बार रीअलोकेशन से बचा जा सके। | +| **Relative URLs with `..` segments** | फ़ाइल सिस्टम तक पहुँचने से पहले `new Uri(baseUri, info.Uri)` का उपयोग करके पूर्ण पाथ रिज़ॉल्व करें। | +| **Thread‑safety in ASP.NET** | प्रत्येक अनुरोध के लिए नया `HTMLDocument` और `MyResourceHandler` इंस्टैंसिएट करें; थ्रेड्स के बीच इंस्टैंस साझा न करें। | +| **Encoding issues** | `saveOpts.Encoding = Encoding.UTF8` सेट करें ताकि UTF‑8 आउटपुट सुनिश्चित हो, विशेषकर जब स्रोत में गैर‑ASCII कैरेक्टर हों। | + +## प्रो टिप: कई दस्तावेज़ों के लिए एक ही हैंडलर को पुनः उपयोग करें + +यदि आप बैच में कई HTML फ़ाइलें प्रोसेस करते हैं, तो आप एक ही `MyResourceHandler` इंस्टेंस रख सकते हैं और केवल उसकी आंतरिक लुकअप टेबल बदल सकते हैं। इससे ऑब्जेक्ट अलोकेशन ओवरहेड कम होता है और **process html css** चरण तेज़ हो जाता है. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## पूर्ण, चलाने योग्य उदाहरण + +नीचे एक पूर्ण प्रोग्राम दिया गया है जिसे आप कंसोल एप्लिकेशन में पेस्ट कर सकते हैं। यह **how to render html**, **process html css**, **how to save html**, **convert html to stream**, और **load html document c#** को एक ही प्रवाह में प्रदर्शित करता है. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**अपेक्षित आउटपुट** (संक्षिप्त रूप में): + + + +## अब आप आगे क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट-संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक रिसोर्स में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ का अन्वेषण करने में मदद करती हैं। + +- [Aspose.Html के साथ HTML कैसे सहेजें – पूर्ण C# गाइड](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [C# में Aspose का उपयोग करके HTML को PNG में रेंडर करें](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Aspose का उपयोग करके HTML को PNG में रेंडर करें – चरण‑दर‑चरण गाइड](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/net/working-with-html-documents/_index.md b/html/hindi/net/working-with-html-documents/_index.md index 5a550d2e2..7d8b88212 100644 --- a/html/hindi/net/working-with-html-documents/_index.md +++ b/html/hindi/net/working-with-html-documents/_index.md @@ -36,11 +36,14 @@ HTML दस्तावेज़ वेब की रीढ़ हैं, और अब, आइए अपने कौशल को अगले स्तर पर ले जाएं। HTML दस्तावेज़ों को संपादित करना वेब डेवलपर्स के लिए एक सामान्य कार्य है, और Aspose.HTML इस प्रक्रिया को काफी सरल बनाता है। इस अनुभाग में, हम दस्तावेज़ निर्माण, हेरफेर और स्टाइलिंग को कवर करेंगे। आप जानेंगे कि अपनी वेब सामग्री की उपस्थिति और कार्यक्षमता को कैसे बढ़ाया जाए, जिससे यह आकर्षक और उपयोगकर्ता के अनुकूल बन सके। +### [Aspose.HTML के साथ C# में फ़ाइल से HTML दस्तावेज़ लोड करना](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [C# में HTML को सहेजना – कस्टम रिसोर्स हैंडलर का उपयोग करके पूर्ण गाइड](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Aspose.Html के साथ HTML को सहेजना – पूर्ण C# गाइड](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [CSS और C# के साथ हेडिंग को बोल्ड कैसे बनाएं – पूर्ण चरण-दर-चरण गाइड](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [C# में HTML को सहेजना – कस्टम रिसोर्स हैंडलर्स और ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [C# में HTML को ज़िप करना – पूर्ण चरण‑दर‑चरण गाइड](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [C# में Aspose.HTML के साथ HtmlSaveOptions का उपयोग कैसे करें](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/hindi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/hindi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..f77fe017f --- /dev/null +++ b/html/hindi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTML का उपयोग करके C# में फ़ाइल से HTML दस्तावेज़ लोड करना सीखें। + इसमें इमेज रेंडरिंग विकल्प, टेक्स्ट रेंडरिंग विकल्प, और एक कस्टम रिसोर्स हैंडलर + शामिल हैं। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: hi +lastmod: 2026-09-10 +og_description: Aspose.HTML का उपयोग करके C# में फ़ाइल से HTML दस्तावेज़ लोड करें। + यह गाइड रेंडरिंग विकल्पों, एक कस्टम रिसोर्स हैंडलर और पूर्ण कोड को कवर करता है जिसे + आप आज ही चला सकते हैं। +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Aspose.HTML के साथ फ़ाइल से HTML दस्तावेज़ लोड करें – चरण‑दर‑चरण C# गाइड +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Aspose.HTML का उपयोग करके C# में फ़ाइल से HTML दस्तावेज़ कैसे लोड करें +url: /hi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# फ़ाइल से HTML दस्तावेज़ को Aspose.HTML के साथ C# में लोड कैसे करें + +यदि आपको **फ़ाइल से HTML दस्तावेज़ लोड** करना है और उसकी रेंडरिंग को नियंत्रित करना है, तो यह ट्यूटोरियल आपको एक पूर्ण, तैयार‑चलाने योग्य समाधान दिखाता है। आप देखेंगे कि इमेज रेंडरिंग कैसे कॉन्फ़िगर करें, टेक्स्ट हिन्टिंग सक्षम करें, और एक कस्टम रिसोर्स हैंडलर प्रदान करें जो बाहरी एसेट्स के लिए खाली स्ट्रीम लौटाता है। गाइड के अंत तक आप प्रोसेस किए गए HTML को मेमोरी स्ट्रीम या अपनी पसंद के किसी अन्य गंतव्य में सहेज सकते हैं। + +यह उदाहरण Aspose.HTML for .NET का उपयोग करता है, एक लाइब्रेरी जो ब्राउज़र इंजन के बिना HTML, CSS, और SVG प्रोसेसिंग को सरल बनाती है। कोई बाहरी टूल्स आवश्यक नहीं हैं, और कोड .NET 6 या बाद के संस्करणों के साथ काम करता है। शुरू करने से पहले सुनिश्चित करें कि आपके पास Aspose.HTML NuGet पैकेज स्थापित है। + +## आवश्यकताएँ + +- .NET 6 SDK (या कोई भी .NET संस्करण जो Aspose.HTML द्वारा समर्थित है) +- Visual Studio 2022 या कोई अन्य C# IDE +- Aspose.HTML for .NET NuGet पैकेज (`Install-Package Aspose.HTML`) +- `input.html` नाम की एक HTML फ़ाइल को ऐसे फ़ोल्डर में रखें जिसे आप कोड से रेफ़र कर सकें + +## चरण 1: फ़ाइल से HTML दस्तावेज़ लोड करें + +पहला कार्य यह है कि एक `HTMLDocument` इंस्टेंस बनाएं जो स्रोत फ़ाइल को पढ़ता है। यह ऑब्जेक्ट पूरे DOM ट्री का प्रतिनिधित्व करता है और आगे की हेरफेर के लिए मेथड्स प्रदान करता है। + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**यह क्यों महत्वपूर्ण है:** फ़ाइल को `HTMLDocument` में लोड करने से आपको दस्तावेज़ की संरचना, स्टाइल और रिसोर्सेज़ तक पूरी पहुंच मिलती है, जिन्हें आप बाद में रेंडर या ट्रांसफ़ॉर्म कर सकते हैं। + +## चरण 2: इमेज रेंडरिंग विकल्प सेट करें (Aspose.HTML रेंडरिंग) + +यदि आप बाद में पेज को रास्टराइज़ करने की योजना बनाते हैं, तो इमेज रेंडरिंग को कॉन्फ़िगर करने से विज़ुअल क्वालिटी बेहतर होती है। एंटीएलियासिंग किनारों को स्मूद करता है और जॅग्ड आर्टिफैक्ट्स को कम करता है। + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**टिप:** `UseAntialiasing` वेक्टर ग्राफ़िक्स और टेक्स्ट के लिए विशेष रूप से उपयोगी है जो PNG या JPEG में रास्टराइज़ किए जाएंगे। + +## चरण 3: टेक्स्ट हिन्टिंग सक्षम करें (टेक्स्ट रेंडरिंग विकल्प) + +टेक्स्ट हिन्टिंग यह निर्धारित करता है कि ग्लिफ़्स पिक्सेल ग्रिड के साथ कैसे संरेखित होते हैं, जिससे छोटे आकार के फ़ॉन्ट्स अधिक तेज़ दिख सकते हैं। + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**यह क्यों महत्वपूर्ण है:** जब आप बाद में HTML को इमेज में एक्सपोर्ट करते हैं, तो हिन्टिंग धुंधले अक्षरों को कम करता है और विभिन्न प्लेटफ़ॉर्म पर टाइपोग्राफी को सुसंगत बनाता है। + +## चरण 4: एक कस्टम रिसोर्स हैंडलर बनाएं (कस्टम रिसोर्स हैंडलर) + +HTML में फ़ॉन्ट्स, इमेजेज़ या स्क्रिप्ट्स जैसे बाहरी रिसोर्सेज़ का संदर्भ हो सकता है। एक `ResourceHandler` आपको यह नियंत्रित करने देता है कि उन रिसोर्सेज़ को कैसे प्राप्त किया जाए। इस उदाहरण में हैंडलर हर अनुरोध के लिए एक खाली `MemoryStream` लौटाता है, जिससे बाहरी एसेट्स प्रभावी रूप से हटाए जाते हैं। + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**कब उपयोग करें:** यह पैटर्न सुरक्षा‑सीमित वातावरण, यूनिट टेस्टिंग, या जब आपको केवल मार्कअप की आवश्यकता हो और बाहरी फ़ाइलें न चाहिए, तब उपयोगी है। + +## चरण 5: HTML सेव ऑप्शन्स को असेंबल करें (HTML से इमेज कन्वर्ज़न) + +सभी भाग—रिसोर्स हैंडलर, रेंडरिंग सेटिंग्स, और फ़ॉन्ट स्टाइल—को एक `HtmlSaveOptions` ऑब्जेक्ट में जोड़ा जाता है। यह ऑब्जेक्ट Aspose.HTML को बताता है कि दस्तावेज़ को कैसे सीरियलाइज़ किया जाए। + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**व्याख्या:** `WebFontStyle` वेब फ़ॉन्ट्स के लिए एक विशेष स्टाइल (जैसे, बोल्ड) को मजबूर कर सकता है जो अनुपलब्ध हो सकते हैं। हमने पहले कॉन्फ़िगर किए हुए `ImageRenderingOptions` और `TextOptions` यहाँ इंजेक्ट किए गए हैं, जिससे वे बाद में होने वाली किसी भी रास्टराइज़ेशन को प्रभावित करते हैं। + +## चरण 6: दस्तावेज़ को मेमोरी स्ट्रीम में सहेजें (पूर्ण समाधान) + +अंत में, प्रोसेस किए गए HTML को एक `MemoryStream` में लिखें। यहाँ से आप स्ट्रीम को फ़ाइल में लिख सकते हैं, नेटवर्क पर भेज सकते हैं, या किसी अन्य API को पास कर सकते हैं। + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**परिणाम:** `output.html` अब `input.html` के समान मार्कअप रखता है, लेकिन सभी बाहरी रिसोर्सेज़ को खाली स्ट्रीम से बदल दिया गया है, और रेंडरिंग प्रेफ़रेंसेज़ को सेव ऑप्शन्स में एम्बेड किया गया है। + +## पूर्ण चलाने योग्य उदाहरण + +सभी चरणों को मिलाकर आपको एक स्व-निहित प्रोग्राम मिलता है जिसे आप कॉपी, पेस्ट और चलाया जा सकता है। + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +इस प्रोग्राम को चलाने से वर्तमान डायरेक्टरी में `output.html` बनता है। फ़ाइल को ब्राउज़र में खोलें यह पुष्टि करने के लिए कि मूल मार्कअप लोड होता है, लेकिन कोई भी लिंक्ड इमेजेज़, फ़ॉन्ट्स, या स्क्रिप्ट्स अनुपस्थित हैं (वे खाली स्ट्रीम से बदल दिए गए थे)। + +## सामान्य प्रश्न और किनारे के मामलों + +| प्रश्न | उत्तर | +|----------|--------| +| **यदि मुझे खाली स्ट्रीम्स के बजाय मूल रिसोर्सेज़ चाहिए तो क्या करें?** | `MemoryResourceHandler` को ऐसे हैंडलर से बदलें जो डिस्क से फ़ाइलें पढ़ता हो या HTTP के माध्यम से डाउनलोड करता हो। | +| **क्या मैं HTML को सीधे PNG या JPEG में रेंडर कर सकता हूँ?** | हाँ। `ImageRenderer` को उसी `ImageRenderingOptions` और `TextOptions` के साथ उपयोग करें जो आपने कॉन्फ़िगर किए थे, फिर `renderer.Render(page, outputStream, ImageFormat.Png)` को कॉल करें। | +| **क्या `WebFontStyle.Bold` आवश्यक है?** | नहीं। यह फ़ॉन्ट स्टाइल को ओवरराइड करने के उदाहरण के रूप में दिखाया गया है। यदि आपको मजबूरन स्टाइल की आवश्यकता नहीं है तो इसे छोड़ दें या `WebFontStyle.Normal` में बदल दें। | +| **क्या यह .NET Core पर काम करता है?** | Aspose.HTML .NET 5/6/7 को सपोर्ट करता है, इसलिए वही कोड .NET Core प्रोजेक्ट्स में चलता है। | +| **मैं बड़े HTML फ़ाइलों को प्रभावी ढंग से कैसे संभालूँ?** | `HTMLDocument` में फ़ाइल को `FileStream` कंस्ट्रक्टर का उपयोग करके स्ट्रीम करें ताकि पूरी फ़ाइल को एक बार में मेमोरी में लोड करने से बचा जा सके। | + +## निष्कर्ष + +अब आप जानते हैं कि Aspose.HTML का उपयोग करके **फ़ाइल से HTML दस्तावेज़ लोड** कैसे करें, **इमेज रेंडरिंग विकल्प** और **टेक्स्ट रेंडरिंग विकल्प** कैसे कॉन्फ़िगर करें, और बाहरी एसेट्स को नियंत्रित करने के लिए **कस्टम रिसोर्स हैंडलर** कैसे लागू करें। पूर्ण उदाहरण प्रोसेस किए गए HTML को मेमोरी स्ट्रीम में सहेजने को दर्शाता है, जिसे आप आवश्यकता अनुसार स्थायी या ट्रांसमिट कर सकते हैं। + +अगले चरण में, आप `HtmlSaveOptions` को `ImageRenderer` से बदलकर **HTML से इमेज कन्वर्ज़न** का अन्वेषण कर सकते हैं, या **Aspose.HTML रेंडरिंग** सुविधाओं जैसे CSS मीडिया क्वेरीज़, SVG सपोर्ट, और PDF एक्सपोर्ट के साथ प्रयोग कर सकते हैं। ये एक्सटेंशन आपको पूरी तरह से C# में समृद्ध दस्तावेज़‑प्रोसेसिंग पाइपलाइन बनाने की अनुमति देते हैं। + +कोडिंग का आनंद लें! + +## अब आप आगे क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API सुविधाओं में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [Aspose.HTML के साथ .NET में रिमोट सर्वर से HTML लोड करना](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Aspose.HTML के साथ .NET में URL से HTML लोड करना](/html/english/net/html-document-manipulation/load-html-using-url/) +- [C# में HTML सहेजना – कस्टम रिसोर्स हैंडलर का उपयोग करके पूर्ण गाइड](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/hindi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..e5908c177 --- /dev/null +++ b/html/hindi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,315 @@ +--- +category: general +date: 2026-09-10 +description: C# में HtmlSaveOptions का उपयोग करके वेब‑फ़ॉन्ट शैलियों को नियंत्रित + करना और Aspose.HTML के साथ HTML फ़ाइलें सहेजना सीखें। पूर्ण कोड उदाहरण और व्यावहारिक + टिप्स शामिल हैं। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: hi +lastmod: 2026-09-10 +og_description: Aspose.HTML के साथ HTML सहेजते समय बोल्ड और इटैलिक वेब‑फ़ॉन्ट स्टाइल + को सक्षम करने के लिए C# में HtmlSaveOptions का उपयोग कैसे करें। पूर्ण उदाहरण और + सर्वोत्तम अभ्यास टिप्स का पालन करें। +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Aspose.HTML के साथ C# में HtmlSaveOptions का उपयोग कैसे करें – चरण‑दर‑चरण + मार्गदर्शिका +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Aspose.HTML के साथ C# में HtmlSaveOptions का उपयोग कैसे करें +url: /hi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to use HtmlSaveOptions in C# with Aspose.HTML + +यदि आपको Aspose.HTML द्वारा HTML दस्तावेज़ को सहेजने के तरीके को नियंत्रित करने की आवश्यकता है, तो **HtmlSaveOptions का उपयोग कैसे करें सीखना आवश्यक है**। यह ट्यूटोरियल आपको चरण‑बद्ध तरीके से दिखाता है कि HtmlSaveOptions का उपयोग करके दस्तावेज़ को सहेजते समय बोल्ड और इटैलिक वेब‑फ़ॉन्ट स्टाइल्स को कैसे सक्षम किया जाए। + +Aspose HTML लाइब्रेरी HTML सामग्री को लोड, संशोधित और निर्यात करने के लिए एक समृद्ध API प्रदान करती है। इस गाइड के अंत तक आप सक्षम होंगे: + +* मौजूदा HTML फ़ाइल को `HTMLDocument` में लोड करना। +* विशिष्ट `WebFontStyle` फ़्लैग्स लागू करने के लिए `HtmlSaveOptions` को कॉन्फ़िगर करना। +* संशोधित दस्तावेज़ को नई लोकेशन या स्ट्रीम में सहेजना। +* समाधान को अन्य फ़ॉन्ट स्टाइल्स, कस्टम CSS, और एरर हैंडलिंग के लिए विस्तारित करना। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* .NET 6.0 या बाद का संस्करण स्थापित हो। +* **Aspose.HTML for .NET** का वैध लाइसेंस (इस उदाहरण के लिए फ्री ट्रायल काम करेगा)। +* Visual Studio 2022 (या कोई भी C# IDE) कोड को कंपाइल और चलाने के लिए। + +`Aspose.HTML` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है। + +## Step 1: Set up the project and import namespaces + +एक नया **Console App** प्रोजेक्ट बनाएं और Aspose.HTML NuGet पैकेज जोड़ें: + +```bash +dotnet add package Aspose.HTML +``` + +फिर, `Program.cs` के शीर्ष पर आवश्यक नेमस्पेसेज़ इम्पोर्ट करें: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +ये नेमस्पेसेज़ `HTMLDocument`, `HtmlSaveOptions`, और `WebFontStyle` टाइप्स को उजागर करते हैं जिन्हें आप पूरे ट्यूटोरियल में उपयोग करेंगे। + +## Step 2: Load the source HTML document + +पहला कार्य वह HTML पढ़ना है जिसे आप प्रोसेस करना चाहते हैं। `"YOUR_DIRECTORY/input.html"` को अपनी फ़ाइल के वास्तविक पथ से बदलें। + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` मार्कअप को पार्स करता है, DOM ट्री बनाता है, और उसे संशोधन के लिए तैयार करता है। यदि फ़ाइल मौजूद नहीं है, तो एक एक्सेप्शन थ्रो होगा, इसलिए प्रोडक्शन कोड में आप इसे try‑catch ब्लॉक में रैप करना चाहेंगे। + +## Step 3: Create and configure HtmlSaveOptions + +`HtmlSaveOptions` आपको सहेजने की प्रक्रिया को बारीकी से ट्यून करने देता है। बोल्ड और इटैलिक वेब‑फ़ॉन्ट स्टाइल्स को सक्षम करने के लिए, संबंधित `WebFontStyle` फ़्लैग्स को बिटवाइज़ OR ऑपरेटर (`|`) से संयोजित करें। + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Why configure WebFontStyle? + +जब आप एक HTML दस्तावेज़ निर्यात करते हैं, तो Aspose.HTML मूल स्टाइलिंग से मेल खाने वाले वेब फ़ॉन्ट्स को एम्बेड कर सकता है। `WebFontStyle` सेट करके आप निर्यातकर्ता को बताते हैं कि कौन से फ़ॉन्ट वैरिएंट्स शामिल करने हैं। यह केवल आवश्यक स्टाइल्स होने पर अंतिम फ़ाइल आकार को घटाता है और सुनिश्चित करता है कि रेंडर किया गया आउटपुट स्रोत से मेल खाता है। + +#### Common variations + +| Desired style | Corresponding `WebFontStyle` flag | +|---------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +आप अपनी स्थिति के अनुसार कोई भी संयोजन चुन सकते हैं। + +## Step 4: Save the document with the configured options + +अब दस्तावेज़ को नई फ़ाइल में लिखें। `Save` मेथड लक्ष्य पथ और तैयार किए गए `HtmlSaveOptions` इंस्टेंस को स्वीकार करता है। + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +यदि आपको मेमोरी स्ट्रीम में लिखना है (उदाहरण के लिए, फ़ाइल को HTTP के माध्यम से भेजने के लिए), तो उस ओवरलोड का उपयोग करें जो `Stream` ऑब्जेक्ट को स्वीकार करता है: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Step 5: Verify the result + +`output.html` को ब्राउज़र में खोलें या टेक्स्ट एडिटर से फ़ाइल की जाँच करें। आपको ` + + +
+ +"; +``` + +此 HTML 定義了一個簡單的向量形狀,於光柵化時可受惠於抗鋸齒。 + +## 步驟 2:初始化渲染引擎 + +Aspose.HTML 使用 `HtmlRenderer` 搭配 `ImageRenderingOptions`。此處即是您 **how to enable antialiasing** 最終位圖的設定位置。 + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**為何 `UseAntialiasing = true` 重要**:渲染引擎以子像素精度繪製向量形狀、文字與漸層。啟用抗鋸齒會指示光柵化器將邊緣像素與相鄰像素混合,消除在 `UseAntialiasing` 保持預設 `false` 時出現的鋸齒線。這正是 **high quality image rendering** 的核心。 + +## 步驟 3:將 HTML 渲染為圖像 + +設定完成後,呼叫 `RenderToImage` 方法。此方法會回傳一個 `Image` 物件,您可以將其儲存至磁碟或直接串流回應。 + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +執行完畢後,`output.png` 內含一個平滑、已抗鋸齒的圓形。使用任何圖像檢視器開啟檔案即可驗證結果。 + +![在 Aspose.HTML 渲染中啟用抗鋸齒的示例](/images/antialiasing-example.png){alt="在 Aspose.HTML 渲染中啟用抗鋸齒的示例"} + +## 步驟 4:驗證高品質輸出(how to render html image) + +您可以以程式方式確認圖像的尺寸與 DPI,確保渲染符合預期。 + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +典型的主控台輸出: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +提升的 DPI 結合抗鋸齒,即使在放大圖像時亦能產生乾淨的結果。這說明了 **how to render html image** 的專業品質。 + +## 常見變化與邊緣情況 + +| 情況 | 建議調整 | +|-----------|-------------------| +| 渲染非常大的頁面(例如全螢幕 Web 應用程式) | 增加 `ImageRenderingOptions.Width` / `Height` 或設定 `Scale` 以控制記憶體使用量。 | +| 需要透明背景 | 設定 `imageOptions.BackgroundColor = Color.Transparent;` | +| 目標為 JPEG 以減少檔案大小 | 將 `ImageFormat` 改為 `ImageFormat.Jpeg` 並調整 `Quality`(0‑100)。 | +| 在沒有 GUI 的 Linux 容器中執行 | Aspose.HTML 完全無頭;不需要額外相依項目。 | +| 必須為像素完美的 UI 測試停用抗鋸齒 | 設定 `UseAntialiasing = false;` – 邊緣會更銳利,但可能出現鋸齒。 | + +### 專業提示 + +在批次產生圖像時,重複使用單一 `HTMLDocument` 實例,僅在每次渲染間修改其 `Content` 屬性。這可減少重複解析相同 HTML 的開銷,提升吞吐量。 + +## 完整原始碼清單 + +以下是完整程式,您可直接複製到新的 console‑app 專案並立即執行。 + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## 接下來該學什麼? + +以下教學與本指南所示技術密切相關,能幫助您進一步掌握 API 功能並探索在專案中使用的其他實作方式。每個資源皆提供完整可執行的程式碼範例與逐步說明。 + +- [如何使用 C# 將 HTML 渲染為圖像 – 完整指南](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML 轉圖像教學 – 在 C# 中將 HTML 渲染為 PNG](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [如何使用 Aspose 將 HTML 渲染為 PNG – 步驟指南](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/hongkong/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..f26417a4b --- /dev/null +++ b/html/hongkong/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,293 @@ +--- +category: general +date: 2026-09-10 +description: 透過啟用 hinting(提示)功能,提升使用 Aspose.HTML 渲染 HTML 時的文字清晰度。本指南說明如何啟用 hinting + 以及其重要性。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: zh-hant +lastmod: 2026-09-10 +og_description: 透過學習如何啟用字形微調,提升 Aspose.HTML 中文字的清晰度。遵循逐步指南,即可在所有平台上獲得更清晰的文字。 +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: 提升 Aspose.HTML 的文字清晰度 – 啟用 hinting 以獲得更銳利的渲染 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: 如何在 Aspose.HTML 中使用 hinting 提升文字清晰度 +url: /zh-hant/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Aspose.HTML 中透過 hinting 改善文字清晰度 + +如果您在使用 Aspose.HTML 轉換 HTML 時需要提升文字清晰度,本指南將提供完整解決方案。啟用 hinting 後,字形會更銳利,特別是在非 Windows 平台上,預設渲染往往會顯得模糊。 + +在本教學中,您將學會如何啟用 hinting、為何它對文字清晰度重要,以及如何將此設定整合到典型的 Aspose.HTML 工作流程中。無需額外文件——以下步驟已包含所有必要資訊。 + +## 先決條件 + +在開始之前,請確保您已具備: + +* .NET 6.0 或更新版本(此程式碼同樣支援 .NET Framework 4.7 以上) +* 已授權的 **Aspose.HTML for .NET** 版本(免費試用版可用於測試) +* 基本的 C# 與 Visual Studio(或您慣用的任何 IDE)使用經驗 + +這些需求相當簡潔;相同方法亦適用於 console 應用程式、ASP.NET Core 服務或桌面應用程式。 + +## 為何啟用 hinting 能提升文字清晰度 + +Hinting 是一種將每個字形輪廓對齊至顯示裝置像素格的調整過程。若未使用 hinting,特別是在低解析度或高 DPI 螢幕上,字元可能會顯得模糊或不均勻。啟用 hinting 後,渲染引擎會自動套用這些調整,帶來以下效益: + +* 各字元筆畫粗細保持一致 +* 在 Linux、macOS 以及較舊的 Windows 版本上可獲得更佳可讀性 +* 產生的 PDF、螢幕截圖或即時預覽皆具專業外觀 + +Aspose.HTML 透過 **TextOptions.UseHinting** 屬性提供此功能,預設值為 `false`(為了相容性保留)。 + +## 步驟 1:建立 `TextOptions` 實例 + +第一步是實例化 **TextOptions** 類別。此物件會聚合所有與文字相關的渲染設定,方便在渲染管線中傳遞。 + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +建立物件本身不會改變渲染結果;它僅是為稍後要設定的選項準備一個容器。 + +## 步驟 2:啟用 hinting 以提升文字清晰度 + +將 **UseHinting** 屬性設為 `true`。這一行程式碼即可為使用該選項的所有文字啟動 hinting 演算法。 + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +當 `UseHinting` 為 `true` 時,Aspose.HTML 會自動對每個字形執行次像素調整。此效果在包含細節較多的字型(如襯線字體或小尺寸文字)上最為明顯。 + +### 專業提示:將 hinting 與抗鋸齒結合 + +若您同時希望邊緣更平滑,可在啟用 hinting 的同時開啟抗鋸齒: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +兩者結合可在各種裝置上提供最佳的視覺忠實度。 + +## 步驟 3:將 `TextOptions` 套用至渲染流程 + +您需要將已設定好的 `TextOptions` 傳遞給 **HtmlRenderer**(或其他使用的渲染類別)。以下是一個最小範例,示範如何載入 HTML 字串、套用選項,並將結果輸出為 PNG 檔案。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**關鍵程式碼說明** + +* `HTMLDocument` 解析 HTML 標記。 +* `ImageDevice` 定義輸出尺寸(本例為 800 × 600 像素)。 +* `HtmlRenderer` 執行實際渲染;將 `textOptions` 指派給 `renderer.Options.TextOptions` 即可套用 hinting。 +* `device.Save("output.png")` 將最終圖像寫入磁碟。 + +執行此程式碼會產生 `output.png`,即使在 96 dpi 的螢幕上,標題與段落也能保持清晰銳利。 + +## 步驟 4:驗證結果 + +使用任意圖像檢視器開啟產生的圖片。將其與 **未** 啟用 hinting(`UseHinting = false`)的渲染結果作比較,您應該會注意到: + +* 「H、e、l、o」等字母的邊緣更銳利 +* 段落內筆畫粗細更為均勻 +* 斜線字元的殘影減少 + +若在螢幕上差異不明顯,可放大檢視或列印圖片;在較高放大倍率下,改進會更加顯著。 + +## 常見變形與邊緣情況 + +### 渲染為 PDF 而非 PNG + +若目標為 PDF,只需將 `ImageDevice` 換成 `PdfDevice`。相同的 `TextOptions` 物件即可直接使用,無需額外修改: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### 高 DPI 螢幕 + +在具有縮放比例(例如 150 % 或 200 %)的螢幕上,建議按比例放大裝置尺寸以維持視覺品質。Hinting 仍會生效,結果依舊銳利。 + +### Linux 或 macOS 環境 + +在 Linux 上,預設渲染引擎可能會退回至不支援 hinting 的點陣字型渲染器,除非明確啟用。設定 `UseHinting = true` 會強制引擎套用 TrueType hinting,從而消除這些平台常見的「模糊」現象。 + +### 沒有 hinting 表格的字型 + +部分現代 OpenType 字型未包含 hinting 資料。此時 Aspose.HTML 會自動使用 auto‑hinting,仍比完全不使用 hinting 有明顯的清晰度提升。 + +## 步驟 5:生產環境最佳實踐 + +1. **建立單一 `TextOptions` 實例**,於多次渲染呼叫間重複使用,可減少物件分配開銷。 +2. **將 hinting 與抗鋸齒結合**(`UseAntiAliasing = true`),以取得最平滑的輸出。 +3. **在目標平台上測試**(Windows、Linux、macOS),因為不同平台的視覺差異可能有所不同。 +4. **於生產日誌中記錄渲染設定**,有助於排查意外的視覺異常。 +5. **保持 Aspose.HTML 為最新版本**,新版本可能加入更多文字渲染改進。 + +## 完整可執行範例 + +以下是一個自包含的 console 應用程式,示範本文所有步驟。將程式碼複製至新的 .NET console 專案,加入 Aspose.HTML NuGet 套件後執行即可。 + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**預期輸出** + +執行程式後會產生 `hinted_output.png`。標題「Hinting in action」與段落文字皆呈現銳利、筆畫寬度均勻且無模糊邊緣。若將 `UseHinting = true` 註解掉,產生的圖像會顯示略為模糊的字元,從而說明此設定的效益。 + +## 結論 + +現在您已掌握透過啟用 hinting 來提升 Aspose.HTML 文字清晰度的方法。整個流程包括建立 `TextOptions` 物件、設定 `UseHinting`(可選 `UseAntiAliasing`),再將選項套用至渲染器。此做法適用於 PNG、JPEG、PDF 以及其他輸出格式,並能在 Windows、Linux、macOS 上提供一致的視覺品質。 + +接下來,您可以探索以下相關主題,例如 **如何為自訂字型啟用 hinting**、**優化渲染效能**,或 **在 Aspose.HTML 中使用 CSS 控制文字外觀**。嘗試不同字型與 DPI 設定,觀察 hinting 如何因應各種情境而調整。 + +祝開發順利,享受每一次 Aspose.HTML 渲染中更銳利的文字! + +## 接下來您可以學習什麼? + +以下教學與本指南所示技巧緊密相關,能進一步擴展您的應用能力。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,並在專案中探索替代實作方式。 + +- [如何使用 Aspose 完整指南將 HTML 轉換為 PNG](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Aspose 渲染 HTML 為 PNG 的逐步教學](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [建立具樣式文字的 HTML 文件並匯出為 PDF 的完整指南](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/hongkong/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..f330542a5 --- /dev/null +++ b/html/hongkong/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: 如何在 C# 中使用 Aspose.Html 渲染 HTML。學習處理 HTML 與 CSS、儲存 HTML、將 HTML 轉換為串流,以及在 + .NET 中載入 HTML 文件。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: zh-hant +lastmod: 2026-09-10 +og_description: 如何在 C# 中使用 Aspose.Html 渲染 HTML。本指南將向您展示如何處理 HTML 與 CSS、保存 HTML、將 HTML + 轉換為串流,以及高效載入 HTML 文件。 +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: 使用 Aspose.Html 在 C# 中渲染 HTML – 逐步教學 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: 如何在 C# 中使用 Aspose.Html 渲染 HTML – 完整指南 +url: /zh-hant/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 Aspose.Html 渲染 HTML – 完整指南 + +如果您需要在 .NET 應用程式中 **how to render html**,本教學將展示完整的工作流程。您將會看到如何處理 HTML CSS、如何儲存 HTML、將 HTML 轉換為串流,以及使用 Aspose.Html 函式庫在 C# 中載入 HTML 文件。 + +在伺服器端環境中渲染 HTML 通常不僅僅是載入檔案——還必須處理如圖片和樣式表等連結資源。本指南將逐步說明從載入文件、客製化資源處理,到最終將渲染結果提取為記憶體串流的每個步驟。 + +閱讀完本文後,您將能夠: + +* 從磁碟或 URL 載入 HTML 文件 (`load html document c#`). +* 提供自訂的 `ResourceHandler` 即時 **process html css**。 +* 儲存渲染後的 HTML 並 **convert html to stream** 以供進一步處理。 +* 使用適用於任何 .NET 環境的 **how to save html** 技術持久化結果。 + +## 前置條件 + +在開始之前,請確保您已具備以下條件: + +* .NET 6.0 SDK 或更新版本已安裝。 +* Visual Studio 2022(或任何支援 .NET 6 的 IDE)。 +* 已加入 **Aspose.Html** 的 NuGet 參考 (`dotnet add package Aspose.Html`)。 +* 在已知資料夾中放置 `input.html` 檔案(範例使用 `YOUR_DIRECTORY/input.html`)。 + +不需要額外的第三方函式庫。 + +## 如何渲染 HTML – 步驟說明指南 + +### 步驟 1:在 C# 中載入 HTML 文件 + +第一步是建立一個代表來源標記的 `HTMLDocument` 實例。這是使用 Aspose.Html 進行 **how to render html** 的核心。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*為什麼這很重要:* 載入文件會解析標記並建立內部 DOM,渲染器稍後會使用它來套用 CSS 並解析資源。 + +### 步驟 2:建立自訂資源處理程式以 **process html css** + +當渲染器遇到外部資源(圖片、CSS 檔案、字型)時,會向 `ResourceHandler` 索取串流。提供自訂處理程式即可完整掌控每個資源的取得、轉換或替代方式。 + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*為什麼這很重要:* 處理程式即是您實作 **process html css** 邏輯的地方,例如內嵌 CSS、以佔位圖取代圖片,或套用安全過濾。 + +### 步驟 3:設定 `HtmlSaveOptions` 以使用自訂處理程式 + +`HtmlSaveOptions` 告訴渲染器如何寫入輸出。指派剛才建立的 `ResourceHandler`,讓渲染器在每個外部參照時呼叫它。 + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +設定 `EmbedCss` 與 `EmbedImages` 在之後 **convert html to stream** 並需要自包含結果時非常有用。 + +### 步驟 4:儲存文件並 **convert html to stream** + +現在您可以渲染文件並將結果捕獲至 `MemoryStream`。這是 **how to save html** 的核心,當您希望將輸出保存在記憶體而非實體檔案時。 + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*為什麼這很重要:* `MemoryStream` 為您提供渲染後 HTML 的彈性二進位表示,您可以在不觸及檔案系統的情況下儲存、傳輸或進一步操作。 + +## 處理常見的邊緣情況 + +| 情況 | 建議做法 | +|-----------|----------------------| +| **缺少 CSS 或圖片檔案** | 在 `MyResourceHandler.HandleResource` 中,於開啟前先檢查 `File.Exists`。若檔案不存在,回傳空的 `MemoryStream` 或佔位圖片。 | +| **大型 HTML 檔案(>10 MB)** | 增加 `MemoryStream` 的預設緩衝大小(`new MemoryStream(capacity)`),以避免頻繁重新配置。 | +| **含 `..` 段的相對 URL** | 使用 `new Uri(baseUri, info.Uri)` 在存取檔案系統前解析完整路徑。 | +| **ASP.NET 中的執行緒安全** | 每個請求都實例化新的 `HTMLDocument` 與 `MyResourceHandler`;避免在執行緒間共享實例。 | +| **編碼問題** | 設定 `saveOpts.Encoding = Encoding.UTF8` 以確保 UTF‑8 輸出,特別是來源包含非 ASCII 字元時。 | + +## 專業提示:在多個文件間重複使用相同的處理程式 + +如果您在批次中處理大量 HTML 檔案,可以保留單一 `MyResourceHandler` 實例,僅變更其內部查詢表。這可減少物件分配開銷,並加速 **process html css** 階段。 + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## 完整、可執行範例 + +以下是一個完整程式,您可以貼到主控台應用程式中。它示範了 **how to render html**、**process html css**、**how to save html**、**convert html to stream** 以及 **load html document c#**——全部在同一流程中。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**預期輸出**(為簡潔起見已截斷): + + + +## 接下來您應該學習什麼? + +以下教學涵蓋與本指南緊密相關的主題,並在此基礎上進一步說明。每個資源皆包含完整可執行的程式碼範例與逐步說明,協助您精通其他 API 功能,並在自己的專案中探索替代實作方式。 + +- [如何使用 Aspose.Html 儲存 HTML – 完整 C# 指南](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [如何使用 Aspose 在 C# 中將 HTML 渲染為 PNG](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [如何使用 Aspose 將 HTML 渲染為 PNG – 步驟說明指南](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/net/working-with-html-documents/_index.md b/html/hongkong/net/working-with-html-documents/_index.md index ed6030e5d..4503817fd 100644 --- a/html/hongkong/net/working-with-html-documents/_index.md +++ b/html/hongkong/net/working-with-html-documents/_index.md @@ -35,10 +35,15 @@ HTML 文件是網路的支柱,能夠有效地創建和操作它們對於任何 ### [如何使用 Aspose.Html 保存 HTML – 完整 C# 指南](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [如何使用 CSS 與 C# 加粗標題 – 完整步驟指南](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + +### [如何在 C# 中從檔案載入 HTML 文件](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [如何在 C# 中儲存 HTML – 自訂資源處理程式與 ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [如何在 C# 中壓縮 HTML – 完整步驟指南](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [如何在 C# 中使用 HtmlSaveOptions 與 Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/hongkong/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/hongkong/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..78c4055ad --- /dev/null +++ b/html/hongkong/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-09-10 +description: 學習如何在 C# 中使用 Aspose.HTML 從檔案載入 HTML 文件。內容包括圖像渲染選項、文字渲染選項以及自訂資源處理程式。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: zh-hant +lastmod: 2026-09-10 +og_description: 使用 Aspose.HTML 在 C# 中從檔案載入 HTML 文件。本指南涵蓋渲染選項、自訂資源處理程式,以及您今天即可執行的完整程式碼。 +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: 使用 Aspose.HTML 從檔案載入 HTML 文件 – 步驟說明 C# 教學 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: 如何在 C# 中使用 Aspose.HTML 從檔案載入 HTML 文件 +url: /zh-hant/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 Aspose.HTML 從檔案載入 HTML 文件 + +如果您需要 **從檔案載入 HTML 文件** 並控制其渲染,本教學將提供一個完整、可直接執行的解決方案。您將會看到如何設定影像渲染、啟用文字 hinting,並提供一個自訂資源處理程式,對外部資產回傳空的串流。完成本指南後,您即可將處理過的 HTML 儲存至記憶體串流或其他任意目的地。 + +此範例使用 Aspose.HTML for .NET,這是一套在不需要瀏覽器引擎的情況下簡化 HTML、CSS 與 SVG 處理的函式庫。無需額外工具,且程式碼相容 .NET 6 或更新版本。開始前請先確定已安裝 Aspose.HTML NuGet 套件。 + +## 前置條件 + +- .NET 6 SDK(或任何 Aspose.HTML 支援的 .NET 版本) +- Visual Studio 2022 或其他 C# IDE +- Aspose.HTML for .NET NuGet 套件(`Install-Package Aspose.HTML`) +- 一個名為 `input.html` 的 HTML 檔案,放置於程式碼可參考的資料夾中 + +## 步驟 1:從檔案載入 HTML 文件 + +第一步是建立一個 `HTMLDocument` 實例,讀取來源檔案。此物件代表整個 DOM 樹,並提供後續操作的方法。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**為什麼重要:**將檔案載入 `HTMLDocument` 後,您即可完整存取文件的結構、樣式與資源,之後可以進行渲染或轉換。 + +## 步驟 2:設定影像渲染選項(Aspose.HTML 渲染) + +若您稍後計畫將頁面光柵化,設定影像渲染可提升視覺品質。抗鋸齒會平滑邊緣,減少鋸齒狀雜訊。 + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**小技巧:**`UseAntialiasing` 對於將向量圖形與文字光柵化為 PNG 或 JPEG 時特別有用。 + +## 步驟 3:啟用文字 hinting(文字渲染選項) + +文字 hinting 會影響字形對齊像素格的方式,能讓小尺寸字體看起來更銳利。 + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**為什麼重要:**當您之後將 HTML 匯出為影像時,hinting 可減少模糊的字元,確保跨平台的排版一致性。 + +## 步驟 4:建立自訂資源處理程式(custom resource handler) + +HTML 可能會引用外部資源(如字型、影像或腳本)。`ResourceHandler` 讓您自行決定這些資源的取得方式。在本範例中,處理程式會對每個請求回傳空的 `MemoryStream`,等同於剝除外部資產。 + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**何時使用:**此模式適用於安全受限的環境、單元測試,或僅需要純標記而不需外部檔案的情況。 + +## 步驟 5:組合 HTML 儲存選項(HTML 轉影像) + +將資源處理程式、渲染設定與字型樣式等全部附加到 `HtmlSaveOptions` 物件上。此物件告訴 Aspose.HTML 如何序列化文件。 + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**說明:**`WebFontStyle` 可強制指定特定樣式(例如粗體),以防缺少的網路字型。先前設定的 `ImageRenderingOptions` 與 `TextOptions` 會在此注入,確保它們在之後的光柵化過程中生效。 + +## 步驟 6:將文件儲存至記憶體串流(完整解決方案) + +最後,將處理過的 HTML 寫入 `MemoryStream`。之後您可以將串流寫入檔案、透過網路傳輸,或傳遞給其他 API。 + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**結果:**`output.html` 現在包含與 `input.html` 相同的標記,但所有外部資源皆已被空串流取代,且渲染偏好已寫入儲存選項中。 + +## 完整可執行範例 + +將所有步驟組合起來,即成為一個可自行複製、貼上並執行的自包含程式。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +執行此程式會在當前目錄產生 `output.html`。使用瀏覽器開啟該檔案,即可確認原始標記已載入,但任何連結的影像、字型或腳本皆不存在(已被空串流取代)。 + +## 常見問題與邊緣情況 + +| 問題 | 解答 | +|----------|--------| +| **如果我需要原始資源而不是空串流,該怎麼辦?** | 將 `MemoryResourceHandler` 替換為讀取磁碟檔案或透過 HTTP 下載的處理程式。 | +| **我可以直接將 HTML 渲染成 PNG 或 JPEG 嗎?** | 可以。使用 `ImageRenderer` 搭配先前設定的 `ImageRenderingOptions` 與 `TextOptions`,然後呼叫 `renderer.Render(page, outputStream, ImageFormat.Png)`。 | +| **`WebFontStyle.Bold` 必須嗎?** | 不必。它僅作為覆寫字型樣式的示範。如不需要強制樣式,可省略或改為 `WebFontStyle.Normal`。 | +| **這能在 .NET Core 上執行嗎?** | Aspose.HTML 支援 .NET 5/6/7,因此相同程式碼可在 .NET Core 專案中執行。 | +| **如何有效處理大型 HTML 檔案?** | 使用 `FileStream` 建構子將檔案串流傳入 `HTMLDocument`,以避免一次將整個檔案載入記憶體。 | + +## 結論 + +您現在已掌握如何使用 Aspose.HTML **從檔案載入 HTML 文件**、設定 **影像渲染選項** 與 **文字渲染選項**,以及套用 **自訂資源處理程式** 以控制外部資產。完整範例示範了將處理後的 HTML 儲存至記憶體串流,您可以依需求持久化或傳輸。 + +接下來,您可以透過將 `HtmlSaveOptions` 換成 `ImageRenderer` 來探索 **HTML 轉影像**,或試驗 Aspose.HTML 的其他渲染功能,例如 CSS 媒體查詢、SVG 支援與 PDF 匯出。這些延伸功能讓您能在 C# 中完整建構豐富的文件處理管線。 + +祝開發順利! + +## 接下來您可以學習什麼? + +以下教學與本指南緊密相關,能進一步深化您對 API 的掌握,並提供其他實作方式的範例。 + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/hongkong/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..c8674a7ad --- /dev/null +++ b/html/hongkong/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,308 @@ +--- +category: general +date: 2026-09-10 +description: 學習如何在 C# 中使用 HtmlSaveOptions 來控制網頁字型樣式,並使用 Aspose.HTML 保存 HTML 檔案。內含完整程式碼範例與實用技巧。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: zh-hant +lastmod: 2026-09-10 +og_description: 如何在 C# 中使用 HtmlSaveOptions,於使用 Aspose.HTML 儲存 HTML 時啟用粗體與斜體網頁字型樣式。請參考完整範例與最佳實踐提示。 +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: 如何在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions – 步驟指南 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: 如何在 C# 中使用 Aspose.HTML 的 HtmlSaveOptions +url: /zh-hant/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中使用 HtmlSaveOptions 於 Aspose.HTML + +如果您需要控制 Aspose.HTML 儲存 HTML 文件的方式,**了解如何使用 HtmlSaveOptions 是必備的**。本教學將一步一步示範如何使用 HtmlSaveOptions 在儲存文件時啟用粗體與斜體網頁字體樣式。 + +Aspose HTML 函式庫提供豐富的 API 以載入、操作及匯出 HTML 內容。完成本指南後,您將能夠: + +* 將現有的 HTML 檔載入 `HTMLDocument`。 +* 設定 `HtmlSaveOptions` 以套用特定的 `WebFontStyle` 標誌。 +* 將修改後的文件儲存至新位置或串流。 +* 擴充解決方案以支援其他字體樣式、自訂 CSS 與錯誤處理。 + +## 前置條件 + +在開始之前,請確保您已具備以下條件: + +* .NET 6.0 或更新版本已安裝。 +* 有效的 **Aspose.HTML for .NET** 授權(此範例可使用免費試用版)。 +* Visual Studio 2022(或任何 C# IDE)以編譯與執行程式碼。 + +除了 `Aspose.HTML` 之外,無需其他 NuGet 套件。 + +## 步驟 1:設定專案並匯入命名空間 + +建立一個新的 **Console App** 專案,並加入 Aspose.HTML NuGet 套件: + +```bash +dotnet add package Aspose.HTML +``` + +接著,在 `Program.cs` 的頂部匯入所需的命名空間: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +這些命名空間會公開 `HTMLDocument`、`HtmlSaveOptions` 與 `WebFontStyle` 型別,供本教學全程使用。 + +## 步驟 2:載入來源 HTML 文件 + +第一步是讀取您想處理的 HTML。請將 `"YOUR_DIRECTORY/input.html"` 替換為實際的檔案路徑。 + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` 會解析標記、建立 DOM 樹,並使其可供操作。若檔案不存在,會拋出例外,因此在正式環境建議將此呼叫包在 try‑catch 區塊中。 + +## 步驟 3:建立並設定 HtmlSaveOptions + +`HtmlSaveOptions` 讓您微調儲存過程。若要啟用粗體與斜體網頁字體樣式,請使用位元 OR 運算子 (`|`) 結合相應的 `WebFontStyle` 標誌。 + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### 為何要設定 WebFontStyle? + +當您匯出 HTML 文件時,Aspose.HTML 能嵌入與原始樣式相符的網頁字體。透過設定 `WebFontStyle`,您告訴匯出器要包含哪些字體變體。若僅需特定樣式,這可減少最終檔案大小,且確保渲染結果與來源一致。 + +#### 常見變體 + +| 所需樣式 | 對應的 `WebFontStyle` 標誌 | +|----------|----------------------------| +| 正常 (Regular) | `WebFontStyle.Regular` | +| 粗體 | `WebFontStyle.Bold` | +| 斜體 | `WebFontStyle.Italic` | +| 粗體 + 斜體 | `WebFontStyle.Bold | WebFontStyle.Italic` | +| 所有變體 | `WebFontStyle.All` | + +您可以依需求任意組合這些標誌。 + +## 步驟 4:使用設定好的選項儲存文件 + +現在將文件寫入新檔案。`Save` 方法接受目標路徑以及先前準備好的 `HtmlSaveOptions` 實例。 + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +若需寫入記憶體串流(例如透過 HTTP 傳送檔案),請使用接受 `Stream` 物件的重載方法: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## 步驟 5:驗證結果 + +在瀏覽器中開啟 `output.html`,或以文字編輯器檢視該檔案。您應該會看到 ` + + +
+ +"; +``` + +A HTML egy egyszerű vektorgrafikát definiál, amely antialiasing használatával nyer a legjobban a rasterizálás során. + +## Step 2: Initialize the rendering engine + +Az Aspose.HTML egy `HtmlRenderer`-t használ az `ImageRenderingOptions`-al együtt. Itt történik meg a **hogyan engedélyezzük az antialiasingot** a végső bitmaphez. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Miért fontos a `UseAntialiasing = true`**: A renderelő motor vektoros alakzatokat, szöveget és színátmeneteket sub‑pixel pontossággal rajzol. Az antialiasing engedélyezése azt mondja a rasterizálónak, hogy keverje össze a szegélypixeleket a szomszédjaikkal, ezáltal megszüntetve a fogazott vonalakat, amelyek akkor jelennek meg, ha a `UseAntialiasing` alapértelmezett `false` értéken marad. Ez a **magas minőségű kép renderelés** alapja. + +## Step 3: Render the HTML to an image + +Miután beállította a lehetőségeket, hívja meg a `RenderToImage` metódust. A metódus egy `Image` objektumot ad vissza, amelyet lemezre menthet vagy közvetlenül egy válaszfolyamba is küldhet. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +A futtatás után az `output.png` egy sima, antialiasinggal ellátott kört tartalmaz. Nyissa meg a fájlt bármely képmegjelenítőben a végeredmény ellenőrzéséhez. + +![hogyan engedélyezzük az antialiasingot az Aspose.HTML renderelésben](/images/antialiasing-example.png){alt="hogyan engedélyezzük az antialiasingot az Aspose.HTML renderelésben"} + +## Step 4: Verify high‑quality output (how to render html image) + +Programozottan ellenőrizheti a kép méreteit és DPI-ját, hogy biztos legyen benne, a renderelés megfelel az elvárásainak. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Tipikus konzolkimenet: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +A megnövelt DPI antialiasinggal együtt tiszta eredményt ad még akkor is, ha a képet felskálázzák. Ez demonstrálja, **hogyan rendereljük a html képet** professzionális minőségben. + +## Common variations and edge cases + +| Helyzet | Ajánlott módosítás | +|-----------|-------------------| +| Nagyon nagy oldalak renderelése (pl. teljes képernyős webalkalmazások) | Növelje a `ImageRenderingOptions.Width` / `Height` értékeket, vagy állítsa be a `Scale`‑t a memóriahasználat szabályozásához. | +| Átlátszó háttér szükséges | Állítsa be `imageOptions.BackgroundColor = Color.Transparent;` | +| JPEG célzása a kisebb fájlméret érdekében | Módosítsa az `ImageFormat`‑ot `ImageFormat.Jpeg`‑re, és állítsa be a `Quality`‑t (0‑100). | +| Linux konténerben GUI nélkül futtatás | Az Aspose.HTML teljesen fej nélküli; nincs szükség további függőségekre. | +| Antialiasing letiltása pixel‑tökéletes UI teszthez | Állítsa be `UseAntialiasing = false;` – a szélek élesek lesznek, de fogazottnak tűnhetnek. | + +### Pro tipp + +Kötegelt képgenerálás esetén használja újra ugyanazt a `HTMLDocument` példányt, és csak a `Content` tulajdonságát módosítsa a renderelések között. Ez csökkenti a HTML többszöri elemzésének terhelését és növeli a feldolgozási sebességet. + +## Full source listing + +Az alábbi teljes programot másolja be egy új konzolos alkalmazás projektbe, és futtassa azonnal. + + + +## What Should You Learn Next? + +Az alábbi tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljes, működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsen elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket saját projektjeiben. + +- [Hogyan rendereljük a html-t képre C#‑ban – Teljes útmutató](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML‑ból kép tutorial – Render HTML to PNG in C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Hogyan használjuk az Aspose‑t HTML PNG‑re rendereléshez – Lépésről‑lépésre útmutató](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/hungarian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..116eaf0c9 --- /dev/null +++ b/html/hungarian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Javítsa a szöveg tisztaságát az Aspose.HTML használatával történő HTML + rendereléskor a hinting engedélyezésével. Ez az útmutató bemutatja, hogyan kell + engedélyezni a hintinget, és miért fontos. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: hu +lastmod: 2026-09-10 +og_description: Növelje a szöveg tisztaságát az Aspose.HTML-ben, ha megtanulja, hogyan + kapcsolja be a hintinget. Kövesse a lépésről‑lépésre útmutatót, hogy minden platformon + tisztább szöveget kapjon. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Növelje a szöveg tisztaságát az Aspose.HTML-ben – engedélyezze a hintelést + a élesebb megjelenítéshez +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Hogyan javítható a szöveg tisztasága az Aspose.HTML-ben hinteléssel +url: /hu/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan javítható a szöveg tisztasága az Aspose.HTML-ben hinteléssel + +Ha szöveg‑tisztaságot szeretne javítani az HTML renderelésekor az Aspose.HTML használatával, ez az útmutató egy komplett megoldást mutat be. A hintelés engedélyezésével élesebb glifek érhetők el, különösen nem‑Windows platformokon, ahol az alapértelmezett renderelés elmosódottnak tűnhet. + +Ebben a tutorialban megtanulja, hogyan kell engedélyezni a hintelést, miért fontos a szöveg tisztasága szempontjából, és hogyan integrálja a beállítást egy tipikus Aspose.HTML munkafolyamatba. Külső dokumentációra nincs szükség – minden, amire szüksége van, az alábbi lépésekben megtalálható. + +## Előfeltételek + +Mielőtt elkezdené, győződjön meg róla, hogy rendelkezik a következőkkel: + +* .NET 6.0 vagy újabb (a kód .NET Framework 4.7+‑tel is működik) +* Licencelt példány az **Aspose.HTML for .NET**‑ből (a ingyenes próba verzió teszteléshez megfelelő) +* Alapvető C# és Visual Studio vagy a kedvenc IDE‑jének ismerete + +Ezek a követelmények minimálisak; ugyanaz a megközelítés működik konzolalkalmazásokban, ASP.NET Core szolgáltatásokban vagy asztali alkalmazásokban. + +## Miért javítja a szöveg tisztaságát a hintelés engedélyezése + +A hintelés egy olyan folyamat, amely minden glif kontúrját a megjelenítő eszköz pixelrácsához igazítja. Hintelés nélkül, különösen alacsony felbontású vagy magas DPI‑s képernyőkön, a karakterek elmosódottak vagy egyenetlenek lehetnek. A hintelés engedélyezése azt mondja a renderelő motornak, hogy automatikusan alkalmazza ezeket a korrekciókat, ami a következőket eredményezi: + +* Konzisztens vonalvastagság a karakterek között +* Jobb olvashatóság Linuxon, macOS‑on és régebbi Windows verziókon +* Professzionális megjelenés PDF‑ekben, képernyőképekben vagy képernyőn megjelenített előnézetekben + +Az Aspose.HTML ezt a viselkedést a **TextOptions.UseHinting** tulajdonságon keresztül teszi elérhetővé, amely alapértelmezés szerint `false` a visszafelé kompatibilitás miatt. + +## 1. lépés: `TextOptions` példány létrehozása + +Az első lépés a **TextOptions** osztály példányosítása. Ez az objektum minden szöveg‑renderelési beállítást egy helyen gyűjt, így egyszerűen átadható a renderelési csővezetéknek. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Az objektum létrehozása önmagában még nem változtatja meg a renderelést; csak előkészíti a tárolót a később beállítandó opciók számára. + +## 2. lépés: Hintelés engedélyezése a szöveg tisztaságának javításához + +Állítsa a **UseHinting** tulajdonságot `true`‑ra. Ez az egyetlen sor aktiválja a hintelési algoritmust minden, a megadott opciókkal renderelt szövegre. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Ha a `UseHinting` `true`, az Aspose.HTML automatikusan alpixel‑korrekciókat alkalmaz minden glifre. A hatás leginkább a finom részleteket tartalmazó betűtípusoknál, például serif betűk vagy kis méretű szövegek esetén észlelhető. + +### Pro tipp: Hintelés kombinálása anti‑aliasing‑gel + +Ha a szélek még simábbak legyenek, engedélyezheti az anti‑aliasing‑et a hintelés mellett: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Mindkét beállítás együtt a legjobb vizuális hűséget biztosítja a különböző eszközökön. + +## 3. lépés: `TextOptions` csatolása a renderelési folyamathoz + +A konfigurált `TextOptions`‑t át kell adni a **HtmlRenderer**‑nek (vagy a használt bármely más renderelő osztálynak). Az alábbi minimális példa betölt egy HTML‑stringet, alkalmazza a beállításokat, és PNG fájlba írja a kimenetet. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**A kulcsfontosságú sorok magyarázata** + +* `HTMLDocument` elemzi a HTML‑markupt. +* `ImageDevice` definiálja a kimeneti méreteket (800 × 600 pixel ebben a példában). +* `HtmlRenderer` végzi a tényleges renderelést; a `textOptions` hozzárendelése a `renderer.Options.TextOptions`‑hez biztosítja, hogy a hintelés alkalmazva legyen. +* `device.Save("output.png")` a végleges képet a lemezre írja. + +A kód futtatása `output.png`‑t hoz létre, ahol a cím és a bekezdés élesen jelenik meg még egy 96 dpi‑s monitoron is. + +## 4. lépés: Az eredmény ellenőrzése + +Nyissa meg a generált képet bármely megjelenítőben. Hasonlítsa össze egy **hintelés nélküli** ( `UseHinting = false` ) képpel. A következőket kell észlelnie: + +* Élesebb vonalak a “H”, “e”, “l”, “o” betűkön +* Egyenletesebb vonalvastagság a bekezdésben +* Csökkent „ghosting” a karakterek átlós vonalain + +Ha a különbség a képernyőjén csak finom, próbálja meg nagyítani vagy kinyomtatni a képet; a javulás magasabb nagyításnál egyértelműbb. + +## Gyakori variációk és szélhelyzetek + +### Renderelés PDF‑be PNG helyett + +Ha a cél PDF, cserélje le az `ImageDevice`‑et egy `PdfDevice`‑re. Ugyanaz a `TextOptions` objektum módosítás nélkül működik: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Magas DPI‑s kijelzők + +Skálázási tényezőkkel (pl. 150 % vagy 200 %) rendelkező kijelzők esetén érdemes a device méretét arányosan növelni a vizuális minőség megtartásához. A hintelés továbbra is alkalmazásra kerül, és az eredmény éles marad. + +### Linux vagy macOS környezetek + +Linuxon az alapértelmezett renderelő motor visszaeshet egy bitmap betűtípus‑renderelőbe, amely a hintelést figyelmen kívül hagyja, hacsak nem engedélyezi kifejezetten. A `UseHinting = true` jelző kényszeríti a motort a TrueType hintelés alkalmazására, ezzel megszüntetve a tipikus „elmosódott” megjelenést ezeken a platformokon. + +### Hintelési táblázat nélküli betűtípusok + +Néhány modern OpenType betűtípus nem tartalmaz hintelési adatokat. Ilyen esetben az Aspose.HTML automatikus hintelésre vált, ami még mindig jobb tisztaságot biztosít, mint a teljesen hintelés nélküli megjelenítés. + +## 5. lépés: Legjobb gyakorlatok termelési kódban + +1. **Hozzon létre egyetlen `TextOptions` példányt**, és használja újra a renderelési hívások között. Ez csökkenti az objektum‑allokáció terhelését. +2. **Kombinálja a hintelést anti‑aliasing‑gel** (`UseAntiAliasing = true`) a legsimább kimenetért. +3. **Tesztelje a célplatformokon** (Windows, Linux, macOS), mivel a vizuális különbségek változhatnak. +4. **Logolja a renderelési konfigurációt** a termelési naplókban; ez segít a váratlan vizuális hibák nyomozásában. +5. **Tartsa naprakészen az Aspose.HTML‑t**. Az újabb verziók további szöveg‑renderelési fejlesztéseket hozhatnak. + +## Teljes működő példa + +Az alábbi önálló konzolalkalmazás bemutatja a fent tárgyalt összes lépést. Másolja a kódot egy új .NET konzolprojektbe, adja hozzá az Aspose.HTML NuGet csomagot, és futtassa. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Várható kimenet** + +A program futtatása `hinted_output.png`‑t hoz létre. A “Hinting in action” cím és a bekezdés szövege éles, egyenletes vonalvastagságú, elmosódott szélek nélkül. Ha kikommentezi a `UseHinting = true` sort, ugyanaz a kép kissé elmosódott karaktereket mutat, ami szemlélteti a beállítás előnyét. + +## Következtetés + +Most már tudja, hogyan javítható a szöveg tisztasága az Aspose.HTML‑ben a hintelés engedélyezésével. A folyamat magában foglalja egy `TextOptions` objektum létrehozását, a `UseHinting` (és opcionálisan a `UseAntiAliasing`) beállítását, majd a beállítások csatolását a renderelőhöz. Ez a megközelítés PNG, JPEG, PDF és más kimeneti formátumok esetén is működik, és konzisztens vizuális minőséget biztosít Windows, Linux és macOS rendszereken egyaránt. + +A következő lépésként érdemes megismerni a kapcsolódó témákat, például **hogyan engedélyezhető a hintelés egyedi betűtípusokhoz**, **a renderelési teljesítmény optimalizálása**, vagy **CSS használata a szöveg megjelenésének szabályozásához** az Aspose.HTML‑ben. Kísérletezzen különböző betűtípusokkal és DPI‑beállításokkal, hogy lássa, a hintelés hogyan alkalmazkodik minden szituációhoz. + +Boldog kódolást, és élvezze a még élesebb szöveget minden Aspose.HTML renderelésnél! + +## Mit érdemes még megtanulni? + +Az alábbi tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás komplett, működő kódrészleteket tartalmaz lépésről‑lépésre magyarázatokkal, hogy segítsék az API további funkcióinak elsajátítását és alternatív megvalósítási megközelítések felfedezését saját projektjeiben. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/hungarian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..2f50b1371 --- /dev/null +++ b/html/hungarian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: HTML renderelése C#-ban az Aspose.Html segítségével. Tanulja meg a HTML + és CSS feldolgozását, a HTML mentését, a HTML stream-mé konvertálását, valamint + a HTML dokumentum betöltését .NET-ben. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: hu +lastmod: 2026-09-10 +og_description: HTML renderelése C#-ban az Aspose.Html segítségével. Ez az útmutató + megmutatja, hogyan dolgozzunk fel HTML‑t és CSS‑t, hogyan mentsük el a HTML‑t, hogyan + konvertáljuk a HTML‑t streammé, és hogyan töltsünk be HTML‑dokumentumot hatékonyan. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: HTML renderelése C#-ban az Aspose.Html segítségével – lépésről‑lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: HTML megjelenítése C#‑ban az Aspose.Html segítségével – teljes útmutató +url: /hu/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan rendereljük a HTML-t C#-ben az Aspose.Html segítségével – teljes útmutató + +Ha **how to render html**-ra van szükséged egy .NET alkalmazáson belül, ez a tutorial bemutatja a teljes munkafolyamatot. Meg fogod látni, hogyan dolgozzuk fel a HTML CSS-t, hogyan mentünk HTML-t, konvertálunk HTML-t stream-re, és hogyan töltünk be egy HTML dokumentumot C#-ban az Aspose.Html könyvtár segítségével. + +A HTML renderelése szerveroldali környezetben gyakran több, mint csak egy fájl betöltése – kezelned kell a kapcsolódó erőforrásokat is, mint például a képeket és a stíluslapokat. Ez az útmutató minden lépésen végigvezet, a dokumentum betöltésétől a forráskezelés testreszabásáig, egészen a renderelt kimenet memória streamként történő kinyeréséig. + +A cikk végére képes leszel: + +* HTML dokumentum betöltése lemezről vagy URL-ről (`load html document c#`). +* Egyedi `ResourceHandler` biztosítása a **process html css** valós időben. +* A renderelt HTML mentése és **convert html to stream** a további feldolgozáshoz. +* Az eredmény megőrzése **how to save html** technikákkal, amelyek bármely .NET környezetben működnek. + +## Előkövetelmények + +* .NET 6.0 SDK vagy újabb telepítve. +* Visual Studio 2022 (vagy bármely IDE, amely támogatja a .NET 6-ot). +* NuGet hivatkozás a **Aspose.Html**-ra (`dotnet add package Aspose.Html`). +* `input.html` fájl egy ismert mappában (a példa a `YOUR_DIRECTORY/input.html`-t használja). + +Nem szükséges további harmadik féltől származó könyvtár. + +## Hogyan rendereljük a HTML-t – lépésről‑lépésre útmutató + +### 1. lépés: HTML dokumentum betöltése C#-ban + +Az első művelet egy `HTMLDocument` példány létrehozása, amely a forrás markup-ot képviseli. Ez a **how to render html** magja az Aspose.Html használatával. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Miért fontos:* A dokumentum betöltése elemzi a markup-ot és felépít egy belső DOM-ot, amelyet a renderelő később a CSS alkalmazásához és az erőforrások feloldásához használ. + +### 2. lépés: Egyedi erőforráskezelő létrehozása a **process html css**-hez + +Amikor a renderelő külső erőforrásokkal (képek, CSS fájlok, betűtípusok) találkozik, egy `ResourceHandler`-t kér egy streamért. Egyedi kezelő biztosításával teljes irányítást kapsz arról, hogyan kerülnek be a különböző erőforrások lekérésre, átalakításra vagy helyettesítésre. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Miért fontos:* A kezelőben valósítod meg a **process html css** logikát – például beágyazott CSS, képek helyettesítése placeholderrel, vagy biztonsági szűrők alkalmazása. + +### 3. lépés: `HtmlSaveOptions` konfigurálása az egyedi kezelő használatához + +`HtmlSaveOptions` megmondja a renderelőnek, hogyan írja ki a kimenetet. Add meg a most létrehozott `ResourceHandler`-t, hogy a renderelő minden külső hivatkozásnál meghívja. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +`EmbedCss` és `EmbedImages` beállítása hasznos, amikor később **convert html to stream**-et végzel, és önálló eredményre van szükséged. + +### 4. lépés: Dokumentum mentése és **convert html to stream** + +Most már renderelheted a dokumentumot és elmentheted az eredményt egy `MemoryStream`-be. Ez a **how to save html** lényege, amikor a kimenetet memóriában, nem fizikai fájlban szeretnéd. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Miért fontos:* A `MemoryStream` rugalmas, bináris reprezentációt biztosít a renderelt HTML-hez, amelyet tárolhatsz, továbbíthatsz vagy további műveletekre felhasználhatsz anélkül, hogy a fájlrendszert érintenéd. + +## Gyakori szélhelyzetek kezelése + +| Helyzet | Ajánlott megoldás | +|-----------|----------------------| +| **Hiányzó CSS vagy képfájlok** | `MyResourceHandler.HandleResource`-ben ellenőrizd a `File.Exists`-t a megnyitás előtt. Ha a fájl hiányzik, térj vissza egy üres `MemoryStream`-mal vagy egy placeholder képpel. | +| **Nagy HTML fájlok (>10 MB)** | Növeld a `MemoryStream` alapértelmezett pufferméretét (`new MemoryStream(capacity)`) a gyakori újraallokálások elkerülése érdekében. | +| **Relatív URL-ek `..` szegmensekkel** | Használd a `new Uri(baseUri, info.Uri)`-t a teljes útvonal feloldásához a fájlrendszer elérése előtt. | +| **Szálbiztonság ASP.NET-ben** | Minden kéréshez hozz létre egy új `HTMLDocument` és `MyResourceHandler` példányt; kerüld a példányok megosztását szálak között. | +| **Kódolási problémák** | Állítsd be a `saveOpts.Encoding = Encoding.UTF8`-t a UTF‑8 kimenet garantálásához, különösen ha a forrás nem‑ASCII karaktereket tartalmaz. | + +## Profi tipp: ugyanazt a kezelőt újrahasználni több dokumentumhoz + +Ha egy kötegben sok HTML fájlt dolgozol fel, megtarthatsz egyetlen `MyResourceHandler` példányt, és csak a belső keresőtábláját módosítod. Ez csökkenti az objektumok allokációs költségét és felgyorsítja a **process html css** fázist. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Teljes, futtatható példa + +Az alábbiakban egy teljes program található, amelyet beilleszthetsz egy konzolalkalmazásba. Bemutatja a **how to render html**, **process html css**, **how to save html**, **convert html to stream**, és **load html document c#** lépéseket – mind egy folyamatban. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Várható kimenet** (rövidítve a tömörség kedvéért): + + + +## Mit érdemes következőként megtanulni? + +A következő tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljesen működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsenek elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan mentsük a HTML-t az Aspose.Html segítségével – Teljes C# útmutató](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Hogyan használjuk az Aspose-t HTML PNG-re rendereléshez C#-ban](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Hogyan használjuk az Aspose-t HTML PNG-re rendereléshez – Lépésről‑lépésre útmutató](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/net/working-with-html-documents/_index.md b/html/hungarian/net/working-with-html-documents/_index.md index ace88f4b3..5a1b0de01 100644 --- a/html/hungarian/net/working-with-html-documents/_index.md +++ b/html/hungarian/net/working-with-html-documents/_index.md @@ -51,6 +51,12 @@ Ismerje meg, hogyan formázhatja félkövérre a HTML‑címeket CSS‑sel és C Megmutatjuk, hogyan menthet HTML-t C#-ban egyedi erőforráskezelőkkel és ZIP-archívummal. ### [HTML tömörítése C#-ban – Teljes lépésről‑lépésre útmutató](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [HtmlSaveOptions használata C#-ban az Aspose.HTML segítségével](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [HTML dokumentum betöltése fájlból Aspose.HTML segítségével C#-ban](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + +Ismerje meg, hogyan tölthet be HTML-fájlokat Aspose.HTML könyvtárral C#-ban. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/hungarian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/hungarian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..ca8120f32 --- /dev/null +++ b/html/hungarian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Tanulja meg, hogyan töltsön be HTML-dokumentumot fájlból az Aspose.HTML + használatával C#-ban. Tartalmazza a képrenderelési beállításokat, a szövegrenderelési + beállításokat és egy egyéni erőforráskezelőt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: hu +lastmod: 2026-09-10 +og_description: HTML dokumentum betöltése fájlból az Aspose.HTML használatával C#-ban. + Ez az útmutató bemutatja a renderelési beállításokat, egy egyedi erőforráskezelőt, + valamint a teljes kódot, amelyet már ma futtathatsz. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: HTML-dokumentum betöltése fájlból az Aspose.HTML segítségével – lépésről + lépésre C# útmutató +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: HTML dokumentum betöltése fájlból az Aspose.HTML segítségével C#-ban +url: /hu/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan töltsünk be HTML dokumentumot fájlból az Aspose.HTML használatával C#-ban + +Ha **HTML dokumentumot szeretne betölteni fájlból** és irányítani a megjelenítését, ez a bemutató egy teljes, azonnal futtatható megoldást mutat be. Megtudja, hogyan konfigurálja a képek megjelenítését, engedélyezi a szöveg hintelést, és hogyan adjon meg egy egyedi erőforráskezelőt, amely üres adatfolyamokat ad vissza a külső elemekhez. A útmutató végére a feldolgozott HTML‑t memóriában vagy bármely más, Ön által preferált célba mentheti. + +A példa az Aspose.HTML for .NET könyvtárat használja, amely egyszerűsíti a HTML, CSS és SVG feldolgozását böngészőmotor nélkül. Külső eszközök nem szükségesek, a kód .NET 6 vagy újabb verzióval működik. Mielőtt elkezdené, győződjön meg róla, hogy az Aspose.HTML NuGet csomag telepítve van. + +## Előfeltételek + +- .NET 6 SDK (vagy bármely, az Aspose.HTML által támogatott .NET verzió) +- Visual Studio 2022 vagy más C# IDE +- Aspose.HTML for .NET NuGet csomag (`Install-Package Aspose.HTML`) +- Egy `input.html` nevű HTML fájl, amelyet a kódból elérhető mappában helyez el + +## 1. lépés: HTML dokumentum betöltése fájlból + +Az első művelet egy `HTMLDocument` példány létrehozása, amely beolvassa a forrásfájlt. Ez az objektum a teljes DOM‑fát képviseli, és további manipulációs módszereket biztosít. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Miért fontos:** A fájl `HTMLDocument`‑ba történő betöltése teljes hozzáférést biztosít a dokumentum struktúrájához, stílusaihoz és erőforrásaihoz, amelyeket később megjeleníthet vagy átalakíthat. + +## 2. lépés: Képek megjelenítési beállításainak konfigurálása (Aspose.HTML rendering) + +Ha később rasterizálni szeretné az oldalt, a képek megjelenítésének beállítása javítja a vizuális minőséget. Az antialiasing kisimítja a széleket és csökkenti a lépcsőzetes hibákat. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tipp:** A `UseAntialiasing` különösen hasznos vektorgrafikáknál és szövegnél, amelyeket PNG‑re vagy JPEG‑re rasterizálnak. + +## 3. lépés: Szöveg hintelés engedélyezése (text rendering options) + +A szöveg hintelés befolyásolja, hogy a glifek hogyan illeszkednek a pixelrácshoz, ami élesebb megjelenést kölcsönözhet a kis méretű betűtípusoknak. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Miért lényeges:** Amikor később a HTML‑t képre exportálja, a hintelés csökkenti a elmosódott karaktereket és biztosítja a tipográfia konzisztenciáját a különböző platformokon. + +## 4. lépés: Egyedi erőforráskezelő létrehozása (custom resource handler) + +A HTML‑ben hivatkozott külső erőforrások – például betűkészletek, képek vagy szkriptek – kezelésére a `ResourceHandler` segítségével szabályozhatja, hogyan kerülnek lekérésre. Ebben a példában a kezelő minden kérésre egy üres `MemoryStream`‑et ad vissza, ezzel eltávolítva a külső elemeket. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Mikor használja:** Ez a minta hasznos biztonság‑korlátozott környezetekben, egységteszteléskor vagy amikor csak a markupra van szükség külső fájlok nélkül. + +## 5. lépés: HTML mentési beállítások összeállítása (HTML to image conversion) + +Az összes elem – erőforráskezelő, megjelenítési beállítások és betűstílus – egy `HtmlSaveOptions` objektumba kerül. Ez az objektum határozza meg, hogyan sorosítsa az Aspose.HTML a dokumentumot. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Magyarázat:** A `WebFontStyle` kényszeríthet egy adott stílust (pl. félkövér) a hiányzó web‑betűkészletekre. A korábban konfigurált `ImageRenderingOptions` és `TextOptions` itt kerülnek beillesztésre, biztosítva, hogy a későbbi rasterizációra is hatással legyenek. + +## 6. lépés: Dokumentum mentése memóriastreambe (complete solution) + +Végül a feldolgozott HTML‑t egy `MemoryStream`‑be írja. Innen a stream-et fájlba mentheti, hálózaton keresztül küldheti, vagy átadhatja egy másik API‑nak. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Eredmény:** Az `output.html` most ugyanazt a markupot tartalmazza, mint az `input.html`, de minden külső erőforrás helyett üres adatfolyamok vannak, és a megjelenítési preferenciák be vannak égetve a mentési beállításokba. + +## Teljes, futtatható példa + +Az összes lépés egyesítése egy önálló programot eredményez, amelyet egyszerűen másolhat, beilleszthet és futtathat. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +A program futtatása `output.html`‑t hoz létre az aktuális könyvtárban. Nyissa meg a fájlt egy böngészőben, hogy meggyőződjön arról, hogy az eredeti markup betöltődik, de a hivatkozott képek, betűkészletek vagy szkriptek hiányoznak (mert üres adatfolyamokkal lettek helyettesítve). + +## Gyakori kérdések és szélhelyzetek + +| Kérdés | Válasz | +|----------|--------| +| **Mi a teendő, ha az eredeti erőforrásokra van szükségem az üres adatfolyamok helyett?** | Cserélje le a `MemoryResourceHandler`‑t egy olyan kezelőre, amely a lemezről olvas vagy HTTP‑n keresztül letölti a fájlokat. | +| **Meg tudom jeleníteni a HTML‑t közvetlenül PNG‑re vagy JPEG‑re?** | Igen. Használja az `ImageRenderer`‑t a korábban beállított `ImageRenderingOptions` és `TextOptions` paraméterekkel, majd hívja a `renderer.Render(page, outputStream, ImageFormat.Png)`‑t. | +| **Kell a `WebFontStyle.Bold`?** | Nem. Ez csak példaként szerepel a betűstílus felülírására. Hagyja el, vagy állítsa `WebFontStyle.Normal`‑ra, ha nem szükséges kényszerített stílus. | +| **Működik ez .NET Core‑on?** | Az Aspose.HTML támogatja a .NET 5/6/7‑et, így ugyanaz a kód .NET Core projektekben is fut. | +| **Hogyan kezeljem hatékonyan a nagy HTML‑fájlokat?** | A `HTMLDocument`‑ot `FileStream` konstruktorral hozza létre, így a teljes fájlt nem kell egyszerre memóriába tölteni. | + +## Következtetés + +Most már tudja, hogyan **töltsön be HTML dokumentumot fájlból** az Aspose.HTML‑el, hogyan konfigurálja a **képek megjelenítési beállításait** és a **szöveg megjelenítési beállításait**, valamint hogyan alkalmazzon **egyedi erőforráskezelőt** a külső elemek irányításához. A teljes példa bemutatja a feldolgozott HTML mentését memóriastreambe, amelyet igény szerint tárolhat vagy továbbíthat. + +Ezután felfedezheti a **HTML‑ról képre konvertálást** az `HtmlSaveOptions` helyett egy `ImageRenderer` használatával, vagy kísérletezhet az **Aspose.HTML rendering** funkciókkal, például CSS média lekérdezésekkel, SVG‑támogatással és PDF‑exporttal. Ezek a kiterjesztések lehetővé teszik, hogy teljes dokumentum‑feldolgozó csővezetékeket építsen C#‑ban. + +Boldog kódolást! + +## Mit tanuljon meg legközelebb? + +Az alábbi oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutató technikáira épülnek. Minden forrás teljesen működő kódpéldákat tartalmaz lépésről‑lépésre magyarázatokkal, hogy segítsen elsajátítani további API‑funkciókat és alternatív megvalósítási megközelítéseket saját projektjeiben. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/hungarian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..3e4f8d55d --- /dev/null +++ b/html/hungarian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Tanulja meg, hogyan használja a HtmlSaveOptions osztályt C#-ban a web‑font + stílusok vezérléséhez, és hogyan mentse el a HTML fájlokat az Aspose.HTML segítségével. + Teljes kódrészlet és gyakorlati tippek is szerepelnek. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: hu +lastmod: 2026-09-10 +og_description: Hogyan használjuk a HtmlSaveOptions osztályt C#‑ban, hogy a félkövér + és dőlt web‑font stílusokat engedélyezzük HTML mentésekor az Aspose.HTML segítségével. + Kövesse a teljes példát és a legjobb gyakorlatok tippeit. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Hogyan használjuk a HtmlSaveOptions-t C#-ban az Aspose.HTML segítségével + – lépésről lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Hogyan használjuk a HtmlSaveOptions-t C#-ban az Aspose.HTML segítségével +url: /hu/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan használjuk a HtmlSaveOptions-t C#-ban az Aspose.HTML-lel + +Ha szabályozni szeretné, hogyan menti az Aspose.HTML a HTML dokumentumot, **a HtmlSaveOptions használatának megtanulása elengedhetetlen**. Ez az útmutató lépésről lépésre bemutatja, hogyan használja a HtmlSaveOptions-t a félkövér és dőlt web‑font stílusok engedélyezéséhez a dokumentum mentésekor. + +Az Aspose HTML könyvtár gazdag API-t biztosít a HTML tartalom betöltéséhez, manipulálásához és exportálásához. A útmutató végére képes lesz: + +* Betölteni egy meglévő HTML fájlt egy `HTMLDocument`-ba. +* Konfigurálni a `HtmlSaveOptions`-t, hogy meghatározott `WebFontStyle` zászlókat alkalmazzon. +* Menteni a módosított dokumentumot egy új helyre vagy egy stream-be. +* Kiterjeszteni a megoldást más betűstílusokra, egyéni CSS-re és hibakezelésre. + +## Előfeltételek + +Mielőtt elkezdené, győződjön meg róla, hogy rendelkezik a következőkkel: + +* .NET 6.0 vagy újabb telepítve. +* Érvényes licenc a **Aspose.HTML for .NET**-hez (az ingyenes próba verzió működik ebben a példában). +* Visual Studio 2022 (vagy bármely C# IDE) a kód lefordításához és futtatásához. + +A `Aspose.HTML`-en kívül nincs szükség további NuGet csomagokra. + +## 1. lépés: A projekt beállítása és a névterek importálása + +Hozzon létre egy új **Console App** projektet, és adja hozzá az Aspose.HTML NuGet csomagot: + +```bash +dotnet add package Aspose.HTML +``` + +Ezután a `Program.cs` tetején importálja a szükséges névtereket: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Ezek a névterek teszik elérhetővé a `HTMLDocument`, `HtmlSaveOptions` és `WebFontStyle` típusokat, amelyeket a teljes útmutató során használni fog. + +## 2. lépés: A forrás HTML dokumentum betöltése + +Az első művelet a feldolgozni kívánt HTML beolvasása. Cserélje le a `"YOUR_DIRECTORY/input.html"`-t a fájl tényleges elérési útjára. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` elemzi a jelölőnyelvet, felépíti a DOM fát, és készen áll a manipulációra. Ha a fájl nem létezik, kivétel keletkezik, ezért érdemes ezt a hívást try‑catch blokkba helyezni a produkciós kódban. + +## 3. lépés: HtmlSaveOptions létrehozása és konfigurálása + +`HtmlSaveOptions` lehetővé teszi a mentési folyamat finomhangolását. A félkövér és dőlt web‑font stílusok engedélyezéséhez kombinálja a megfelelő `WebFontStyle` zászlókat a bitwise OR operátorral (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Miért konfiguráljuk a WebFontStyle-t? + +Amikor egy HTML dokumentumot exportál, az Aspose.HTML beágyazhatja a web‑fontokat, amelyek megfelelnek az eredeti stílusnak. A `WebFontStyle` beállításával megmondja az exportálónak, mely betűvariánsokat kell belefoglalni. Ez csökkenti a végső fájlméretet, ha csak bizonyos stílusokra van szükség, és garantálja, hogy a megjelenített kimenet megegyezik a forrással. + +#### Gyakori variációk + +| Kívánt stílus | Megfelelő `WebFontStyle` zászló | +|---------------|-----------------------------------| +| Normál (regular) | `WebFontStyle.Regular` | +| Félkövér | `WebFontStyle.Bold` | +| Dőlt | `WebFontStyle.Italic` | +| Félkövér + Dőlt | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Összes variáns | `WebFontStyle.All` | + +Bármilyen kombinációt összevonhat, amely megfelel az Ön forgatókönyvének. + +## 4. lépés: A dokumentum mentése a konfigurált beállításokkal + +Most írja a dokumentumot egy új fájlba. A `Save` metódus elfogadja a célútvonalat és a korábban előkészített `HtmlSaveOptions` példányt. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Ha memóriastream-be kell írnia (például a fájl HTTP-n keresztüli küldéséhez), használja azt a túlterhelést, amely egy `Stream` objektumot fogad. + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## 5. lépés: Az eredmény ellenőrzése + +Nyissa meg az `output.html`-t egy böngészőben, vagy ellenőrizze a fájlt egy szövegszerkesztővel. Látnia kell, hogy a ` + + +
+ +"; +``` + +HTML tersebut mendefinisikan bentuk vektor sederhana yang mendapat manfaat dari antialiasing saat dirasterisasi. + +## Langkah 2: Inisialisasi mesin rendering + +Aspose.HTML menggunakan `HtmlRenderer` bersama dengan `ImageRenderingOptions`. Di sinilah Anda **cara mengaktifkan antialiasing** untuk bitmap akhir. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Mengapa `UseAntialiasing = true` penting**: Mesin rendering menggambar bentuk vektor, teks, dan gradien dengan presisi sub‑piksel. Mengaktifkan antialiasing memberi tahu rasterizer untuk mencampur piksel tepi dengan tetangganya, menghilangkan garis bergerigi yang muncul ketika `UseAntialiasing` dibiarkan pada nilai default `false`. Ini adalah inti dari **rendering gambar berkualitas tinggi**. + +## Langkah 3: Render HTML ke gambar + +Dengan opsi yang dikonfigurasi, panggil metode `RenderToImage`. Metode ini mengembalikan objek `Image` yang dapat Anda simpan ke disk atau alirkan langsung ke respons. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Setelah dieksekusi, `output.png` berisi lingkaran yang halus dan ter‑antialias. Buka file tersebut di penampil gambar apa pun untuk memverifikasi hasilnya. + +![how to enable antialiasing in Aspose.HTML rendering](/images/antialiasing-example.png){alt="cara mengaktifkan antialiasing dalam rendering Aspose.HTML"} + +## Langkah 4: Verifikasi output berkualitas tinggi (cara merender gambar html) + +Anda dapat secara programatis mengonfirmasi dimensi gambar dan DPI untuk memastikan rendering sesuai harapan Anda. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Output konsol tipikal: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +DPI yang meningkat dikombinasikan dengan antialiasing menghasilkan hasil bersih bahkan ketika gambar diperbesar. Ini menunjukkan **cara merender gambar html** dengan kualitas profesional. + +## Variasi umum dan kasus tepi + +| Situasi | Penyesuaian yang disarankan | +|-----------|-------------------| +| Merender halaman sangat besar (mis., aplikasi web layar penuh) | Tingkatkan `ImageRenderingOptions.Width` / `Height` atau atur `Scale` untuk mengontrol penggunaan memori. | +| Membutuhkan latar belakang transparan | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| Menargetkan JPEG untuk ukuran file lebih kecil | Ubah `ImageFormat` menjadi `ImageFormat.Jpeg` dan sesuaikan `Quality` (0‑100). | +| Menjalankan di kontainer Linux tanpa GUI | Aspose.HTML sepenuhnya headless; tidak diperlukan dependensi tambahan. | +| Anda harus menonaktifkan antialiasing untuk pengujian UI pixel‑perfect | Set `UseAntialiasing = false;` – tepi akan tajam tetapi mungkin terlihat bergerigi. | + +### Tips pro + +Saat menghasilkan batch gambar, gunakan kembali satu instance `HTMLDocument` dan hanya ubah properti `Content`-nya di antara render. Ini mengurangi beban parsing HTML yang sama berulang‑ulang dan meningkatkan throughput. + +## Daftar sumber lengkap + +Berikut adalah program lengkap yang dapat Anda salin ke proyek console‑app baru dan jalankan segera. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang terkait erat yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber mencakup contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [Cara merender html ke gambar dengan C# – Panduan Lengkap](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutorial HTML ke Gambar – Render HTML ke PNG di C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Cara Menggunakan Aspose untuk Render HTML ke PNG – Panduan Langkah‑per‑Langkah](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/indonesian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..22dbae454 --- /dev/null +++ b/html/indonesian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Tingkatkan kejelasan teks saat merender HTML dengan Aspose.HTML dengan + mengaktifkan hinting. Panduan ini menunjukkan cara mengaktifkan hinting dan mengapa + hal itu penting. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: id +lastmod: 2026-09-10 +og_description: Tingkatkan kejernihan teks di Aspose.HTML dengan mempelajari cara + mengaktifkan hinting. Ikuti panduan langkah demi langkah untuk mendapatkan teks + yang lebih jelas di setiap platform. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Tingkatkan kejernihan teks di Aspose.HTML – aktifkan hinting untuk rendering + yang lebih tajam +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Cara meningkatkan kejelasan teks di Aspose.HTML dengan hinting +url: /id/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara meningkatkan kejelasan teks di Aspose.HTML dengan hinting + +Jika Anda perlu meningkatkan kejelasan teks saat merender HTML dengan Aspose.HTML, panduan ini menunjukkan solusi lengkapnya. Dengan mengaktifkan hinting Anda akan mendapatkan glyph yang lebih tajam, terutama pada platform non‑Windows di mana rendering default dapat terlihat kabur. + +Dalam tutorial ini Anda akan mempelajari cara mengaktifkan hinting, mengapa hal itu penting untuk kejelasan teks, dan cara mengintegrasikan pengaturan tersebut ke dalam alur kerja Aspose.HTML yang umum. Tidak diperlukan dokumentasi eksternal—semua yang Anda butuhkan sudah termasuk dalam langkah‑langkah di bawah ini. + +## Prasyarat + +Sebelum memulai, pastikan Anda memiliki: + +* .NET 6.0 atau yang lebih baru (kode ini juga bekerja dengan .NET Framework 4.7+) +* Salinan berlisensi **Aspose.HTML for .NET** (versi trial gratis dapat digunakan untuk pengujian) +* Familiaritas dasar dengan C# dan Visual Studio atau IDE lain yang Anda sukai + +Persyaratan ini minimal; pendekatan yang sama dapat diterapkan pada aplikasi konsol, layanan ASP.NET Core, atau aplikasi desktop. + +## Mengapa mengaktifkan hinting meningkatkan kejelasan teks + +Hinting adalah proses yang menyesuaikan kontur setiap glyph agar selaras dengan grid piksel perangkat tampilan. Tanpa hinting, terutama pada layar berresolusi rendah atau DPI tinggi, karakter dapat terlihat blur atau tidak merata. Mengaktifkan hinting memberi tahu mesin rendering untuk menerapkan penyesuaian ini secara otomatis, menghasilkan: + +* Ketebalan goresan yang konsisten di seluruh karakter +* Keterbacaan yang lebih baik pada Linux, macOS, dan versi Windows yang lebih lama +* Tampilan profesional untuk PDF, tangkapan layar, atau pratinjau di layar + +Aspose.HTML mengekspos perilaku ini melalui properti **TextOptions.UseHinting**, yang secara default bernilai `false` demi kompatibilitas ke belakang. + +## Langkah 1: Buat instance `TextOptions` + +Langkah pertama adalah menginstansiasi kelas **TextOptions**. Objek ini mengelompokkan semua pengaturan rendering yang terkait dengan teks, sehingga mudah untuk diteruskan ke pipeline rendering. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Membuat objek tidak mengubah rendering sekaligus; objek ini hanya menyiapkan wadah untuk opsi yang akan Anda atur nanti. + +## Langkah 2: Aktifkan hinting untuk meningkatkan kejelasan teks + +Setel properti **UseHinting** menjadi `true`. Baris tunggal ini mengaktifkan algoritma hinting untuk setiap potongan teks yang dirender dengan opsi yang terkait. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Ketika `UseHinting` bernilai `true`, Aspose.HTML secara otomatis menerapkan penyesuaian sub‑pixel pada setiap glyph. Efeknya paling terasa pada font yang memiliki detail halus, seperti tipe huruf serif atau teks berukuran kecil. + +### Tips profesional: Gabungkan hinting dengan anti‑aliasing + +Jika Anda juga menginginkan tepi yang lebih halus, Anda dapat mengaktifkan anti‑aliasing bersamaan dengan hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Kedua pengaturan tersebut bersama‑sama memberikan fidelitas visual terbaik di berbagai perangkat. + +## Langkah 3: Lampirkan `TextOptions` ke proses rendering + +Anda perlu meneruskan `TextOptions` yang telah dikonfigurasi ke **HtmlRenderer** (atau kelas rendering lain yang Anda gunakan). Berikut contoh minimal yang memuat string HTML, menerapkan opsi, dan menulis output ke file PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Penjelasan baris‑baris kunci** + +* `HTMLDocument` mem-parsing markup HTML. +* `ImageDevice` menentukan dimensi output (800 × 600 piksel dalam contoh ini). +* `HtmlRenderer` melakukan rendering sebenarnya; penetapan `textOptions` ke `renderer.Options.TextOptions` memastikan hinting diterapkan. +* `device.Save("output.png")` menulis gambar akhir ke disk. + +Menjalankan kode ini menghasilkan `output.png` di mana judul dan paragraf tampak tajam, bahkan pada monitor 96 dpi. + +## Langkah 4: Verifikasi hasilnya + +Buka gambar yang dihasilkan dengan penampil apa pun. Bandingkan dengan gambar yang dirender **tanpa** hinting (set `UseHinting = false`). Anda seharusnya melihat: + +* Tepi yang lebih tajam pada huruf “H”, “e”, “l”, “o” +* Berat goresan yang lebih seragam di seluruh paragraf +* Pengurangan ghosting pada garis diagonal karakter + +Jika perbedaannya halus pada layar Anda, coba perbesar atau cetak gambar; peningkatan akan lebih jelas pada pembesaran yang lebih tinggi. + +## Variasi umum dan kasus tepi + +### Rendering ke PDF alih‑alih PNG + +Jika target Anda adalah PDF, ganti `ImageDevice` dengan `PdfDevice`. Objek `TextOptions` yang sama dapat digunakan tanpa perubahan: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Layar DPI tinggi + +Pada layar dengan faktor skala (misalnya 150 % atau 200 %), Anda mungkin ingin meningkatkan ukuran perangkat secara proporsional untuk mempertahankan kualitas visual. Hinting tetap berlaku, dan hasilnya tetap tajam. + +### Lingkungan Linux atau macOS + +Pada Linux, mesin rendering default mungkin beralih ke renderer font bitmap yang mengabaikan hinting kecuali Anda mengaktifkannya secara eksplisit. Flag `UseHinting = true` memaksa mesin untuk menerapkan hinting TrueType, menghilangkan tampilan “blur” khas pada platform tersebut. + +### Font tanpa tabel hinting + +Beberapa font OpenType modern tidak menyertakan data hinting. Dalam kasus tersebut, Aspose.HTML beralih ke auto‑hinting, yang tetap meningkatkan kejelasan dibandingkan tanpa hinting sama sekali. + +## Langkah 5: Praktik terbaik untuk kode produksi + +1. **Buat satu instance `TextOptions`** dan gunakan kembali pada panggilan rendering. Ini mengurangi overhead alokasi objek. +2. **Gabungkan hinting dengan anti‑aliasing** (`UseAntiAliasing = true`) untuk output paling halus. +3. **Uji pada platform target** (Windows, Linux, macOS) karena perbedaan visual dapat bervariasi. +4. **Catat konfigurasi rendering** dalam log produksi; ini membantu memecahkan masalah artefak visual yang tidak terduga. +5. **Jaga Aspose.HTML tetap terbaru**. Versi yang lebih baru mungkin memperkenalkan perbaikan rendering teks tambahan. + +## Contoh lengkap yang dapat dijalankan + +Berikut adalah aplikasi konsol mandiri yang mendemonstrasikan semua yang dibahas. Salin kode ke proyek konsol .NET baru, tambahkan paket NuGet Aspose.HTML, dan jalankan. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Output yang diharapkan** + +Menjalankan program menghasilkan `hinted_output.png`. Judul “Hinting in action” dan teks paragraf tampak tajam, dengan lebar goresan seragam dan tanpa tepi kabur. Jika Anda mengomentari `UseHinting = true`, gambar yang sama akan menampilkan karakter yang sedikit blur, memperlihatkan manfaat pengaturan tersebut. + +## Kesimpulan + +Anda kini mengetahui cara meningkatkan kejelasan teks di Aspose.HTML dengan mengaktifkan hinting. Prosesnya melibatkan pembuatan objek `TextOptions`, mengatur `UseHinting` (dan opsional `UseAntiAliasing`), serta melampirkan opsi ke renderer. Pendekatan ini bekerja untuk PNG, JPEG, PDF, dan format output lainnya, serta memberikan kualitas visual yang konsisten di Windows, Linux, dan macOS. + +Selanjutnya, Anda dapat menjelajahi topik terkait seperti **cara mengaktifkan hinting** untuk font khusus, **mengoptimalkan kinerja rendering**, atau **menggunakan CSS untuk mengontrol tampilan teks** di Aspose.HTML. Bereksperimenlah dengan berbagai font dan pengaturan DPI untuk melihat bagaimana hinting beradaptasi pada tiap skenario. + +Selamat coding, dan nikmati teks yang lebih tajam pada setiap rendering Aspose.HTML! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang berhubungan erat dan membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan contoh kode lengkap dengan penjelasan langkah‑demi‑langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/indonesian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..773a08315 --- /dev/null +++ b/html/indonesian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Cara merender HTML di C# menggunakan Aspose.Html. Pelajari cara memproses + HTML CSS, menyimpan HTML, mengonversi HTML ke stream, dan memuat dokumen HTML di + .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: id +lastmod: 2026-09-10 +og_description: Cara merender HTML di C# dengan Aspose.Html. Panduan ini menunjukkan + cara memproses CSS HTML, menyimpan HTML, mengonversi HTML ke stream, dan memuat + dokumen HTML secara efisien. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Render HTML di C# dengan Aspose.Html – tutorial langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Cara merender HTML di C# dengan Aspose.Html – panduan lengkap +url: /id/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara merender HTML di C# dengan Aspose.Html – panduan lengkap + +Jika Anda perlu **cara merender html** di dalam aplikasi .NET, tutorial ini menunjukkan alur kerja lengkapnya. Anda akan melihat cara memproses HTML CSS, cara menyimpan HTML, mengonversi HTML ke stream, dan memuat dokumen HTML di C# menggunakan pustaka Aspose.Html. + +Merender HTML dalam konteks server‑side sering memerlukan lebih dari sekadar memuat file—Anda juga harus menangani sumber daya yang terhubung seperti gambar dan stylesheet. Panduan ini membawa Anda melalui setiap langkah, mulai dari memuat dokumen hingga menyesuaikan penanganan sumber daya dan akhirnya mengekstrak output yang dirender sebagai memory stream. + +Pada akhir artikel Anda akan dapat: + +* Memuat dokumen HTML dari disk atau URL (`load html document c#`). +* Menyediakan `ResourceHandler` khusus untuk **process html css** secara langsung. +* Menyimpan HTML yang dirender dan **convert html to stream** untuk pemrosesan lebih lanjut. +* Menyimpan hasil menggunakan teknik **how to save html** yang bekerja di lingkungan .NET mana pun. + +## Prasyarat + +Sebelum memulai, pastikan Anda memiliki: + +* .NET 6.0 SDK atau yang lebih baru terpasang. +* Visual Studio 2022 (atau IDE apa pun yang mendukung .NET 6). +* Referensi NuGet ke **Aspose.Html** (`dotnet add package Aspose.Html`). +* File `input.html` yang ditempatkan di folder yang diketahui (contoh menggunakan `YOUR_DIRECTORY/input.html`). + +Tidak ada pustaka pihak ketiga tambahan yang diperlukan. + +## Cara merender HTML – panduan langkah‑demi‑langkah + +### Langkah 1: Muat dokumen HTML di C# + +Operasi pertama adalah membuat instance `HTMLDocument` yang mewakili markup sumber. Inilah inti dari **how to render html** dengan Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Mengapa ini penting:* Memuat dokumen mem-parsing markup dan membangun DOM internal, yang kemudian digunakan renderer untuk menerapkan CSS dan menyelesaikan sumber daya. + +### Langkah 2: Buat handler sumber daya khusus untuk **process html css** + +Saat renderer menemukan sumber daya eksternal (gambar, file CSS, font), ia meminta `ResourceHandler` untuk sebuah stream. Dengan menyediakan handler khusus Anda mendapatkan kontrol penuh atas cara setiap sumber daya diambil, diubah, atau diganti. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Mengapa ini penting:* Handler adalah tempat Anda menambahkan logika **process html css**—misalnya, meng-inline CSS, mengganti gambar dengan placeholder, atau menerapkan filter keamanan. + +### Langkah 3: Konfigurasikan `HtmlSaveOptions` untuk menggunakan handler khusus + +`HtmlSaveOptions` memberi tahu renderer cara menulis output. Tetapkan `ResourceHandler` yang baru saja Anda buat sehingga renderer memanggilnya untuk setiap referensi eksternal. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Menetapkan `EmbedCss` dan `EmbedImages` berguna ketika Anda nanti **convert html to stream** dan memerlukan hasil yang mandiri. + +### Langkah 4: Simpan dokumen dan **convert html to stream** + +Sekarang Anda dapat merender dokumen dan menangkap hasilnya dalam `MemoryStream`. Inilah inti dari **how to save html** ketika Anda menginginkan output di memori alih-alih file fisik. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Mengapa ini penting:* `MemoryStream` memberi Anda representasi biner fleksibel dari HTML yang dirender, yang dapat Anda simpan, kirim, atau manipulasi lebih lanjut tanpa menyentuh sistem file. + +## Menangani kasus tepi umum + +| Situasi | Pendekatan yang direkomendasikan | +|-----------|----------------------| +| **File CSS atau gambar yang hilang** | Di `MyResourceHandler.HandleResource`, periksa `File.Exists` sebelum membuka. Kembalikan `MemoryStream` kosong atau gambar placeholder jika file tidak ada. | +| **File HTML besar (>10 MB)** | Tingkatkan ukuran buffer default `MemoryStream` (`new MemoryStream(capacity)`) untuk menghindari alokasi ulang yang sering. | +| **URL relatif dengan segmen `..`** | Gunakan `new Uri(baseUri, info.Uri)` untuk menyelesaikan jalur lengkap sebelum mengakses sistem file. | +| **Keamanan thread di ASP.NET** | Buat instance baru `HTMLDocument` dan `MyResourceHandler` per permintaan; hindari berbagi instance antar thread. | +| **Masalah encoding** | Setel `saveOpts.Encoding = Encoding.UTF8` untuk menjamin output UTF‑8, terutama ketika sumber mengandung karakter non‑ASCII. | + +## Tips pro: gunakan kembali handler yang sama untuk banyak dokumen + +Jika Anda memproses banyak file HTML secara batch, Anda dapat mempertahankan satu instance `MyResourceHandler` dan hanya mengubah tabel pencarian internalnya. Ini mengurangi overhead alokasi objek dan mempercepat fase **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Contoh lengkap yang dapat dijalankan + +Berikut adalah program lengkap yang dapat Anda tempelkan ke aplikasi console. Program ini mendemonstrasikan **how to render html**, **process html css**, **how to save html**, **convert html to stream**, dan **load html document c#**—semua dalam satu alur. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Output yang diharapkan** (dipotong untuk singkat): + + + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber mencakup contoh kode lengkap dengan penjelasan langkah‑demi‑langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/net/working-with-html-documents/_index.md b/html/indonesian/net/working-with-html-documents/_index.md index 2d1598148..38331cd8a 100644 --- a/html/indonesian/net/working-with-html-documents/_index.md +++ b/html/indonesian/net/working-with-html-documents/_index.md @@ -39,12 +39,17 @@ Sekarang, mari tingkatkan keterampilan Anda ke tingkat berikutnya. Mengedit doku ### [Cara Menyimpan HTML di C# – Panduan Lengkap Menggunakan Penangan Sumber Daya Kustom](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Cara Membuat Heading Tebal dengan CSS & C# – Panduan Lengkap Langkah demi Langkah](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + ### [Cara Menyimpan HTML di C# – Penangan Sumber Daya Kustom & ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Cara Menyimpan HTML dengan Aspose.Html – Panduan Lengkap C#](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [Cara Mengompres HTML di C# – Panduan Lengkap Langkah demi Langkah](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Cara Menggunakan HtmlSaveOptions di C# dengan Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [Cara Memuat Dokumen HTML dari File dengan Aspose.HTML di C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/indonesian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/indonesian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..a23498c94 --- /dev/null +++ b/html/indonesian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Pelajari cara memuat dokumen HTML dari file menggunakan Aspose.HTML di + C#. Termasuk opsi rendering gambar, opsi rendering teks, dan penangan sumber daya + khusus. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: id +lastmod: 2026-09-10 +og_description: Muat dokumen HTML dari file menggunakan Aspose.HTML di C#. Panduan + ini mencakup opsi rendering, penangan sumber daya khusus, dan kode lengkap yang + dapat Anda jalankan hari ini. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Muat dokumen HTML dari file dengan Aspose.HTML – panduan langkah demi langkah + C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Cara memuat dokumen HTML dari file dengan Aspose.HTML di C# +url: /id/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara memuat dokumen HTML dari file dengan Aspose.HTML di C# + +Jika Anda perlu **memuat dokumen HTML dari file** dan mengontrol proses rendering‑nya, tutorial ini menunjukkan solusi lengkap yang siap dijalankan. Anda akan melihat cara mengonfigurasi rendering gambar, mengaktifkan text hinting, dan menyediakan custom resource handler yang mengembalikan stream kosong untuk aset eksternal. Pada akhir panduan Anda dapat menyimpan HTML yang telah diproses ke dalam memory stream atau tujuan lain yang Anda inginkan. + +Contoh ini menggunakan Aspose.HTML untuk .NET, sebuah pustaka yang menyederhanakan pemrosesan HTML, CSS, dan SVG tanpa mesin peramban. Tidak diperlukan alat eksternal, dan kode ini bekerja dengan .NET 6 atau yang lebih baru. Pastikan paket NuGet Aspose.HTML sudah terpasang sebelum memulai. + +## Prasyarat + +- .NET 6 SDK (atau versi .NET lain yang didukung oleh Aspose.HTML) +- Visual Studio 2022 atau IDE C# lainnya +- Paket NuGet Aspose.HTML untuk .NET (`Install-Package Aspose.HTML`) +- Sebuah file HTML bernama `input.html` yang ditempatkan di folder yang dapat direferensikan dari kode + +## Langkah 1: Muat dokumen HTML dari file + +Operasi pertama adalah membuat instance `HTMLDocument` yang membaca file sumber. Objek ini mewakili seluruh pohon DOM dan menyediakan metode untuk manipulasi lebih lanjut. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Mengapa ini penting:** Memuat file ke dalam `HTMLDocument` memberi Anda akses penuh ke struktur dokumen, gaya, dan sumber daya, yang kemudian dapat Anda render atau transformasi. + +## Langkah 2: Siapkan opsi rendering gambar (Aspose.HTML rendering) + +Jika Anda berencana meraster halaman nanti, mengonfigurasi rendering gambar meningkatkan kualitas visual. Antialiasing melicinkan tepi dan mengurangi artefak bergerigi. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` sangat berguna untuk grafik vektor dan teks yang akan diraster menjadi PNG atau JPEG. + +## Langkah 3: Aktifkan text hinting (text rendering options) + +Text hinting memengaruhi cara glyph disejajarkan dengan grid piksel, yang dapat membuat font berukuran kecil tampak lebih tajam. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Mengapa penting:** Saat Anda mengekspor HTML ke gambar, hinting mengurangi karakter yang blur dan memastikan tipografi konsisten di berbagai platform. + +## Langkah 4: Buat custom resource handler (custom resource handler) + +Sumber daya eksternal seperti font, gambar, atau skrip dapat direferensikan dalam HTML. `ResourceHandler` memungkinkan Anda mengontrol cara sumber daya tersebut diambil. Pada contoh ini handler mengembalikan `MemoryStream` kosong untuk setiap permintaan, sehingga secara efektif menghapus aset eksternal. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Kapan digunakan:** Pola ini berguna untuk lingkungan dengan batasan keamanan, pengujian unit, atau ketika Anda hanya membutuhkan markup tanpa file eksternal. + +## Langkah 5: Susun opsi penyimpanan HTML (HTML to image conversion) + +Semua komponen—resource handler, pengaturan rendering, dan gaya font—dilekatkan pada objek `HtmlSaveOptions`. Objek ini memberi tahu Aspose.HTML cara men-serialize dokumen. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Penjelasan:** `WebFontStyle` dapat memaksa gaya tertentu (misalnya, bold) untuk web font yang mungkin tidak tersedia. `ImageRenderingOptions` dan `TextOptions` yang kami konfigurasikan sebelumnya disuntikkan di sini, memastikan mereka memengaruhi rasterisasi apa pun yang terjadi kemudian. + +## Langkah 6: Simpan dokumen ke memory stream (solusi lengkap) + +Akhirnya, tulis HTML yang telah diproses ke dalam `MemoryStream`. Dari sini Anda dapat menulis stream ke file, mengirimnya melalui jaringan, atau meneruskannya ke API lain. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Hasil:** `output.html` kini berisi markup yang sama dengan `input.html` tetapi semua sumber daya eksternal telah diganti dengan stream kosong, dan preferensi rendering telah disematkan ke dalam opsi penyimpanan. + +## Contoh lengkap yang dapat dijalankan + +Menggabungkan semua langkah menghasilkan program mandiri yang dapat Anda salin, tempel, dan jalankan. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Menjalankan program ini menghasilkan `output.html` di direktori saat ini. Buka file tersebut di peramban untuk memastikan markup asli dimuat, tetapi gambar, font, atau skrip yang terhubung tidak ada (karena telah diganti dengan stream kosong). + +## Pertanyaan umum dan kasus tepi + +| Pertanyaan | Jawaban | +|----------|--------| +| **Bagaimana jika saya membutuhkan sumber daya asli alih‑alih stream kosong?** | Ganti `MemoryResourceHandler` dengan handler yang membaca file dari disk atau mengunduhnya melalui HTTP. | +| **Bisakah saya merender HTML langsung ke PNG atau JPEG?** | Ya. Gunakan `ImageRenderer` dengan `ImageRenderingOptions` dan `TextOptions` yang sama, lalu panggil `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Apakah `WebFontStyle.Bold` wajib?** | Tidak. Itu hanya contoh cara mengganti gaya font. Hapus atau ubah menjadi `WebFontStyle.Normal` jika tidak memerlukan gaya paksa. | +| **Apakah ini bekerja pada .NET Core?** | Aspose.HTML mendukung .NET 5/6/7, sehingga kode yang sama dapat dijalankan pada proyek .NET Core. | +| **Bagaimana cara menangani file HTML besar secara efisien?** | Stream file ke `HTMLDocument` menggunakan konstruktor `FileStream` untuk menghindari memuat seluruh file ke memori sekaligus. | + +## Kesimpulan + +Anda kini tahu cara **memuat dokumen HTML dari file** menggunakan Aspose.HTML, mengonfigurasi **opsi rendering gambar** dan **opsi rendering teks**, serta menerapkan **custom resource handler** untuk mengontrol aset eksternal. Contoh lengkap menunjukkan cara menyimpan HTML yang telah diproses ke dalam memory stream, yang dapat Anda persist atau kirim sesuai kebutuhan. + +Selanjutnya, Anda dapat menjelajahi **konversi HTML ke gambar** dengan mengganti `HtmlSaveOptions` menjadi `ImageRenderer`, atau bereksperimen dengan fitur **Aspose.HTML rendering** seperti media query CSS, dukungan SVG, dan ekspor PDF. Ekstensi‑ekstensi ini memungkinkan Anda membangun pipeline pemrosesan dokumen yang kaya sepenuhnya dalam C#. + +Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang dapat dijalankan dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/indonesian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..98f52bf2f --- /dev/null +++ b/html/indonesian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,315 @@ +--- +category: general +date: 2026-09-10 +description: Pelajari cara menggunakan HtmlSaveOptions dalam C# untuk mengontrol gaya + web‑font dan menyimpan file HTML dengan Aspose.HTML. Contoh kode lengkap serta tips + praktis disertakan. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: id +lastmod: 2026-09-10 +og_description: Cara menggunakan HtmlSaveOptions di C# untuk mengaktifkan gaya huruf + tebal dan miring pada web‑font saat menyimpan HTML dengan Aspose.HTML. Ikuti contoh + lengkap dan tips praktik terbaik. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Cara menggunakan HtmlSaveOptions di C# dengan Aspose.HTML – panduan langkah + demi langkah +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Cara menggunakan HtmlSaveOptions di C# dengan Aspose.HTML +url: /id/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Menggunakan HtmlSaveOptions di C# dengan Aspose.HTML + +Jika Anda perlu mengontrol cara Aspose.HTML menyimpan dokumen HTML, **memahami cara menggunakan HtmlSaveOptions sangat penting**. Tutorial ini menunjukkan langkah‑demi‑langkah cara menggunakan HtmlSaveOptions untuk mengaktifkan gaya web‑font tebal dan miring saat menyimpan dokumen. + +Pustaka Aspose HTML menyediakan API yang kaya untuk memuat, memanipulasi, dan mengekspor konten HTML. Pada akhir panduan ini Anda akan dapat: + +* Memuat file HTML yang ada ke dalam sebuah `HTMLDocument`. +* Mengonfigurasi `HtmlSaveOptions` untuk menerapkan flag `WebFontStyle` tertentu. +* Menyimpan dokumen yang telah dimodifikasi ke lokasi baru atau ke stream. +* Memperluas solusi untuk gaya font lain, CSS khusus, dan penanganan error. + +## Prasyarat + +Sebelum memulai, pastikan Anda memiliki: + +* .NET 6.0 atau yang lebih baru terpasang. +* Lisensi yang valid untuk **Aspose.HTML for .NET** (versi trial gratis dapat digunakan untuk contoh ini). +* Visual Studio 2022 (atau IDE C# lain) untuk mengkompilasi dan menjalankan kode. + +Tidak ada paket NuGet tambahan yang diperlukan selain `Aspose.HTML`. + +## Langkah 1: Siapkan proyek dan impor namespace + +Buat proyek **Console App** baru dan tambahkan paket NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Kemudian, di bagian atas `Program.cs`, impor namespace yang diperlukan: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Namespace ini menyediakan tipe `HTMLDocument`, `HtmlSaveOptions`, dan `WebFontStyle` yang akan Anda gunakan sepanjang tutorial. + +## Langkah 2: Muat dokumen HTML sumber + +Operasi pertama adalah membaca HTML yang ingin Anda proses. Ganti `"YOUR_DIRECTORY/input.html"` dengan jalur sebenarnya ke file Anda. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` mem-parsing markup, membangun pohon DOM, dan menyiapkannya untuk manipulasi. Jika file tidak ada, akan dilemparkan exception, sehingga Anda mungkin ingin membungkus pemanggilan ini dalam blok try‑catch untuk kode produksi. + +## Langkah 3: Buat dan konfigurasikan HtmlSaveOptions + +`HtmlSaveOptions` memungkinkan Anda menyesuaikan proses penyimpanan. Untuk mengaktifkan gaya web‑font tebal dan mirik, gabungkan flag `WebFontStyle` yang bersesuaian menggunakan operator bitwise OR (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Mengapa mengonfigurasi WebFontStyle? + +Saat Anda mengekspor dokumen HTML, Aspose.HTML dapat menyematkan web font yang cocok dengan gaya asli. Dengan mengatur `WebFontStyle`, Anda memberi tahu exporter varian font mana yang harus disertakan. Ini mengurangi ukuran file akhir ketika Anda hanya membutuhkan gaya tertentu dan memastikan bahwa output yang di‑render cocok dengan sumber. + +#### Variasi umum + +| Gaya yang diinginkan | Flag `WebFontStyle` yang bersesuaian | +|----------------------|--------------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Semua varian | `WebFontStyle.All` | + +Anda dapat menggabungkan kombinasi apa pun yang sesuai dengan skenario Anda. + +## Langkah 4: Simpan dokumen dengan opsi yang telah dikonfigurasi + +Sekarang tulis dokumen ke file baru. Metode `Save` menerima jalur target dan instance `HtmlSaveOptions` yang telah Anda siapkan. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Jika Anda perlu menulis ke memory stream (misalnya, untuk mengirim file melalui HTTP), gunakan overload yang menerima objek `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Langkah 5: Verifikasi hasilnya + +Buka `output.html` di browser atau periksa file dengan editor teks. Anda akan melihat bahwa blok ` + + +
+ +"; +``` + +L'HTML definisce una semplice forma vettoriale che beneficia dell'antialiasing quando rasterizzata. + +## Passo 2: Inizializzare il motore di rendering + +Aspose.HTML utilizza un `HtmlRenderer` insieme a `ImageRenderingOptions`. È qui che devi **how to enable antialiasing** per la bitmap finale. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Perché `UseAntialiasing = true` è importante**: Il motore di rendering disegna forme vettoriali, testo e gradienti usando precisione sub‑pixel. Abilitare l'antialiasing indica al rasterizzatore di mescolare i pixel di bordo con i loro vicini, eliminando le linee frastagliate che appaiono quando `UseAntialiasing` rimane al valore predefinito `false`. Questo è il fulcro del **rendering di immagini ad alta qualità**. + +## Passo 3: Renderizzare l'HTML in un'immagine + +Con le opzioni configurate, chiama il metodo `RenderToImage`. Il metodo restituisce un oggetto `Image` che puoi salvare su disco o inviare direttamente in una risposta. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Dopo l'esecuzione, `output.png` contiene un cerchio liscio e antialiasato. Apri il file in qualsiasi visualizzatore di immagini per verificare il risultato. + +![come abilitare l'antialiasing nel rendering di Aspose.HTML](/images/antialiasing-example.png){alt="come abilitare l'antialiasing nel rendering di Aspose.HTML"} + +## Passo 4: Verificare l'output ad alta qualità (how to render html image) + +Puoi confermare programmaticamente le dimensioni dell'immagine e i DPI per assicurarti che il rendering soddisfi le tue aspettative. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Output tipico della console: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +L'aumento dei DPI combinato con l'antialiasing produce un risultato pulito anche quando l'immagine è ingrandita. Questo dimostra **how to render html image** con qualità professionale. + +## Variazioni comuni e casi limite + +| Situazione | Modifica consigliata | +|-----------|-------------------| +| Renderizzare pagine molto grandi (es. app web a schermo intero) | Aumentare `ImageRenderingOptions.Width` / `Height` o impostare `Scale` per controllare l'uso della memoria. | +| Necessità di sfondo trasparente | Impostare `imageOptions.BackgroundColor = Color.Transparent;` | +| Obiettivo JPEG per ridurre le dimensioni del file | Cambiare `ImageFormat` in `ImageFormat.Jpeg` e regolare `Quality` (0‑100). | +| Esecuzione in un container Linux senza GUI | Aspose.HTML è completamente headless; non sono necessarie dipendenze aggiuntive. | +| Devi disabilitare l'antialiasing per un test UI pixel‑perfect | Impostare `UseAntialiasing = false;` – i bordi saranno nitidi ma potrebbero apparire frastagliati. | + +### Consiglio professionale + +Quando generi un batch di immagini, riutilizza una singola istanza di `HTMLDocument` e modifica solo la sua proprietà `Content` tra le renderizzazioni. Questo riduce l'overhead di parsing dello stesso HTML ripetutamente e migliora il throughput. + +## Elenco completo del codice sorgente + +Di seguito trovi il programma completo che puoi copiare in un nuovo progetto console‑app e eseguire immediatamente. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Cosa dovresti imparare dopo? + +I seguenti tutorial coprono argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Come renderizzare HTML in un'immagine con C# – Guida completa](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutorial HTML to Image – Renderizzare HTML in PNG con C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Come usare Aspose per renderizzare HTML in PNG – Guida passo‑passo](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/italian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/italian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..57c14f515 --- /dev/null +++ b/html/italian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Migliora la chiarezza del testo durante il rendering di HTML con Aspose.HTML + abilitando il hinting. Questa guida mostra come abilitare il hinting e perché è + importante. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: it +lastmod: 2026-09-10 +og_description: Migliora la chiarezza del testo in Aspose.HTML imparando come abilitare + il hinting. Segui la guida passo‑passo per ottenere un testo più chiaro su ogni + piattaforma. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Migliora la chiarezza del testo in Aspose.HTML – abilita il hinting per + una resa più nitida +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Come migliorare la chiarezza del testo in Aspose.HTML con l'hinting +url: /it/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come migliorare la chiarezza del testo in Aspose.HTML con il hinting + +Se hai bisogno di migliorare la chiarezza del testo durante il rendering di HTML con Aspose.HTML, questa guida ti mostra una soluzione completa. Abilitando il hinting otterrai glifi più nitidi, soprattutto su piattaforme non‑Windows dove il rendering predefinito può apparire sfocato. + +In questo tutorial imparerai come abilitare il hinting, perché è importante per la chiarezza del testo e come integrare l’impostazione in un tipico flusso di lavoro di Aspose.HTML. Non è necessaria alcuna documentazione esterna—tutto il necessario è incluso nei passaggi seguenti. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +* .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.7+) +* Una copia con licenza di **Aspose.HTML for .NET** (la versione di prova gratuita è sufficiente per i test) +* Familiarità di base con C# e Visual Studio o qualsiasi IDE tu preferisca + +Questi requisiti sono minimi; lo stesso approccio funziona in app console, servizi ASP.NET Core o applicazioni desktop. + +## Perché abilitare il hinting migliora la chiarezza del testo + +Il hinting è un processo che regola il contorno di ogni glifo per allinearlo alla griglia di pixel del dispositivo di visualizzazione. Senza hinting, soprattutto su schermi a bassa risoluzione o ad alta DPI, i caratteri possono apparire sfocati o irregolari. Abilitare il hinting indica al motore di rendering di applicare automaticamente questi aggiustamenti, producendo: + +* Spessore del tratto coerente tra i caratteri +* Maggiore leggibilità su Linux, macOS e versioni più vecchie di Windows +* Un aspetto professionale per PDF, screenshot o anteprime su schermo + +Aspose.HTML espone questo comportamento tramite la proprietà **TextOptions.UseHinting**, che per impostazione predefinita è `false` per garantire la retrocompatibilità. + +## Passo 1: Creare un’istanza di `TextOptions` + +Il primo passo è istanziare la classe **TextOptions**. Questo oggetto raggruppa tutte le impostazioni di rendering relative al testo, facilitandone il passaggio al pipeline di rendering. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +La creazione dell’oggetto non altera ancora il rendering; prepara semplicemente un contenitore per le opzioni che imposterai in seguito. + +## Passo 2: Abilitare il hinting per migliorare la chiarezza del testo + +Imposta la proprietà **UseHinting** su `true`. Questa singola riga attiva l’algoritmo di hinting per ogni pezzo di testo renderizzato con le opzioni associate. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Quando `UseHinting` è `true`, Aspose.HTML applica automaticamente aggiustamenti sub‑pixel a ciascun glifo. L’effetto è più evidente su font che contengono dettagli fini, come i caratteri serif o il testo di piccole dimensioni. + +### Consiglio professionale: combinare hinting e anti‑aliasing + +Se desideri anche bordi più lisci, puoi abilitare l’anti‑aliasing insieme al hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Entrambe le impostazioni insieme offrono la migliore fedeltà visiva su un’ampia gamma di dispositivi. + +## Passo 3: Collegare `TextOptions` al processo di rendering + +Devi passare il `TextOptions` configurato a **HtmlRenderer** (o a qualsiasi altra classe di rendering che utilizzi). Di seguito trovi un esempio minimale che carica una stringa HTML, applica le opzioni e scrive l’output in un file PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Spiegazione delle righe chiave** + +* `HTMLDocument` analizza il markup HTML. +* `ImageDevice` definisce le dimensioni di output (800 × 600 pixel in questo caso). +* `HtmlRenderer` esegue il rendering vero e proprio; assegnare `textOptions` a `renderer.Options.TextOptions` garantisce che il hinting venga applicato. +* `device.Save("output.png")` scrive l’immagine finale su disco. + +Eseguendo questo codice otterrai `output.png` in cui intestazione e paragrafo appaiono nitidi, anche su un monitor a 96 dpi. + +## Passo 4: Verificare il risultato + +Apri l’immagine generata con qualsiasi visualizzatore. Confrontala con un’immagine renderizzata **senza** hinting (imposta `UseHinting = false`). Dovresti notare: + +* Bordi più nitidi sulle lettere “H”, “e”, “l”, “o” +* Peso del tratto più uniforme lungo tutto il paragrafo +* Riduzione dei ghosting sulle linee diagonali dei caratteri + +Se la differenza è sottile sul tuo schermo, prova a ingrandire o a stampare l’immagine; il miglioramento diventa più evidente a ingrandimenti maggiori. + +## Varianti comuni e casi limite + +### Rendering in PDF invece di PNG + +Se il tuo target è un PDF, sostituisci `ImageDevice` con `PdfDevice`. Lo stesso oggetto `TextOptions` funziona senza modifiche: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Schermi ad alta DPI + +Su schermi con fattori di scaling (es. 150 % o 200 %), potresti voler aumentare proporzionalmente le dimensioni del device per mantenere la qualità visiva. Il hinting continua a essere applicato e il risultato resta nitido. + +### Ambienti Linux o macOS + +Su Linux, il motore di rendering predefinito può ricorrere a un renderer bitmap che ignora il hinting a meno che non lo abiliti esplicitamente. Il flag `UseHinting = true` costringe il motore ad applicare il hinting TrueType, eliminando l’aspetto tipico “sfocato” su queste piattaforme. + +### Font senza tabelle di hinting + +Alcuni font OpenType moderni omettono i dati di hinting. In questi casi, Aspose.HTML ricade sull’auto‑hinting, che migliora comunque la chiarezza rispetto a nessun hinting. + +## Passo 5: Best practice per il codice di produzione + +1. **Crea un’unica istanza di `TextOptions`** e riutilizzala in tutte le chiamate di rendering. Questo riduce l’overhead di allocazione degli oggetti. +2. **Combina hinting e anti‑aliasing** (`UseAntiAliasing = true`) per l’output più fluido. +3. **Testa sulle piattaforme target** (Windows, Linux, macOS) perché le differenze visive possono variare. +4. **Registra la configurazione di rendering** nei log di produzione; aiuta a diagnosticare eventuali artefatti visivi inattesi. +5. **Mantieni Aspose.HTML aggiornato**. Le versioni più recenti possono introdurre ulteriori miglioramenti al rendering del testo. + +## Esempio completo funzionante + +Di seguito trovi un’applicazione console autonoma che dimostra tutto quanto discusso. Copia il codice in un nuovo progetto console .NET, aggiungi il pacchetto NuGet Aspose.HTML e avvialo. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Output previsto** + +L’esecuzione del programma crea `hinted_output.png`. L’intestazione “Hinting in action” e il testo del paragrafo appaiono nitidi, con spessori di tratto uniformi e senza bordi sfocati. Se commenti `UseHinting = true`, la stessa immagine mostrerà caratteri leggermente sfocati, illustrando il vantaggio dell’impostazione. + +## Conclusione + +Ora sai come migliorare la chiarezza del testo in Aspose.HTML abilitando il hinting. Il processo prevede la creazione di un oggetto `TextOptions`, l’impostazione di `UseHinting` (e opzionalmente `UseAntiAliasing`), e il collegamento delle opzioni al renderer. Questo approccio funziona per PNG, JPEG, PDF e altri formati di output, garantendo una qualità visiva costante su Windows, Linux e macOS. + +Successivamente, potresti approfondire argomenti correlati come **come abilitare il hinting per font personalizzati**, **ottimizzare le prestazioni di rendering**, o **usare CSS per controllare l’aspetto del testo** in Aspose.HTML. Sperimenta con diversi font e impostazioni DPI per vedere come il hinting si adatta a ciascuno scenario. + +Buon coding e goditi testi più nitidi in ogni rendering di Aspose.HTML! + +## Cosa dovresti imparare dopo? + +I tutorial seguenti coprono argomenti strettamente correlati che si basano sulle tecniche illustrate in questa guida. Ogni risorsa include esempi di codice completi con spiegazioni passo‑a‑passo per aiutarti a padroneggiare funzionalità aggiuntive dell’API e a esplorare approcci alternativi nei tuoi progetti. + +- [Come renderizzare HTML in PNG con Aspose – Guida completa](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Come usare Aspose per renderizzare HTML in PNG – Guida passo‑a‑passo](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Creare documento HTML con testo formattato ed esportare in PDF – Guida completa](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/italian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/italian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..ce73ccdd1 --- /dev/null +++ b/html/italian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,303 @@ +--- +category: general +date: 2026-09-10 +description: Come renderizzare HTML in C# usando Aspose.Html. Impara a elaborare HTML + e CSS, salvare HTML, convertire HTML in stream e caricare un documento HTML in .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: it +lastmod: 2026-09-10 +og_description: Come rendere HTML in C# con Aspose.Html. Questa guida ti mostra come + elaborare HTML e CSS, salvare HTML, convertire HTML in stream e caricare il documento + HTML in modo efficiente. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Render HTML in C# con Aspose.Html – tutorial passo‑passo +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Come rendere HTML in C# con Aspose.Html – guida completa +url: /it/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come rendere HTML in C# con Aspose.Html – guida completa + +Se hai bisogno di **how to render html** all'interno di un'applicazione .NET, questo tutorial ti mostra l'intero flusso di lavoro. Vedrai come elaborare HTML CSS, come salvare HTML, convertire HTML in stream e caricare un documento HTML in C# usando la libreria Aspose.Html. + +Il rendering di HTML in un contesto server‑side spesso richiede più del semplice caricamento di un file—devi anche gestire le risorse collegate come immagini e fogli di stile. Questa guida ti accompagna passo passo, dal caricamento del documento alla personalizzazione della gestione delle risorse e infine all'estrazione dell'output renderizzato come stream di memoria. + +Al termine dell'articolo sarai in grado di: + +* Caricare un documento HTML da disco o da un URL (`load html document c#`). +* Fornire un `ResourceHandler` personalizzato per **process html css** al volo. +* Salvare l'HTML renderizzato e **convert html to stream** per ulteriori elaborazioni. +* Persistere il risultato usando tecniche **how to save html** che funzionano in qualsiasi ambiente .NET. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +* .NET 6.0 SDK o versioni successive installate. +* Visual Studio 2022 (o qualsiasi IDE che supporti .NET 6). +* Un riferimento NuGet a **Aspose.Html** (`dotnet add package Aspose.Html`). +* Un file `input.html` posizionato in una cartella nota (l'esempio utilizza `YOUR_DIRECTORY/input.html`). + +Non sono richieste librerie di terze parti aggiuntive. + +## Come rendere HTML – guida passo‑passo + +### Passo 1: Carica il documento HTML in C# + +La prima operazione è creare un'istanza `HTMLDocument` che rappresenta il markup sorgente. Questo è il cuore di **how to render html** con Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Perché è importante:* Il caricamento del documento analizza il markup e costruisce un DOM interno, che il renderer utilizza successivamente per applicare il CSS e risolvere le risorse. + +### Passo 2: Crea un gestore di risorse personalizzato per **process html css** + +Quando il renderer incontra risorse esterne (immagini, file CSS, font), richiede a un `ResourceHandler` uno stream. Fornendo un gestore personalizzato ottieni il pieno controllo su come ogni risorsa viene recuperata, trasformata o sostituita. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Perché è importante:* Il gestore è il punto in cui inserisci la logica **process html css**—ad esempio, incorporare CSS inline, sostituire le immagini con segnaposto o applicare filtri di sicurezza. + +### Passo 3: Configura `HtmlSaveOptions` per usare il gestore personalizzato + +`HtmlSaveOptions` indica al renderer come scrivere l'output. Assegna il `ResourceHandler` appena creato in modo che il renderer lo chiami per ogni riferimento esterno. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Impostare `EmbedCss` e `EmbedImages` è utile quando successivamente **convert html to stream** e hai bisogno di un risultato autonomo. + +### Passo 4: Salva il documento e **convert html to stream** + +Ora puoi renderizzare il documento e catturare il risultato in un `MemoryStream`. Questo è il cuore di **how to save html** quando desideri l'output in memoria anziché in un file fisico. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Perché è importante:* Il `MemoryStream` ti fornisce una rappresentazione binaria flessibile dell'HTML renderizzato, che puoi memorizzare, trasmettere o manipolare ulteriormente senza toccare il file system. + +## Gestione dei casi limite comuni + +| Situazione | Approccio consigliato | +|-----------|----------------------| +| **File CSS o immagine mancanti** | In `MyResourceHandler.HandleResource`, verifica `File.Exists` prima di aprire. Restituisci un `MemoryStream` vuoto o un'immagine segnaposto se il file è assente. | +| **File HTML di grandi dimensioni (>10 MB)** | Aumenta la dimensione predefinita del buffer del `MemoryStream` (`new MemoryStream(capacity)`) per evitare riallocazioni frequenti. | +| **URL relative con segmenti `..`** | Usa `new Uri(baseUri, info.Uri)` per risolvere il percorso completo prima di accedere al file system. | +| **Sicurezza dei thread in ASP.NET** | Istanzia un nuovo `HTMLDocument` e `MyResourceHandler` per ogni richiesta; evita di condividere le istanze tra thread. | +| **Problemi di codifica** | Imposta `saveOpts.Encoding = Encoding.UTF8` per garantire un output UTF‑8, soprattutto quando la sorgente contiene caratteri non ASCII. | + +## Consiglio professionale: riutilizza lo stesso gestore per più documenti + +Se elabori molti file HTML in batch, puoi mantenere una singola istanza di `MyResourceHandler` e modificare solo la sua tabella di ricerca interna. Questo riduce l'overhead di allocazione degli oggetti e velocizza la fase **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Esempio completo, eseguibile + +Di seguito trovi un programma completo che puoi incollare in un'applicazione console. Dimostra **how to render html**, **process html css**, **how to save html**, **convert html to stream** e **load html document c#**—tutto in un unico flusso. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Output previsto** (troncato per brevità): + + + +## Cosa dovresti imparare dopo? + +I tutorial seguenti coprono argomenti strettamente correlati che si basano sulle tecniche illustrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare ulteriori funzionalità dell'API e a esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Come salvare HTML con Aspose.Html – Guida completa C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Come usare Aspose per renderizzare HTML in PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Come usare Aspose per renderizzare HTML in PNG – Guida passo‑passo](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/italian/net/working-with-html-documents/_index.md b/html/italian/net/working-with-html-documents/_index.md index 282b5e03a..db341ec33 100644 --- a/html/italian/net/working-with-html-documents/_index.md +++ b/html/italian/net/working-with-html-documents/_index.md @@ -36,10 +36,13 @@ Una volta apprese le basi, approfondiremo il processo di creazione. In questa se Ora, portiamo le tue competenze al livello successivo. La modifica di documenti HTML è un compito comune per gli sviluppatori web e Aspose.HTML semplifica notevolmente questo processo. In questa sezione, parleremo della creazione, manipolazione e stile dei documenti. Scoprirai come migliorare l'aspetto e la funzionalità dei tuoi contenuti web, rendendoli accattivanti e facili da usare. +### [Come caricare un documento HTML da file con Aspose.HTML in C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [Come salvare HTML in C# – Guida completa con un gestore di risorse personalizzato](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Come rendere grassetto un'intestazione con CSS e C# – Guida completa passo‑passo](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [Come salvare HTML in C# – Gestori di risorse personalizzati e ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Come salvare HTML con Aspose.Html – Guida completa C#](./how-to-save-html-with-aspose-html-complete-c-guide/) +### [Come utilizzare HtmlSaveOptions in C# con Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) ### [Come comprimere HTML in C# – Guida completa passo‑passo](./how-to-zip-html-in-c-complete-step-by-step-guide/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/italian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/italian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..182a966e1 --- /dev/null +++ b/html/italian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Impara a caricare un documento HTML da file usando Aspose.HTML in C#. + Include opzioni di rendering delle immagini, opzioni di rendering del testo e un + gestore di risorse personalizzato. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: it +lastmod: 2026-09-10 +og_description: Carica un documento HTML da file usando Aspose.HTML in C#. Questa + guida copre le opzioni di rendering, un gestore di risorse personalizzato e il codice + completo che puoi eseguire oggi. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Carica documento HTML da file con Aspose.HTML – guida passo‑passo C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Come caricare un documento HTML da file con Aspose.HTML in C# +url: /it/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come caricare un documento HTML da file con Aspose.HTML in C# + +Se hai bisogno di **caricare un documento HTML da file** e controllarne il rendering, questo tutorial ti mostra una soluzione completa, pronta all'uso. Vedrai come configurare il rendering delle immagini, abilitare il text hinting e fornire un gestore di risorse personalizzato che restituisce stream vuoti per le risorse esterne. Alla fine della guida potrai salvare l'HTML elaborato in un memory stream o in qualsiasi altra destinazione preferita. + +L'esempio utilizza Aspose.HTML per .NET, una libreria che semplifica l'elaborazione di HTML, CSS e SVG senza un motore di browser. Non sono necessari strumenti esterni e il codice funziona con .NET 6 o versioni successive. Assicurati di avere il pacchetto NuGet Aspose.HTML installato prima di iniziare. + +## Prerequisiti + +- .NET 6 SDK (o qualsiasi versione .NET supportata da Aspose.HTML) +- Visual Studio 2022 o un altro IDE C# +- Pacchetto NuGet Aspose.HTML per .NET (`Install-Package Aspose.HTML`) +- Un file HTML chiamato `input.html` posizionato in una cartella a cui puoi fare riferimento dal codice + +## Passo 1: Caricare il documento HTML da un file + +La prima operazione è creare un'istanza di `HTMLDocument` che legge il file di origine. Questo oggetto rappresenta l'intero albero DOM e fornisce metodi per ulteriori manipolazioni. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Perché è importante:** Caricare il file in un `HTMLDocument` ti dà pieno accesso alla struttura, agli stili e alle risorse del documento, che potrai successivamente renderizzare o trasformare. + +## Passo 2: Configurare le opzioni di rendering delle immagini (rendering Aspose.HTML) + +Se prevedi di rasterizzare la pagina in seguito, configurare il rendering delle immagini migliora la qualità visiva. L'antialiasing leviga i bordi e riduce gli artefatti a scalini. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Suggerimento:** `UseAntialiasing` è particolarmente utile per grafica vettoriale e testo che verrà rasterizzato in PNG o JPEG. + +## Passo 3: Abilitare il text hinting (opzioni di rendering del testo) + +Il text hinting influenza il modo in cui i glifi sono allineati alle griglie di pixel, il che può rendere i caratteri di piccole dimensioni più nitidi. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Perché è importante:** Quando in seguito esporti l'HTML in un'immagine, il hinting riduce i caratteri sfocati e garantisce una tipografia coerente su tutte le piattaforme. + +## Passo 4: Creare un gestore di risorse personalizzato (custom resource handler) + +Le risorse esterne come font, immagini o script possono essere referenziate nell'HTML. Un `ResourceHandler` ti consente di controllare come tali risorse vengono recuperate. In questo esempio il gestore restituisce un `MemoryStream` vuoto per ogni richiesta, rimuovendo efficacemente le risorse esterne. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Quando usarlo:** Questo modello è utile per ambienti con restrizioni di sicurezza, test unitari, o quando hai bisogno solo del markup senza file esterni. + +## Passo 5: Assemblare le opzioni di salvataggio HTML (conversione HTML in immagine) + +Tutti i componenti — gestore delle risorse, impostazioni di rendering e stile del font — sono collegati a un oggetto `HtmlSaveOptions`. Questo oggetto indica ad Aspose.HTML come serializzare il documento. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Spiegazione:** `WebFontStyle` può forzare uno stile particolare (ad es., grassetto) per i web font che potrebbero mancare. Le `ImageRenderingOptions` e le `TextOptions` configurate in precedenza sono inserite qui, garantendo che influenzino qualsiasi rasterizzazione successiva. + +## Passo 6: Salvare il documento in un memory stream (soluzione completa) + +Infine, scrivi l'HTML elaborato in un `MemoryStream`. Da qui puoi scrivere lo stream su un file, inviarlo su una rete, o passarlo a un'altra API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Risultato:** `output.html` ora contiene lo stesso markup di `input.html` ma con tutte le risorse esterne sostituite da stream vuoti, e con le preferenze di rendering incorporate nelle opzioni di salvataggio. + +## Esempio completo eseguibile + +Unendo tutti i passaggi ottieni un programma autonomo che puoi copiare, incollare ed eseguire. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Eseguendo questo programma viene generato `output.html` nella directory corrente. Apri il file in un browser per confermare che il markup originale viene caricato, ma tutte le immagini, i font o gli script collegati sono assenti (sono stati sostituiti da stream vuoti). + +## Domande comuni e casi limite + +| Domanda | Risposta | +|----------|--------| +| **E se ho bisogno delle risorse originali invece di stream vuoti?** | Sostituisci `MemoryResourceHandler` con un gestore che legge i file dal disco o li scarica via HTTP. | +| **Posso renderizzare l'HTML direttamente in PNG o JPEG?** | Sì. Usa `ImageRenderer` con le stesse `ImageRenderingOptions` e `TextOptions` configurate, quindi chiama `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **`WebFontStyle.Bold` è obbligatorio?** | No. È mostrato come esempio di sovrascrittura dello stile del font. Omettilo o cambialo in `WebFontStyle.Normal` se non ti serve uno stile forzato. | +| **Funziona su .NET Core?** | Aspose.HTML supporta .NET 5/6/7, quindi lo stesso codice funziona nei progetti .NET Core. | +| **Come gestire file HTML di grandi dimensioni in modo efficiente?** | Esegui lo streaming del file in `HTMLDocument` usando il costruttore `FileStream` per evitare di caricare l'intero file in memoria contemporaneamente. | + +## Conclusione + +Ora sai come **caricare un documento HTML da file** usando Aspose.HTML, configurare **opzioni di rendering delle immagini** e **opzioni di rendering del testo**, e applicare un **gestore di risorse personalizzato** per controllare le risorse esterne. L'esempio completo dimostra come salvare l'HTML elaborato in un memory stream, che puoi persistere o trasmettere secondo necessità. + +Successivamente, potresti esplorare la **conversione da HTML a immagine** sostituendo `HtmlSaveOptions` con un `ImageRenderer`, o sperimentare le funzionalità di **rendering Aspose.HTML** come le media query CSS, il supporto SVG e l'esportazione PDF. Queste estensioni ti consentono di costruire pipeline di elaborazione documenti ricche interamente in C#. + +Buona programmazione! + +## Cosa dovresti imparare dopo? + +I seguenti tutorial coprono argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare ulteriori funzionalità dell'API ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Carica HTML usando un server remoto in .NET con Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Carica HTML usando URL in .NET con Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Come salvare HTML in C# – Guida completa usando un gestore di risorse personalizzato](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/italian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/italian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..311d02588 --- /dev/null +++ b/html/italian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Scopri come utilizzare HtmlSaveOptions in C# per controllare gli stili + dei web‑font e salvare file HTML con Aspose.HTML. Include un esempio di codice completo + e consigli pratici. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: it +lastmod: 2026-09-10 +og_description: Come utilizzare HtmlSaveOptions in C# per abilitare gli stili di carattere + web in grassetto e corsivo durante il salvataggio di HTML con Aspose.HTML. Segui + l'esempio completo e i consigli delle migliori pratiche. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Come utilizzare HtmlSaveOptions in C# con Aspose.HTML – guida passo‑passo +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Come utilizzare HtmlSaveOptions in C# con Aspose.HTML +url: /it/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come utilizzare HtmlSaveOptions in C# con Aspose.HTML + +Se hai bisogno di controllare come Aspose.HTML salva un documento HTML, **imparare a usare HtmlSaveOptions è fondamentale**. Questo tutorial ti mostra passo‑passo come utilizzare HtmlSaveOptions per abilitare gli stili di web‑font in grassetto e corsivo durante il salvataggio di un documento. + +La libreria Aspose HTML fornisce un'API ricca per caricare, manipolare ed esportare contenuti HTML. Alla fine di questa guida sarai in grado di: + +* Caricare un file HTML esistente in un `HTMLDocument`. +* Configurare `HtmlSaveOptions` per applicare flag specifici di `WebFontStyle`. +* Salvare il documento modificato in una nuova posizione o in uno stream. +* Estendere la soluzione per altri stili di font, CSS personalizzato e gestione degli errori. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +* .NET 6.0 o versioni successive installate. +* Una licenza valida per **Aspose.HTML for .NET** (la versione di prova gratuita funziona per questo esempio). +* Visual Studio 2022 (o qualsiasi IDE C#) per compilare ed eseguire il codice. + +Non sono richiesti pacchetti NuGet aggiuntivi oltre a `Aspose.HTML`. + +## Passo 1: Configurare il progetto e importare i namespace + +Crea un nuovo progetto **Console App** e aggiungi il pacchetto NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Quindi, nella parte superiore di `Program.cs`, importa i namespace richiesti: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Questi namespace espongono i tipi `HTMLDocument`, `HtmlSaveOptions` e `WebFontStyle` che utilizzerai durante tutto il tutorial. + +## Passo 2: Caricare il documento HTML di origine + +La prima operazione è leggere l'HTML che desideri elaborare. Sostituisci `"YOUR_DIRECTORY/input.html"` con il percorso reale del tuo file. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analizza il markup, costruisce un albero DOM e lo rende pronto per la manipolazione. Se il file non esiste, viene generata un'eccezione, quindi potresti voler avvolgere questa chiamata in un blocco try‑catch per il codice di produzione. + +## Passo 3: Creare e configurare HtmlSaveOptions + +`HtmlSaveOptions` ti consente di perfezionare il processo di salvataggio. Per abilitare gli stili di web‑font in grassetto e corsivo, combina i flag `WebFontStyle` corrispondenti usando l'operatore OR bitwise (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Perché configurare WebFontStyle? + +Quando esporti un documento HTML, Aspose.HTML può incorporare i web font che corrispondono allo stile originale. Impostando `WebFontStyle`, indichi all'esportatore quali varianti di font includere. Questo riduce la dimensione finale del file quando ti servono solo stili specifici e garantisce che l'output renderizzato corrisponda alla sorgente. + +#### Varianti comuni + +| Stile desiderato | Flag `WebFontStyle` corrispondente | +|------------------|------------------------------------| +| Normale (regolare) | `WebFontStyle.Regular` | +| Grassetto | `WebFontStyle.Bold` | +| Corsivo | `WebFontStyle.Italic` | +| Grassetto + Corsivo | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Tutte le varianti | `WebFontStyle.All` | + +Puoi combinare qualsiasi combinazione che si adatti al tuo scenario. + +## Passo 4: Salvare il documento con le opzioni configurate + +Ora scrivi il documento in un nuovo file. Il metodo `Save` accetta il percorso di destinazione e l'istanza `HtmlSaveOptions` che hai preparato. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Se devi scrivere su uno stream di memoria (ad esempio per inviare il file via HTTP), usa la sovraccarico che accetta un oggetto `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Passo 5: Verificare il risultato + +Apri `output.html` in un browser o ispeziona il file con un editor di testo. Dovresti vedere che il blocco ` + + +
+ +"; +``` + +この HTML は、ラスタライズ時にアンチエイリアシングの恩恵を受けるシンプルなベクタ形状を定義しています。 + +## 手順 2: レンダリングエンジンを初期化 + +Aspose.HTML は `HtmlRenderer` と `ImageRenderingOptions` を組み合わせて使用します。ここで最終ビットマップに対して **アンチエイリアシングの有効化方法** を設定します。 + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**`UseAntialiasing = true` が重要な理由**: レンダリングエンジンはベクタ形状、テキスト、グラデーションをサブピクセル精度で描画します。アンチエイリアシングを有効にすると、ラスタライザはエッジピクセルを隣接ピクセルとブレンドし、`UseAntialiasing` がデフォルトの `false` のままの場合に現れるギザギザした線を除去します。これが **高品質画像レンダリング** の核心です。 + +## 手順 3: HTML を画像にレンダリング + +オプションを設定したら、`RenderToImage` メソッドを呼び出します。このメソッドは `Image` オブジェクトを返し、ディスクに保存したりレスポンスに直接ストリームしたりできます。 + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +実行後、`output.png` には滑らかなアンチエイリアスされた円が含まれます。任意の画像ビューアでファイルを開き、結果を確認してください。 + +![Aspose.HTML レンダリングにおけるアンチエイリアシングの有効化方法](/images/antialiasing-example.png){alt="Aspose.HTML レンダリングにおけるアンチエイリアシングの有効化方法"} + +## 手順 4: 高品質出力を検証(HTML 画像のレンダリング方法) + +プログラム上で画像のサイズと DPI を確認し、レンダリングが期待通りであることを確認できます。 + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +典型的なコンソール出力: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +DPI を上げ、アンチエイリアシングを組み合わせることで、画像を拡大してもクリーンな結果が得られます。これにより **HTML 画像のレンダリング方法** がプロフェッショナルな品質で実現できることが示されます。 + +## さまざまなバリエーションとエッジケース + +| 状況 | 推奨の調整 | +|-----------|-------------------| +| 非常に大きなページ(例: フルスクリーン Web アプリ) | `ImageRenderingOptions.Width` / `Height` を増やすか、`Scale` を設定してメモリ使用量を制御 | +| 背景を透明にしたい | `imageOptions.BackgroundColor = Color.Transparent;` | +| ファイルサイズを小さくしたい JPEG を使用 | `ImageFormat` を `ImageFormat.Jpeg` に変更し、`Quality`(0‑100)を調整 | +| GUI のない Linux コンテナで実行 | Aspose.HTML は完全にヘッドレスで動作し、追加の依存関係は不要 | +| ピクセル単位で完璧な UI テストのためにアンチエイリアシングを無効にしたい | `UseAntialiasing = false;` と設定するとエッジはくっきりしますが、ジャギーが目立つ可能性があります | + +### プロのコツ + +バッチで多数の画像を生成する場合、`HTMLDocument` インスタンスを 1 つだけ再利用し、各レンダリング間で `Content` プロパティだけを変更すると効果的です。これにより同じ HTML の解析オーバーヘッドが削減され、スループットが向上します。 + +## 完全なソースリスト + +以下は新しいコンソールアプリプロジェクトにコピーしてすぐに実行できる完全プログラムです。 + + + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を応用した関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能を習得したり、独自プロジェクトで代替実装アプローチを探求したりするのに役立ちます。 + +- [C# で HTML を画像にレンダリングする完全ガイド](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML to Image チュートリアル – C# で HTML を PNG にレンダリング](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Aspose を使用して HTML を PNG にレンダリングする手順別ガイド](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/japanese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/japanese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..2db85634c --- /dev/null +++ b/html/japanese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTMLでHTMLをレンダリングする際にヒンティングを有効にしてテキストの明瞭さを向上させます。このガイドでは、ヒンティングの有効化方法とその重要性を示します。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: ja +lastmod: 2026-09-10 +og_description: Aspose.HTMLでヒンティングを有効にする方法を学び、テキストの明瞭さを向上させましょう。ステップバイステップのガイドに従って、すべてのプラットフォームでよりクリアなテキストを実現してください。 +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Aspose.HTMLでテキストの明瞭度を向上させる – 鋭い描画のためにヒンティングを有効にする +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Hinting を使用して Aspose.HTML のテキストの明瞭さを向上させる方法 +url: /ja/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML でヒント付けによりテキストの明瞭度を向上させる方法 + +Aspose.HTML で HTML をレンダリングする際にテキストの明瞭度を向上させる必要がある場合、本ガイドでは完全なソリューションを示します。ヒント付けを有効にすると、特にデフォルトのレンダリングがぼやけて見える非 Windows プラットフォームで、より鮮明なグリフが得られます。 + +このチュートリアルでは、ヒント付けの有効化方法、テキストの明瞭度にとって重要な理由、そして典型的な Aspose.HTML ワークフローに設定を組み込む方法を学びます。外部ドキュメントは不要で、必要な情報はすべて以下の手順に含まれています。 + +## 前提条件 + +* .NET 6.0 以降(コードは .NET Framework 4.7+ でも動作します) +* ライセンス版 **Aspose.HTML for .NET**(無料トライアルはテストに使用可能) +* C# と Visual Studio、またはお好みの IDE に関する基本的な知識 + +これらの要件は最小限です。同じアプローチはコンソールアプリ、ASP.NET Core サービス、デスクトップアプリケーションでも機能します。 + +## ヒント付けを有効にするとテキストの明瞭度が向上する理由 + +ヒント付けは、各グリフのアウトラインをディスプレイデバイスのピクセルグリッドに合わせて調整するプロセスです。ヒント付けがないと、特に低解像度や高 DPI の画面では文字がぼやけたり不均一に見えることがあります。ヒント付けを有効にすると、レンダリングエンジンがこれらの調整を自動的に適用し、次のような効果が得られます。 + +* 文字ごとのストロークの太さが一貫する +* Linux、macOS、古い Windows バージョンでの可読性が向上する +* PDF、スクリーンショット、画面プレビューでプロフェッショナルな見た目になる + +Aspose.HTML はこの動作を **TextOptions.UseHinting** プロパティで提供しており、下位互換性のためデフォルトは `false` です。 + +## 手順 1: `TextOptions` インスタンスの作成 + +最初のステップは **TextOptions** クラスのインスタンスを作成することです。このオブジェクトはテキスト関連のすべてのレンダリング設定をまとめ、レンダリングパイプラインに渡しやすくします。 + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +オブジェクトを作成しただけではまだレンダリングには影響しません。後で設定するオプション用のコンテナを準備するだけです。 + +## 手順 2: ヒント付けを有効にしてテキストの明瞭度を向上させる + +**UseHinting** プロパティを `true` に設定します。この1行で、関連付けられたオプションでレンダリングされるすべてのテキストにヒント付けアルゴリズムが適用されます。 + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +`UseHinting` が `true` の場合、Aspose.HTML は各グリフにサブピクセル調整を自動的に適用します。この効果は、セリフ体や小サイズのテキストなど、細部が豊かなフォントで特に顕著です。 + +### プロのコツ: ヒント付けとアンチエイリアシングを組み合わせる + +エッジをさらに滑らかにしたい場合は、ヒント付けと同時にアンチエイリアシングを有効にできます。 + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +この2つの設定を組み合わせることで、幅広いデバイスで最高の視覚忠実度が得られます。 + +## 手順 3: `TextOptions` をレンダリングプロセスに添付する + +設定した `TextOptions` を **HtmlRenderer**(または使用している他のレンダリングクラス)に渡す必要があります。以下は、HTML 文字列を読み込み、オプションを適用し、PNG ファイルに出力する最小限の例です。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**主要行の説明** + +* `HTMLDocument` は HTML マークアップを解析します。 +* `ImageDevice` は出力サイズを定義します(この例では 800 × 600 ピクセル)。 +* `HtmlRenderer` は実際のレンダリングを実行します。`textOptions` を `renderer.Options.TextOptions` に割り当てることでヒント付けが適用されます。 +* `device.Save("output.png")` は最終画像をディスクに保存します。 + +このコードを実行すると `output.png` が生成され、見出しと段落が 96 dpi のモニタでも鮮明に表示されます。 + +## 手順 4: 結果の検証 + +生成された画像を任意のビューアで開きます。ヒント付け **なし**(`UseHinting = false`)でレンダリングした画像と比較してください。次の点に気付くはずです。 + +* 文字 “H”, “e”, “l”, “o” のエッジがより鋭くなる +* 段落全体でストロークの太さがより均一になる +* 文字の斜線におけるゴースト効果が減少する + +画面上で差が微妙な場合は、ズームインするか画像を印刷してみてください。拡大すればするほど改善がはっきりと確認できます。 + +## 一般的なバリエーションとエッジケース + +### PNG ではなく PDF にレンダリングする場合 + +出力先が PDF の場合は、`ImageDevice` を `PdfDevice` に置き換えます。同じ `TextOptions` オブジェクトをそのまま使用できます。 + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### 高 DPI ディスプレイ + +スケーリング率(例: 150 % や 200 %)が設定されたディスプレイでは、視覚品質を保つためにデバイスサイズを比例して拡大した方が良い場合があります。ヒント付けは引き続き適用され、結果は鮮明です。 + +### Linux または macOS 環境 + +Linux では、デフォルトのレンダリングエンジンがビットマップフォントレンダラにフォールバックし、ヒント付けが無視されることがあります。`UseHinting = true` フラグを設定すると、エンジンが TrueType ヒント付けを適用し、これらのプラットフォームでよく見られる「ぼやけた」外観が解消されます。 + +### ヒントテーブルのないフォント + +一部の最新 OpenType フォントはヒントデータを省略しています。そのような場合、Aspose.HTML は自動ヒント付けにフォールバックし、ヒント付けなしに比べて明瞭度が向上します。 + +## 手順 5: 本番コードのベストプラクティス + +1. `TextOptions` インスタンスを1つ作成し、レンダリング呼び出し間で再利用します。これによりオブジェクト割り当てのオーバーヘッドが削減されます。 +2. ヒント付けとアンチエイリアシング(`UseAntiAliasing = true`)を組み合わせて、最も滑らかな出力を得ます。 +3. 対象プラットフォーム(Windows、Linux、macOS)でテストしてください。視覚的な差異はプラットフォームごとに異なる可能性があります。 +4. 本番ログにレンダリング設定を記録します。予期しない視覚的アーティファクトのトラブルシューティングに役立ちます。 +5. Aspose.HTML を常に最新に保ちます。新しいバージョンではテキストレンダリングの追加改善が導入されることがあります。 + +## 完全な動作例 + +以下は、本稿で説明したすべてを示す自己完結型のコンソールアプリケーションです。コードを新しい .NET コンソールプロジェクトにコピーし、Aspose.HTML の NuGet パッケージを追加して実行してください。 + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**期待される出力** + +プログラムを実行すると `hinted_output.png` が作成されます。見出し “Hinting in action” と段落テキストは均一なストローク幅で鮮明に表示され、ぼやけたエッジはありません。`UseHinting = true` をコメントアウトすると、同じ画像で文字がややぼやけて表示され、設定の効果が確認できます。 + +## 結論 + +これで、ヒント付けを有効にして Aspose.HTML のテキスト明瞭度を向上させる方法が分かりました。このプロセスは `TextOptions` オブジェクトを作成し、`UseHinting`(必要に応じて `UseAntiAliasing`)を設定し、レンダラにオプションを添付することです。この手法は PNG、JPEG、PDF などの出力形式すべてで機能し、Windows、Linux、macOS 間で一貫した視覚品質を提供します。 + +次に、カスタムフォント向けの **ヒント付けの有効化**、**レンダリング性能の最適化**、または Aspose.HTML における **CSS を使用したテキスト外観の制御** などの関連トピックを調査してみてください。さまざまなフォントや DPI 設定で実験し、ヒント付けが各シナリオにどのように適応するかを確認しましょう。 + +コーディングを楽しんで、すべての Aspose.HTML レンダリングでより鮮明なテキストをお楽しみください! + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした密接に関連するトピックを取り上げています。各リソースには、ステップバイステップの解説と完全な動作コード例が含まれており、追加の API 機能を習得し、独自プロジェクトで代替実装アプローチを検討するのに役立ちます。 + +- [Aspose で HTML を PNG にレンダリングする方法 – 完全ガイド](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Aspose を使用して HTML を PNG にレンダリングする方法 – ステップバイステップガイド](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [スタイル付きテキストで HTML ドキュメントを作成し PDF にエクスポートする方法 – 完全ガイド](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/japanese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/japanese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..b0252fd5a --- /dev/null +++ b/html/japanese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.Html を使用して C# で HTML をレンダリングする方法。HTML と CSS の処理、HTML の保存、HTML + をストリームに変換、.NET で HTML ドキュメントをロードする方法を学びます。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: ja +lastmod: 2026-09-10 +og_description: Aspose.Html を使用して C# で HTML をレンダリングする方法。このガイドでは、HTML と CSS の処理、HTML + の保存、HTML をストリームに変換、そして HTML ドキュメントを効率的にロードする方法を示します。 +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Aspose.Html を使って C# で HTML をレンダリングする – ステップバイステップチュートリアル +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: C# で Aspose.Html を使用して HTML をレンダリングする方法 – 完全ガイド +url: /ja/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で Aspose.Html を使用して HTML をレンダリングする方法 – 完全ガイド + +.NET アプリケーション内で **how to render html** が必要な場合、このチュートリアルでは完全なワークフローを示します。HTML CSS の処理方法、HTML の保存方法、HTML をストリームに変換する方法、そして Aspose.Html ライブラリを使用して C# で HTML ドキュメントをロードする方法がわかります。 + +サーバーサイドのコンテキストで HTML をレンダリングする場合、単にファイルをロードするだけでは不十分です。画像やスタイルシートなどのリンクされたリソースも処理する必要があります。このガイドでは、ドキュメントのロードからリソース処理のカスタマイズ、最終的にメモリストリームとしてレンダリング結果を抽出するまでのすべての手順を解説します。 + +この記事の最後までに、以下ができるようになります。 + +* ディスクまたは URL から HTML ドキュメントをロードする (`load html document c#`)。 +* カスタム `ResourceHandler` を提供して **process html css** をリアルタイムで実行する。 +* レンダリングされた HTML を保存し、**convert html to stream** してさらに処理する。 +* 任意の .NET 環境で動作する **how to save html** 手法で結果を永続化する。 + +## 前提条件 + +開始する前に、以下がインストールされていることを確認してください。 + +* .NET 6.0 SDK 以降 +* Visual Studio 2022(または .NET 6 をサポートする任意の IDE) +* NuGet で **Aspose.Html** を参照 (`dotnet add package Aspose.Html`) +* `YOUR_DIRECTORY/input.html` のように既知のフォルダーに配置した `input.html` ファイル + +追加のサードパーティライブラリは不要です。 + +## HTML をレンダリングする方法 – ステップバイステップガイド + +### 手順 1: C# で HTML ドキュメントをロードする + +最初の操作は、ソースマークアップを表す `HTMLDocument` インスタンスを作成することです。これが **how to render html** のコアになります。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +**この点が重要な理由:** ドキュメントをロードすると、マークアップが解析され内部 DOM が構築されます。レンダラはこの DOM を使用して CSS を適用し、リソースを解決します。 + +### 手順 2: **process html css** 用のカスタムリソースハンドラを作成する + +レンダラが外部リソース(画像、CSS ファイル、フォント)に遭遇したとき、`ResourceHandler` にストリームの取得を要求します。カスタムハンドラを提供することで、各リソースの取得、変換、スタブ化を完全に制御できます。 + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +**この点が重要な理由:** ハンドラ内で **process html css** のロジックを実装します。たとえば CSS をインライン化したり、画像をプレースホルダーに置き換えたり、セキュリティフィルタを適用したりできます。 + +### 手順 3: カスタムハンドラを使用するよう `HtmlSaveOptions` を構成する + +`HtmlSaveOptions` はレンダラに出力方法を指示します。先ほど作成した `ResourceHandler` を割り当てることで、外部参照ごとにハンドラが呼び出されます。 + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +`EmbedCss` と `EmbedImages` を設定すると、後で **convert html to stream** したときに自己完結型の結果が得られます。 + +### 手順 4: ドキュメントを保存し **convert html to stream** + +これでドキュメントをレンダリングし、結果を `MemoryStream` にキャプチャできます。これは **how to save html** の核心で、物理ファイルではなくメモリ上に出力したい場合に使用します。 + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +**この点が重要な理由:** `MemoryStream` はレンダリングされた HTML の柔軟なバイナリ表現を提供し、ファイルシステムに触れずに保存、転送、さらなる操作が可能です。 + +## 一般的なエッジケースの処理 + +| 状況 | 推奨アプローチ | +|-----------|----------------------| +| **CSS または画像ファイルが欠如している** | `MyResourceHandler.HandleResource` 内で、開く前に `File.Exists` を確認します。ファイルが存在しない場合は空の `MemoryStream` またはプレースホルダー画像を返します。 | +| **大きな HTML ファイル(>10 MB)** | `MemoryStream` のデフォルトバッファサイズを `new MemoryStream(capacity)` で増やし、頻繁な再割り当てを防ぎます。 | +| **`..` セグメントを含む相対 URL** | `new Uri(baseUri, info.Uri)` を使用してフルパスを解決し、ファイルシステムにアクセスする前に解決します。 | +| **ASP.NET におけるスレッド安全性** | リクエストごとに新しい `HTMLDocument` と `MyResourceHandler` をインスタンス化し、スレッド間でインスタンスを共有しないようにします。 | +| **エンコーディングの問題** | `saveOpts.Encoding = Encoding.UTF8` を設定して UTF‑8 出力を保証します。特にソースに非 ASCII 文字が含まれる場合に有効です。 | + +## プロのコツ: �数のドキュメントで同じハンドラを再利用する + +多数の HTML ファイルをバッチ処理する場合、`MyResourceHandler` のインスタンスを 1 つだけ保持し、内部のルックアップテーブルだけを変更すれば済みます。これによりオブジェクト割り当てのオーバーヘッドが削減され、**process html css** フェーズが高速化します。 + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## 完全な実行可能サンプル + +以下はコンソールアプリケーションに貼り付けて実行できる完全プログラムです。**how to render html**、**process html css**、**how to save html**、**convert html to stream**、そして **load html document c#** をすべて一連のフローで示しています。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**期待される出力(簡略化):** + + + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした関連トピックをカバーしています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、追加の API 機能を習得したり、独自プロジェクトで代替実装アプローチを探求したりするのに役立ちます。 + +- [Aspose.Html で HTML を保存する方法 – 完全 C# ガイド](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Aspose を使用して C# で HTML を PNG にレンダリングする方法](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Aspose を使用して HTML を PNG にレンダリングする方法 – ステップバイステップガイド](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/japanese/net/working-with-html-documents/_index.md b/html/japanese/net/working-with-html-documents/_index.md index a554c6b8f..72f24e699 100644 --- a/html/japanese/net/working-with-html-documents/_index.md +++ b/html/japanese/net/working-with-html-documents/_index.md @@ -36,11 +36,14 @@ HTML ドキュメントは Web のバックボーンであり、それを効果 では、スキルを次のレベルに引き上げましょう。HTML ドキュメントの編集は Web 開発者にとって一般的なタスクであり、Aspose.HTML はこのプロセスを大幅に簡素化します。このセクションでは、ドキュメントの作成、操作、およびスタイル設定について説明します。Web コンテンツの外観と機能を強化して、魅力的でユーザーフレンドリーにする方法を学びます。 +### [Aspose.HTML を使用して C# でファイルから HTML ドキュメントを読み込む方法](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [カスタムリソースハンドラを使用した C# での HTML 保存完全ガイド](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [CSS と C# で見出しを太字にする方法 – 完全ステップバイステップガイド](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) ### [C# で HTML を保存する方法 – カスタム リソース ハンドラと ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Aspose.HTML を使用した C# での HTML 保存完全ガイド](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [C# で HTML を zip する方法 – 完全ステップバイステップガイド](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [C# で Aspose.HTML の HtmlSaveOptions を使用する方法](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/japanese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/japanese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..536a998f7 --- /dev/null +++ b/html/japanese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-09-10 +description: C#でAspose.HTMLを使用してファイルからHTMLドキュメントを読み込む方法を学びます。画像のレンダリングオプション、テキストのレンダリングオプション、カスタムリソースハンドラが含まれます。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: ja +lastmod: 2026-09-10 +og_description: C# で Aspose.HTML を使用してファイルから HTML ドキュメントをロードします。このガイドでは、レンダリング オプション、カスタム + リソース ハンドラ、そしてすぐに実行できる完全なコードについて解説します。 +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Aspose.HTMLでファイルからHTMLドキュメントを読み込む – ステップバイステップ C# ガイド +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: C#でAspose.HTMLを使用してファイルからHTMLドキュメントを読み込む方法 +url: /ja/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML を使用して C# でファイルから HTML ドキュメントをロードする方法 + +ファイルから **HTML ドキュメントをロード** し、そのレンダリングを制御したい場合、このチュートリアルでは完全で実行可能なソリューションを示します。画像レンダリングの設定方法、テキストヒンティングの有効化、外部アセットに対して空のストリームを返すカスタムリソースハンドラの提供方法が分かります。ガイドの最後までに、処理した HTML をメモリストリームや任意の他の宛先に保存できるようになります。 + +この例では Aspose.HTML for .NET を使用しています。このライブラリはブラウザエンジンなしで HTML、CSS、SVG の処理を簡素化します。外部ツールは不要で、コードは .NET 6 以降で動作します。開始する前に Aspose.HTML の NuGet パッケージがインストールされていることを確認してください。 + +## 前提条件 + +- .NET 6 SDK(または Aspose.HTML がサポートする任意の .NET バージョン) +- Visual Studio 2022 またはその他の C# IDE +- Aspose.HTML for .NET NuGet パッケージ(`Install-Package Aspose.HTML`) +- `input.html` という名前の HTML ファイルを、コードから参照できるフォルダーに配置します + +## 手順 1: ファイルから HTML ドキュメントをロードする + +最初の操作は、ソースファイルを読み込む `HTMLDocument` インスタンスを作成することです。このオブジェクトは DOM ツリー全体を表し、さらなる操作のためのメソッドを提供します。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**重要な理由:** ファイルを `HTMLDocument` にロードすることで、ドキュメントの構造、スタイル、リソースへの完全なアクセスが得られ、後でレンダリングや変換に利用できます。 + +## 手順 2: 画像レンダリングオプションの設定 (Aspose.HTML レンダリング) + +後でページをラスタライズする予定がある場合、画像レンダリングを設定することで視覚品質が向上します。アンチエイリアスはエッジを滑らかにし、ギザギザのアーティファクトを減らします。 + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` は、PNG や JPEG にラスタライズされるベクターグラフィックやテキストに特に有用です。 + +## 手順 3: テキストヒンティングの有効化 (テキストレンダリングオプション) + +テキストヒンティングは、グリフがピクセルグリッドにどのように配置されるかに影響し、小さいサイズのフォントをより鮮明に見せることができます。 + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**重要性:** 後で HTML を画像にエクスポートする際、ヒンティングは文字のぼやけを減らし、プラットフォーム間で一貫したタイポグラフィを保証します。 + +## 手順 4: カスタムリソースハンドラの作成 (custom resource handler) + +HTML ではフォント、画像、スクリプトなどの外部リソースが参照されることがあります。`ResourceHandler` を使用すると、これらのリソースの取得方法を制御できます。この例では、ハンドラはすべてのリクエストに対して空の `MemoryStream` を返し、外部アセットを事実上除去します。 + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**使用例:** このパターンは、セキュリティが制限された環境、ユニットテスト、または外部ファイルなしでマークアップだけが必要な場合に便利です。 + +## 手順 5: HTML 保存オプションの組み立て (HTML から画像への変換) + +リソースハンドラ、レンダリング設定、フォントスタイルのすべての要素が `HtmlSaveOptions` オブジェクトに結合されます。このオブジェクトは Aspose.HTML に対し、ドキュメントのシリアライズ方法を指示します。 + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**説明:** `WebFontStyle` は、欠落している可能性のあるウェブフォントに対して特定のスタイル(例: bold)を強制できます。以前に設定した `ImageRenderingOptions` と `TextOptions` がここに注入され、後のラスタライズに影響を与えるようになります。 + +## 手順 6: ドキュメントをメモリストリームに保存する (完全なソリューション) + +最後に、処理した HTML を `MemoryStream` に書き込みます。ここからストリームをファイルに書き出したり、ネットワーク越しに送信したり、別の API に渡したりできます。 + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**結果:** `output.html` は `input.html` と同じマークアップを保持しますが、すべての外部リソースは空のストリームに置き換えられ、レンダリング設定が保存オプションに組み込まれています。 + +## 完全に実行可能な例 + +すべての手順を組み合わせると、コピーして貼り付け、実行できる自己完結型プログラムが得られます。 + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +このプログラムを実行すると、現在のディレクトリに `output.html` が生成されます。ブラウザでファイルを開き、元のマークアップはロードされるものの、リンクされた画像、フォント、スクリプトが存在しないこと(空のストリームに置き換えられた)を確認してください。 + +## よくある質問とエッジケース + +| Question | Answer | +|----------|--------| +| **空のストリームではなく元のリソースが必要な場合はどうすればよいですか?** | `MemoryResourceHandler` を、ディスクからファイルを読み込むか HTTP でダウンロードするハンドラに置き換えてください。 | +| **HTML を直接 PNG または JPEG にレンダリングできますか?** | はい。設定した同じ `ImageRenderingOptions` と `TextOptions` を使用して `ImageRenderer` を使い、`renderer.Render(page, outputStream, ImageFormat.Png)` を呼び出します。 | +| **`WebFontStyle.Bold` は必須ですか?** | いいえ。フォントスタイルを上書きする例として示しています。強制的なスタイルが不要な場合は省略するか、`WebFontStyle.Normal` に変更してください。 | +| **これは .NET Core でも動作しますか?** | Aspose.HTML は .NET 5/6/7 をサポートしているため、同じコードは .NET Core プロジェクトでも動作します。 | +| **大きな HTML ファイルを効率的に処理するにはどうすればよいですか?** | `FileStream` コンストラクタを使用してファイルを `HTMLDocument` にストリームし、ファイル全体を一度にメモリに読み込むのを回避します。 | + +## 結論 + +これで、Aspose.HTML を使用して **HTML ドキュメントをファイルからロード** し、**画像レンダリングオプション** と **テキストレンダリングオプション** を設定し、外部アセットを制御する **カスタムリソースハンドラ** を適用する方法が分かりました。完全な例は、処理した HTML をメモリストリームに保存する方法を示しており、必要に応じて永続化したり送信したりできます。 + +次に、`HtmlSaveOptions` を `ImageRenderer` に置き換えて **HTML から画像への変換** を試したり、CSS メディアクエリ、SVG サポート、PDF エクスポートなどの **Aspose.HTML レンダリング** 機能を実験してみてください。これらの拡張により、C# だけでリッチなドキュメント処理パイプラインを構築できます。 + +コーディングを楽しんでください! + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした密接に関連するトピックを取り上げています。各リソースには、ステップバイステップの解説と完全な動作コード例が含まれており、追加の API 機能を習得し、プロジェクトで代替実装アプローチを検討するのに役立ちます。 + +- [Aspose.HTML を使用した .NET でリモートサーバーから HTML をロードする](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Aspose.HTML を使用した .NET で URL から HTML をロードする](/html/english/net/html-document-manipulation/load-html-using-url/) +- [C# で HTML を保存する方法 – カスタムリソースハンドラを使用した完全ガイド](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/japanese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/japanese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..68c69efc3 --- /dev/null +++ b/html/japanese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,308 @@ +--- +category: general +date: 2026-09-10 +description: C# で HtmlSaveOptions を使用してウェブフォントのスタイルを制御し、Aspose.HTML で HTML ファイルを保存する方法を学びましょう。完全なコード例と実用的なヒントが含まれています。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: ja +lastmod: 2026-09-10 +og_description: C# の HtmlSaveOptions を使用して、Aspose.HTML で HTML を保存する際に太字と斜体のウェブフォントスタイルを有効にする方法。完全なサンプルとベストプラクティスのヒントをご覧ください。 +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Aspose.HTML を使用した C# の HtmlSaveOptions の使い方 – ステップバイステップガイド +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Aspose.HTML を使用した C# での HtmlSaveOptions の使い方 +url: /ja/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# と Aspose.HTML で HtmlSaveOptions を使用する方法 + +Aspose.HTML が HTML ドキュメントを保存する方法を制御する必要がある場合、**HtmlSaveOptions の使い方を学ぶことは必須です**。このチュートリアルでは、ドキュメントを保存する際に太字と斜体のウェブフォントスタイルを有効にするための HtmlSaveOptions の使用方法をステップバイステップで示します。 + +Aspose HTML ライブラリは、HTML コンテンツの読み込み、操作、エクスポートのための豊富な API を提供します。このガイドの最後までに、以下ができるようになります。 + +* 既存の HTML ファイルを `HTMLDocument` にロードする。 +* 特定の `WebFontStyle` フラグを適用するように `HtmlSaveOptions` を構成する。 +* 変更したドキュメントを新しい場所またはストリームに保存する。 +* 他のフォントスタイル、カスタム CSS、エラーハンドリング向けにソリューションを拡張する。 + +## 前提条件 + +開始する前に、以下がインストールされていることを確認してください。 + +* .NET 6.0 以降 +* **Aspose.HTML for .NET** の有効なライセンス(無料トライアルでもこの例は動作します) +* Visual Studio 2022(または任意の C# IDE)でコードのコンパイルと実行が可能 + +`Aspose.HTML` 以外に追加の NuGet パッケージは必要ありません。 + +## 手順 1: プロジェクトのセットアップと名前空間のインポート + +**Console App** プロジェクトを新規作成し、Aspose.HTML NuGet パッケージを追加します。 + +```bash +dotnet add package Aspose.HTML +``` + +次に、`Program.cs` の先頭で必要な名前空間をインポートします。 + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +これらの名前空間により、チュートリアル全体で使用する `HTMLDocument`、`HtmlSaveOptions`、`WebFontStyle` 型が利用可能になります。 + +## 手順 2: ソース HTML ドキュメントの読み込み + +最初の操作は、処理対象の HTML を読み込むことです。`"YOUR_DIRECTORY/input.html"` を実際のファイルパスに置き換えてください。 + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` はマークアップを解析し、DOM ツリーを構築して操作可能な状態にします。ファイルが存在しない場合は例外がスローされるため、実運用コードでは try‑catch ブロックでラップすることを推奨します。 + +## 手順 3: HtmlSaveOptions の作成と構成 + +`HtmlSaveOptions` を使用すると、保存プロセスを細かく調整できます。太字と斜体のウェブフォントスタイルを有効にするには、対応する `WebFontStyle` フラグをビット単位の OR 演算子(`|`)で組み合わせます。 + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### なぜ WebFontStyle を構成するのか? + +HTML ドキュメントをエクスポートする際、Aspose.HTML は元のスタイリングに一致するウェブフォントを埋め込むことができます。`WebFontStyle` を設定することで、エクスポーターにどのフォントバリアントを含めるか指示でき、不要なフォントを除外して最終ファイルサイズを削減し、レンダリング結果がソースと一致することを保証します。 + +#### 主なバリエーション + +| 希望するスタイル | 対応する `WebFontStyle` フラグ | +|----------------|-----------------------------------| +| 通常 (レギュラー) | `WebFontStyle.Regular` | +| 太字 | `WebFontStyle.Bold` | +| 斜体 | `WebFontStyle.Italic` | +| 太字 + 斜体 | `WebFontStyle.Bold | WebFontStyle.Italic` | +| すべてのバリエーション | `WebFontStyle.All` | + +シナリオに合わせて任意の組み合わせを使用できます。 + +## 手順 4: 構成したオプションでドキュメントを保存 + +作成したオプションを使用して、ドキュメントを新しいファイルに書き出します。`Save` メソッドは保存先パスと `HtmlSaveOptions` インスタンスを受け取ります。 + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +メモリストリームに書き込みたい場合(例: HTTP でファイルを送信する場合)は、`Stream` オブジェクトを受け取るオーバーロードを使用します。 + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## 手順 5: 結果の検証 + +`output.html` をブラウザで開くか、テキストエディタで確認してください。` + + +
+ +"; +``` + +HTML은 래스터화될 때 안티앨리어싱의 이점을 얻는 간단한 벡터 형태를 정의합니다. + +## 단계 2: 렌더링 엔진 초기화 + +Aspose.HTML은 `HtmlRenderer`와 `ImageRenderingOptions`를 함께 사용합니다. 여기에서 최종 비트맵에 **안티앨리어싱을 활성화하는 방법**을 지정합니다. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**`UseAntialiasing = true`가 중요한 이유**: 렌더링 엔진은 서브픽셀 정밀도로 벡터 형태, 텍스트 및 그라디언트를 그립니다. 안티앨리어싱을 활성화하면 래스터라이저가 가장자리 픽셀을 주변 픽셀과 혼합하여 기본값인 `false`일 때 나타나는 톱니 모양 라인을 제거합니다. 이는 **고품질 이미지 렌더링**의 핵심입니다. + +## 단계 3: HTML을 이미지로 렌더링 + +옵션을 구성한 뒤 `RenderToImage` 메서드를 호출합니다. 이 메서드는 디스크에 저장하거나 응답 스트림으로 직접 전송할 수 있는 `Image` 객체를 반환합니다. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +실행 후 `output.png` 파일에는 부드러운 안티앨리어싱 원이 포함됩니다. 이미지 뷰어에서 파일을 열어 결과를 확인하세요. + +![Aspose.HTML 렌더링에서 안티앨리어싱 활성화 방법](/images/antialiasing-example.png){alt="Aspose.HTML 렌더링에서 안티앨리어싱 활성화 방법"} + +## 단계 4: 고품질 출력 확인 (HTML 이미지 렌더링 방법) + +이미지 크기와 DPI를 프로그래밍 방식으로 확인하여 렌더링이 기대에 부합하는지 확인할 수 있습니다. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +일반적인 콘솔 출력: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +증가된 DPI와 안티앨리어싱을 결합하면 이미지가 확대될 때도 깨끗한 결과가 나오며, 이는 **HTML 이미지를 렌더링하는 방법**을 전문적인 품질로 구현한 예시입니다. + +## 일반적인 변형 및 엣지 케이스 + +| 상황 | 권장 조정 | +|-----------|-------------------| +| 매우 큰 페이지 렌더링(예: 전체 화면 웹 앱) | `ImageRenderingOptions.Width` / `Height`를 늘리거나 `Scale`을 설정하여 메모리 사용량을 제어합니다. | +| 투명 배경 필요 | `imageOptions.BackgroundColor = Color.Transparent;` | +| 파일 크기를 줄이기 위해 JPEG 사용 | `ImageFormat`을 `ImageFormat.Jpeg`으로 변경하고 `Quality`(0‑100)를 조정합니다. | +| GUI 없이 Linux 컨테이너에서 실행 | Aspose.HTML은 완전 무헤드이며 추가 종속성이 필요하지 않습니다. | +| 픽셀‑정밀 UI 테스트를 위해 안티앨리어싱을 비활성화해야 함 | `UseAntialiasing = false;` – 가장자리는 선명하지만 톱니 모양일 수 있습니다. | + +### 전문가 팁 + +이미지 배치를 생성할 때 단일 `HTMLDocument` 인스턴스를 재사용하고 렌더링 사이에 `Content` 속성만 변경하면 동일한 HTML을 반복 파싱하는 오버헤드를 줄이고 처리량을 향상시킬 수 있습니다. + +## 전체 소스 목록 + +아래는 새 콘솔‑앱 프로젝트에 복사해 바로 실행할 수 있는 완전한 프로그램입니다. + + + +## 다음에 배워야 할 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 관련 주제를 다룹니다. 각 리소스에는 단계별 설명과 완전한 코드 예제가 포함되어 있어 추가 API 기능을 마스터하고 자체 프로젝트에서 대체 구현 방식을 탐색하는 데 도움이 됩니다. + +- [C#으로 HTML을 이미지로 렌더링하는 방법 – 완전 가이드](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML을 이미지로 변환 튜토리얼 – C#에서 HTML을 PNG로 렌더링](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Aspose를 사용해 HTML을 PNG로 렌더링하는 방법 – 단계별 가이드](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/korean/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/korean/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..f96ac4e8d --- /dev/null +++ b/html/korean/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTML로 HTML을 렌더링할 때 힌팅을 활성화하여 텍스트 선명도를 향상시킵니다. 이 가이드는 힌팅을 활성화하는 + 방법과 그 이유를 설명합니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: ko +lastmod: 2026-09-10 +og_description: Hinting을 활성화하는 방법을 배워 Aspose.HTML에서 텍스트 선명도를 향상시키세요. 단계별 가이드를 따라 모든 + 플랫폼에서 더 선명한 텍스트를 얻으세요. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Aspose.HTML에서 텍스트 선명도 향상 – 더 선명한 렌더링을 위한 힌팅 활성화 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Aspose.HTML에서 힌팅을 활용한 텍스트 선명도 향상 방법 +url: /ko/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML에서 힌팅을 사용하여 텍스트 선명도 향상하기 + +HTML을 Aspose.HTML으로 렌더링할 때 텍스트 선명도를 개선해야 한다면, 이 가이드는 완전한 솔루션을 제공합니다. 힌팅을 활성화하면 특히 기본 렌더링이 흐릿하게 보일 수 있는 비‑Windows 플랫폼에서 더 선명한 글리프를 얻을 수 있습니다. + +이 튜토리얼에서는 힌팅을 활성화하는 방법, 텍스트 선명도에 왜 중요한지, 그리고 일반적인 Aspose.HTML 워크플로에 해당 설정을 통합하는 방법을 배웁니다. 별도의 외부 문서는 필요하지 않으며, 아래 단계에 모든 내용이 포함되어 있습니다. + +## Prerequisites + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +* .NET 6.0 이상 (코드는 .NET Framework 4.7+에서도 동작합니다) +* **Aspose.HTML for .NET** 라이선스 사본 (무료 체험판으로 테스트 가능) +* C# 및 Visual Studio 또는 선호하는 IDE에 대한 기본 지식 + +이 요구 사항은 최소 수준이며, 콘솔 앱, ASP.NET Core 서비스, 데스크톱 애플리케이션에서도 동일한 접근 방식을 사용할 수 있습니다. + +## Why enabling hinting improves text clarity + +힌팅은 각 글리프의 외곽선을 디스플레이 장치의 픽셀 그리드에 맞추도록 조정하는 과정입니다. 힌팅이 없으면 특히 저해상도 또는 고 DPI 화면에서 문자가 흐릿하거나 고르지 않게 보일 수 있습니다. 힌팅을 활성화하면 렌더링 엔진이 이러한 조정을 자동으로 적용하여 다음과 같은 효과를 얻습니다: + +* 문자마다 일관된 획 두께 +* Linux, macOS 및 구형 Windows 버전에서 가독성 향상 +* PDF, 스크린샷, 화면 미리보기 등에 전문적인 외관 제공 + +Aspose.HTML은 **TextOptions.UseHinting** 속성을 통해 이 동작을 노출하며, 기본값은 `false`(호환성을 위한)입니다. + +## Step 1: Create a `TextOptions` instance + +첫 번째 단계는 **TextOptions** 클래스를 인스턴스화하는 것입니다. 이 객체는 텍스트와 관련된 모든 렌더링 설정을 그룹화하여 렌더링 파이프라인에 쉽게 전달할 수 있게 해줍니다. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +객체를 생성한다고 해서 바로 렌더링이 변경되는 것은 아니며, 이후 설정할 옵션을 담을 컨테이너를 준비하는 단계입니다. + +## Step 2: Enable hinting to improve text clarity + +**UseHinting** 속성을 `true`로 설정합니다. 이 한 줄만으로도 연결된 옵션을 사용하는 모든 텍스트에 힌팅 알고리즘이 적용됩니다. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +`UseHinting`이 `true`이면 Aspose.HTML은 각 글리프에 서브픽셀 조정을 자동으로 적용합니다. 효과는 세리프 폰트나 작은 크기의 텍스트처럼 섬세한 디테일을 가진 글꼴에서 가장 두드러집니다. + +### Pro tip: Combine hinting with anti‑aliasing + +보다 부드러운 가장자리를 원한다면 힌팅과 함께 안티앨리어싱을 활성화할 수 있습니다: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +두 설정을 함께 사용하면 다양한 디바이스에서 최고의 시각적 충실도를 얻을 수 있습니다. + +## Step 3: Attach `TextOptions` to the rendering process + +구성한 `TextOptions`를 **HtmlRenderer**(또는 사용 중인 다른 렌더링 클래스)에 전달해야 합니다. 아래 예시는 HTML 문자열을 로드하고 옵션을 적용한 뒤 PNG 파일로 출력하는 최소 구현입니다. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**핵심 라인 설명** + +* `HTMLDocument`는 HTML 마크업을 파싱합니다. +* `ImageDevice`는 출력 크기(이 경우 800 × 600 픽셀)를 정의합니다. +* `HtmlRenderer`는 실제 렌더링을 수행하며, `renderer.Options.TextOptions`에 `textOptions`를 할당하면 힌팅이 적용됩니다. +* `device.Save("output.png")`는 최종 이미지를 디스크에 저장합니다. + +이 코드를 실행하면 96 dpi 모니터에서도 제목과 단락이 선명하게 표시된 `output.png`가 생성됩니다. + +## Step 4: Verify the result + +생성된 이미지를 아무 뷰어에서든 열어보세요. 힌팅을 **비활성화**한(`UseHinting = false`) 이미지와 비교하면 다음과 같은 차이를 확인할 수 있습니다: + +* 문자 “H”, “e”, “l”, “o”의 가장자리가 더 선명함 +* 단락 전체에 걸쳐 획 두께가 보다 균일함 +* 대각선 문자에서 발생하던 잔상(ghosting) 감소 + +화면에서 차이가 미미하다면 확대하거나 인쇄해 보세요. 확대할수록 개선된 선명도가 뚜렷하게 드러납니다. + +## Common variations and edge cases + +### Rendering to PDF instead of PNG + +출력 대상이 PDF라면 `ImageDevice`를 `PdfDevice`로 교체하면 됩니다. 동일한 `TextOptions` 객체를 그대로 사용할 수 있습니다: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### High‑DPI displays + +스케일링 비율(예: 150 % 또는 200 %)이 적용된 디스플레이에서는 시각적 품질을 유지하기 위해 디바이스 크기를 비례적으로 늘려야 할 수 있습니다. 힌팅은 여전히 적용되며 결과는 선명하게 유지됩니다. + +### Linux or macOS environments + +Linux에서는 기본 렌더링 엔진이 힌팅을 무시하는 비트맵 폰트 렌더러로 대체될 수 있습니다. `UseHinting = true` 플래그를 명시적으로 설정하면 엔진이 TrueType 힌팅을 적용해 해당 플랫폼에서 흔히 나타나는 “흐릿함”을 없앨 수 있습니다. + +### Fonts without hinting tables + +일부 최신 OpenType 폰트는 힌팅 데이터를 포함하지 않습니다. 이런 경우 Aspose.HTML은 자동 힌팅(auto‑hinting)으로 대체하며, 힌팅이 전혀 없는 경우보다 여전히 선명도가 향상됩니다. + +## Step 5: Best practices for production code + +1. **Create a single `TextOptions` instance** and reuse it across rendering calls. This reduces object allocation overhead. +2. **Combine hinting with anti‑aliasing** (`UseAntiAliasing = true`) for the smoothest output. +3. **Test on the target platforms** (Windows, Linux, macOS) because visual differences can vary. +4. **Log the rendering configuration** in production logs; it helps troubleshoot any unexpected visual artifacts. +5. **Keep Aspose.HTML up to date**. Newer versions may introduce additional text‑rendering improvements. + +## Full working example + +아래는 모든 내용을 포함한 독립 실행형 콘솔 애플리케이션 예제입니다. 코드를 새 .NET 콘솔 프로젝트에 복사하고 Aspose.HTML NuGet 패키지를 추가한 뒤 실행해 보세요. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Expected output** + +프로그램을 실행하면 `hinted_output.png`가 생성됩니다. “Hinting in action”이라는 제목과 단락 텍스트가 균일한 획 두께와 흐릿함 없는 가장자리로 선명하게 표시됩니다. `UseHinting = true`를 주석 처리하면 동일한 이미지에서 약간 흐릿한 문자를 확인할 수 있어, 설정의 효과를 직접 체험할 수 있습니다. + +## Conclusion + +이제 Aspose.HTML에서 힌팅을 활성화하여 텍스트 선명도를 높이는 방법을 알게 되었습니다. `TextOptions` 객체를 생성하고 `UseHinting`(필요 시 `UseAntiAliasing`)을 설정한 뒤 렌더러에 연결하면 됩니다. 이 접근 방식은 PNG, JPEG, PDF 등 다양한 출력 형식에 적용 가능하며, Windows, Linux, macOS 전반에 걸쳐 일관된 시각적 품질을 제공합니다. + +다음으로는 **커스텀 폰트에 대한 힌팅 활성화**, **렌더링 성능 최적화**, 혹은 **Aspose.HTML에서 CSS를 사용해 텍스트 외관 제어**와 같은 관련 주제를 탐색해 보세요. 다양한 폰트와 DPI 설정을 실험하면서 힌팅이 각 시나리오에 어떻게 적용되는지 확인해 보시기 바랍니다. + +Happy coding, and enjoy sharper text in every Aspose.HTML rendering! + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 다룬 기술을 기반으로 하여 관련 주제를 심도 있게 다룹니다. 각 리소스에는 완전한 코드 예제와 단계별 설명이 포함되어 있어 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용하는 데 도움이 됩니다. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/korean/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/korean/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..fcb1e3a20 --- /dev/null +++ b/html/korean/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.Html을 사용하여 C#에서 HTML을 렌더링하는 방법. HTML 및 CSS를 처리하고, HTML을 저장하며, + HTML을 스트림으로 변환하고, .NET에서 HTML 문서를 로드하는 방법을 배웁니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: ko +lastmod: 2026-09-10 +og_description: Aspose.Html을 사용하여 C#에서 HTML을 렌더링하는 방법. 이 가이드는 HTML CSS를 처리하고, HTML을 + 저장하며, HTML을 스트림으로 변환하고, HTML 문서를 효율적으로 로드하는 방법을 보여줍니다. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: C#에서 Aspose.Html로 HTML 렌더링 – 단계별 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: C#에서 Aspose.Html로 HTML을 렌더링하는 방법 – 전체 가이드 +url: /ko/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 Aspose.Html을 사용하여 HTML 렌더링하기 – 전체 가이드 + +.NET 애플리케이션 내에서 **how to render html**이 필요하다면, 이 튜토리얼은 전체 워크플로를 보여줍니다. HTML CSS를 처리하는 방법, HTML을 저장하는 방법, HTML을 스트림으로 변환하는 방법, 그리고 Aspose.Html 라이브러리를 사용하여 C#에서 HTML 문서를 로드하는 방법을 확인할 수 있습니다. + +서버‑사이드 환경에서 HTML을 렌더링하려면 단순히 파일을 로드하는 것 이상이 필요합니다—이미지와 스타일시트와 같은 연결된 리소스도 처리해야 합니다. 이 가이드는 문서를 로드하는 단계부터 리소스 처리를 사용자 정의하고 최종적으로 렌더링된 출력을 메모리 스트림으로 추출하는 전체 과정을 단계별로 안내합니다. + +이 글을 끝까지 읽으면 다음을 수행할 수 있게 됩니다: + +* 디스크 또는 URL(`load html document c#`)에서 HTML 문서를 로드합니다. +* 사용자 정의 `ResourceHandler`를 제공하여 **process html css**를 실시간으로 처리합니다. +* 렌더링된 HTML을 저장하고 **convert html to stream**을 수행하여 추가 처리에 활용합니다. +* 모든 .NET 환경에서 동작하는 **how to save html** 기법으로 결과를 영구 저장합니다. + +## Prerequisites + +시작하기 전에 다음이 설치되어 있는지 확인하세요: + +* .NET 6.0 SDK 이상 +* Visual Studio 2022(또는 .NET 6을 지원하는 기타 IDE) +* **Aspose.Html**에 대한 NuGet 참조(`dotnet add package Aspose.Html`) +* 알려진 폴더에 위치한 `input.html` 파일(예시에서는 `YOUR_DIRECTORY/input.html` 사용) + +추가적인 서드‑파티 라이브러리는 필요하지 않습니다. + +## How to render HTML – step‑by‑step guide + +### Step 1: Load the HTML document in C# + +첫 번째 작업은 소스 마크업을 나타내는 `HTMLDocument` 인스턴스를 만드는 것입니다. 이는 Aspose.Html을 사용한 **how to render html**의 핵심입니다. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Why this matters:* 문서를 로드하면 마크업을 파싱하고 내부 DOM을 구축합니다. 렌더러는 이후 이 DOM을 사용해 CSS를 적용하고 리소스를 해석합니다. + +### Step 2: Create a custom resource handler to **process html css** + +렌더러가 외부 리소스(이미지, CSS 파일, 폰트)를 만나면 `ResourceHandler`에 스트림을 요청합니다. 사용자 정의 핸들러를 제공하면 각 리소스를 어떻게 가져오고, 변환하고, 대체할지 완전하게 제어할 수 있습니다. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Why this matters:* 여기서 **process html css** 로직을 구현합니다—예를 들어 CSS를 인라인으로 삽입하거나, 이미지를 플레이스홀더로 교체하거나, 보안 필터를 적용하는 등. + +### Step 3: Configure `HtmlSaveOptions` to use the custom handler + +`HtmlSaveOptions`는 렌더러가 출력을 어떻게 기록할지 지정합니다. 방금 만든 `ResourceHandler`를 할당하면 렌더러가 모든 외부 참조에 대해 해당 핸들러를 호출합니다. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +`EmbedCss`와 `EmbedImages`를 설정하면 나중에 **convert html to stream**을 수행할 때 자체 포함된 결과물을 얻을 수 있어 유용합니다. + +### Step 4: Save the document and **convert html to stream** + +이제 문서를 렌더링하고 결과를 `MemoryStream`에 캡처할 수 있습니다. 이는 물리 파일이 아닌 메모리 상에 출력이 필요할 때 **how to save html**의 핵심입니다. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Why this matters:* `MemoryStream`은 렌더링된 HTML의 유연한 바이너리 표현을 제공하므로 파일 시스템에 접근하지 않고도 저장, 전송 또는 추가 조작이 가능합니다. + +## Handling common edge cases + +| Situation | Recommended approach | +|-----------|----------------------| +| **Missing CSS or image files** | `MyResourceHandler.HandleResource`에서 파일을 열기 전에 `File.Exists`를 확인합니다. 파일이 없을 경우 빈 `MemoryStream`이나 플레이스홀더 이미지를 반환합니다. | +| **Large HTML files (>10 MB)** | `MemoryStream`의 기본 버퍼 크기(`new MemoryStream(capacity)`)를 늘려 빈번한 재할당을 방지합니다. | +| **Relative URLs with `..` segments** | 파일 시스템에 접근하기 전에 `new Uri(baseUri, info.Uri)`를 사용해 전체 경로를 해결합니다. | +| **Thread‑safety in ASP.NET** | 요청당 새로운 `HTMLDocument`와 `MyResourceHandler`를 인스턴스화하고, 스레드 간에 인스턴스를 공유하지 않습니다. | +| **Encoding issues** | `saveOpts.Encoding = Encoding.UTF8`을 설정해 UTF‑8 출력을 보장합니다. 특히 소스에 비ASCII 문자가 포함된 경우에 필요합니다. | + +## Pro tip: reuse the same handler for multiple documents + +많은 HTML 파일을 배치 처리해야 할 경우, 단일 `MyResourceHandler` 인스턴스를 유지하면서 내부 조회 테이블만 교체하면 됩니다. 이렇게 하면 객체 할당 오버헤드가 감소하고 **process html css** 단계가 빨라집니다. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Full, runnable example + +아래는 콘솔 애플리케이션에 붙여넣을 수 있는 완전한 프로그램 예시입니다. 이 예시는 **how to render html**, **process html css**, **how to save html**, **convert html to stream**, 그리고 **load html document c#**을 모두 한 흐름에서 보여줍니다. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Expected output** (truncated for brevity): + + + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 리소스에는 완전한 코드 예제와 단계별 설명이 포함되어 있어 추가 API 기능을 마스터하고 프로젝트에 적용할 수 있는 다양한 구현 방식을 탐색하는 데 도움이 됩니다. + +- [Aspose.Html을 사용하여 HTML 저장하기 – 완전한 C# 가이드](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Aspose를 사용해 C#에서 HTML을 PNG로 렌더링하기](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Aspose를 사용해 HTML을 PNG로 렌더링하기 – 단계별 가이드](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/korean/net/working-with-html-documents/_index.md b/html/korean/net/working-with-html-documents/_index.md index 5f3ade366..a98c63978 100644 --- a/html/korean/net/working-with-html-documents/_index.md +++ b/html/korean/net/working-with-html-documents/_index.md @@ -49,6 +49,10 @@ Aspose.Html을 사용해 C#에서 HTML을 저장하는 방법을 단계별로 ### [C#에서 HTML 압축하기 – 완전 단계별 가이드](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [C#에서 Aspose.HTML와 HtmlSaveOptions 사용 방법](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [C#에서 Aspose.HTML를 사용하여 파일에서 HTML 문서 로드하는 방법](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/korean/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/korean/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..4f0a51f9b --- /dev/null +++ b/html/korean/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: C#에서 Aspose.HTML을 사용하여 파일에서 HTML 문서를 로드하는 방법을 배웁니다. 이미지 렌더링 옵션, 텍스트 렌더링 + 옵션 및 사용자 지정 리소스 핸들러를 포함합니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: ko +lastmod: 2026-09-10 +og_description: C#에서 Aspose.HTML을 사용하여 파일에서 HTML 문서를 로드합니다. 이 가이드는 렌더링 옵션, 사용자 정의 + 리소스 핸들러 및 오늘 바로 실행할 수 있는 전체 코드를 다룹니다. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Aspose.HTML를 사용하여 파일에서 HTML 문서 로드하기 – 단계별 C# 가이드 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: C#에서 Aspose.HTML를 사용하여 파일에서 HTML 문서를 로드하는 방법 +url: /ko/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML을 사용하여 C#에서 파일로부터 HTML 문서를 로드하는 방법 + +파일에서 **HTML 문서를 로드**하고 렌더링을 제어해야 할 때, 이 튜토리얼은 완전하고 바로 실행 가능한 솔루션을 보여줍니다. 이미지 렌더링 설정, 텍스트 힌팅 활성화, 외부 자산에 대해 빈 스트림을 반환하는 사용자 정의 리소스 핸들러 제공 방법을 확인할 수 있습니다. 가이드를 마치면 처리된 HTML을 메모리 스트림이나 원하는 다른 대상에 저장할 수 있습니다. + +예제는 브라우저 엔진 없이 HTML, CSS, SVG 처리를 단순화하는 .NET용 Aspose.HTML 라이브러리를 사용합니다. 별도의 외부 도구가 필요 없으며 코드는 .NET 6 이상에서 동작합니다. 시작하기 전에 Aspose.HTML NuGet 패키지가 설치되어 있는지 확인하세요. + +## Prerequisites + +- .NET 6 SDK (또는 Aspose.HTML이 지원하는 모든 .NET 버전) +- Visual Studio 2022 또는 다른 C# IDE +- Aspose.HTML for .NET NuGet 패키지 (`Install-Package Aspose.HTML`) +- 코드에서 참조할 수 있는 폴더에 위치한 `input.html` 파일 + +## Step 1: Load the HTML document from a file + +첫 번째 작업은 소스 파일을 읽는 `HTMLDocument` 인스턴스를 만드는 것입니다. 이 객체는 전체 DOM 트리를 나타내며 이후 조작을 위한 메서드를 제공합니다. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** 파일을 `HTMLDocument`에 로드하면 문서 구조, 스타일 및 리소스에 대한 완전한 접근 권한을 얻을 수 있으며, 이를 나중에 렌더링하거나 변환할 수 있습니다. + +## Step 2: Set up image rendering options (Aspose.HTML rendering) + +페이지를 나중에 래스터화할 계획이라면 이미지 렌더링 옵션을 구성해 시각적 품질을 향상시킬 수 있습니다. 안티앨리어싱은 가장자리를 부드럽게 하고 거친 아티팩트를 줄여줍니다. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing`은 PNG 또는 JPEG로 래스터화될 벡터 그래픽 및 텍스트에 특히 유용합니다. + +## Step 3: Enable text hinting (text rendering options) + +텍스트 힌팅은 글리프가 픽셀 그리드에 정렬되는 방식을 조정하여 작은 크기의 글꼴을 더 선명하게 보이게 합니다. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Why it’s important:** 나중에 HTML을 이미지로 내보낼 때 힌팅은 흐릿한 문자들을 감소시키고 플랫폼 간 일관된 타이포그래피를 보장합니다. + +## Step 4: Create a custom resource handler (custom resource handler) + +HTML에 폰트, 이미지, 스크립트와 같은 외부 리소스가 참조될 수 있습니다. `ResourceHandler`를 사용하면 이러한 리소스를 어떻게 가져올지 제어할 수 있습니다. 이 예제에서는 핸들러가 모든 요청에 대해 빈 `MemoryStream`을 반환하므로 외부 자산이 모두 제거됩니다. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**When to use:** 이 패턴은 보안이 제한된 환경, 단위 테스트, 혹은 외부 파일 없이 마크업만 필요할 때 유용합니다. + +## Step 5: Assemble HTML save options (HTML to image conversion) + +리소스 핸들러, 렌더링 설정, 폰트 스타일 등 모든 요소를 `HtmlSaveOptions` 객체에 연결합니다. 이 객체는 Aspose.HTML에게 문서를 어떻게 직렬화할지 알려줍니다. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explanation:** `WebFontStyle`은 누락될 수 있는 웹 폰트에 대해 특정 스타일(예: bold)을 강제할 수 있습니다. 앞서 구성한 `ImageRenderingOptions`와 `TextOptions`가 여기 주입되어, 이후 발생하는 모든 래스터화에 영향을 미칩니다. + +## Step 6: Save the document to a memory stream (complete solution) + +마지막으로 처리된 HTML을 `MemoryStream`에 기록합니다. 이후 스트림을 파일에 저장하거나 네트워크를 통해 전송하거나 다른 API에 전달할 수 있습니다. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Result:** `output.html`은 `input.html`과 동일한 마크업을 가지지만, 모든 외부 리소스가 빈 스트림으로 교체되고 렌더링 기본 설정이 저장 옵션에 반영됩니다. + +## Full runnable example + +모든 단계를 하나로 합치면 복사·붙여넣기만으로 바로 실행할 수 있는 독립 프로그램이 완성됩니다. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +이 프로그램을 실행하면 현재 디렉터리에 `output.html`이 생성됩니다. 브라우저에서 파일을 열어 원본 마크업은 로드되지만 연결된 이미지, 폰트, 스크립트는 모두 없음을 확인할 수 있습니다(빈 스트림으로 대체됨). + +## Common questions and edge cases + +| Question | Answer | +|----------|--------| +| **What if I need the original resources instead of empty streams?** | `MemoryResourceHandler`를 파일을 디스크에서 읽거나 HTTP로 다운로드하는 핸들러로 교체하면 됩니다. | +| **Can I render the HTML directly to PNG or JPEG?** | 가능합니다. 동일한 `ImageRenderingOptions`와 `TextOptions`를 사용한 `ImageRenderer`를 만든 뒤 `renderer.Render(page, outputStream, ImageFormat.Png)`을 호출하세요. | +| **Is `WebFontStyle.Bold` required?** | 필요하지 않습니다. 폰트 스타일을 강제하는 예시일 뿐이며, 강제 스타일이 필요 없으면 `WebFontStyle.Normal`로 변경하거나 생략하면 됩니다. | +| **Does this work on .NET Core?** | Aspose.HTML은 .NET 5/6/7을 지원하므로 .NET Core 프로젝트에서도 동일한 코드를 사용할 수 있습니다. | +| **How do I handle large HTML files efficiently?** | `FileStream` 생성자를 사용해 `HTMLDocument`에 스트리밍하면 전체 파일을 한 번에 메모리로 로드하지 않아도 됩니다. | + +## Conclusion + +이제 Aspose.HTML을 사용해 **파일에서 HTML 문서를 로드**하고, **이미지 렌더링 옵션** 및 **텍스트 렌더링 옵션**을 구성하며, **사용자 정의 리소스 핸들러**로 외부 자산을 제어하는 방법을 알게 되었습니다. 완전한 예제는 처리된 HTML을 메모리 스트림에 저장하는 과정을 보여주며, 필요에 따라 이를 영구 저장하거나 전송할 수 있습니다. + +다음 단계로 `HtmlSaveOptions`를 `ImageRenderer`로 교체해 **HTML을 이미지로 변환**하거나, CSS 미디어 쿼리, SVG 지원, PDF 내보내기 등 **Aspose.HTML 렌더링** 기능을 실험해 보세요. 이러한 확장 기능을 활용하면 C#만으로 풍부한 문서 처리 파이프라인을 구축할 수 있습니다. + +Happy coding! + + +## What Should You Learn Next? + + +다음 튜토리얼은 이 가이드에서 다룬 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 제공하므로 추가 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용하는 데 도움이 됩니다. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/korean/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/korean/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..5a8077f49 --- /dev/null +++ b/html/korean/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-09-10 +description: C#에서 HtmlSaveOptions를 사용하여 웹 폰트 스타일을 제어하고 Aspose.HTML로 HTML 파일을 저장하는 + 방법을 배웁니다. 전체 코드 예제와 실용적인 팁이 포함되어 있습니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: ko +lastmod: 2026-09-10 +og_description: C#에서 HtmlSaveOptions를 사용하여 Aspose.HTML으로 HTML을 저장할 때 굵은 글꼴과 이탤릭 웹 + 폰트 스타일을 활성화하는 방법. 전체 예제와 모범 사례 팁을 확인하세요. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Aspose.HTML와 C#에서 HtmlSaveOptions 사용 방법 – 단계별 가이드 +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Aspose.HTML와 함께 C#에서 HtmlSaveOptions 사용 방법 +url: /ko/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#와 Aspose.HTML에서 HtmlSaveOptions 사용 방법 + +Aspose.HTML가 HTML 문서를 저장하는 방식을 제어해야 한다면, **HtmlSaveOptions 사용 방법을 배우는 것이 필수**입니다. 이 튜토리얼에서는 문서를 저장할 때 굵은 글씨와 기울임꼴 웹 폰트 스타일을 활성화하도록 HtmlSaveOptions를 사용하는 방법을 단계별로 보여줍니다. + +Aspose HTML 라이브러리는 HTML 콘텐츠를 로드, 조작 및 내보내기 위한 풍부한 API를 제공합니다. 이 가이드를 마치면 다음을 수행할 수 있습니다: + +* 기존 HTML 파일을 `HTMLDocument`에 로드합니다. +* 특정 `WebFontStyle` 플래그를 적용하도록 `HtmlSaveOptions`를 구성합니다. +* 수정된 문서를 새 위치나 스트림에 저장합니다. +* 다른 글꼴 스타일, 사용자 정의 CSS 및 오류 처리를 위해 솔루션을 확장합니다. + +## 사전 요구 사항 + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +* .NET 6.0 이상이 설치되어 있음. +* **Aspose.HTML for .NET**에 대한 유효한 라이선스(무료 체험판도 이 예제에 사용할 수 있음). +* 코드를 컴파일하고 실행할 수 있는 Visual Studio 2022(또는 기타 C# IDE). + +추가 NuGet 패키지는 `Aspose.HTML` 외에 필요하지 않습니다. + +## 단계 1: 프로젝트 설정 및 네임스페이스 가져오기 + +새 **Console App** 프로젝트를 만들고 Aspose.HTML NuGet 패키지를 추가합니다: + +```bash +dotnet add package Aspose.HTML +``` + +그 다음, `Program.cs` 파일 상단에 필요한 네임스페이스를 가져옵니다: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +이 네임스페이스를 통해 튜토리얼 전반에 사용할 `HTMLDocument`, `HtmlSaveOptions`, `WebFontStyle` 타입을 사용할 수 있습니다. + +## 단계 2: 소스 HTML 문서 로드 + +첫 번째 작업은 처리하려는 HTML을 읽는 것입니다. `"YOUR_DIRECTORY/input.html"`을 실제 파일 경로로 바꾸세요. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument`는 마크업을 구문 분석하고 DOM 트리를 구축하여 조작할 수 있게 합니다. 파일이 존재하지 않으면 예외가 발생하므로, 실제 코드에서는 이 호출을 try‑catch 블록으로 감싸는 것이 좋습니다. + +## 단계 3: HtmlSaveOptions 생성 및 구성 + +`HtmlSaveOptions`를 사용하면 저장 과정을 세밀하게 조정할 수 있습니다. 굵은 글씨와 기울임꼴 웹 폰트 스타일을 활성화하려면 비트 OR 연산자(`|`)를 사용해 해당 `WebFontStyle` 플래그를 결합합니다. + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### 왜 WebFontStyle을 구성하나요? + +HTML 문서를 내보낼 때 Aspose.HTML는 원본 스타일에 맞는 웹 폰트를 삽입할 수 있습니다. `WebFontStyle`을 설정하면 어떤 글꼴 변형을 포함할지 지정하게 됩니다. 이렇게 하면 필요한 스타일만 포함해 최종 파일 크기를 줄이고, 렌더링 결과가 원본과 일치하도록 보장합니다. + +#### 일반적인 변형 + +| 원하는 스타일 | 해당 `WebFontStyle` 플래그 | +|---------------|-----------------------------------| +| 보통 (regular) | `WebFontStyle.Regular` | +| 굵게 | `WebFontStyle.Bold` | +| 기울임 | `WebFontStyle.Italic` | +| 굵게 + 기울임 | `WebFontStyle.Bold | WebFontStyle.Italic` | +| 모든 변형 | `WebFontStyle.All` | + +시나리오에 맞는 조합을 자유롭게 사용할 수 있습니다. + +## 단계 4: 구성된 옵션으로 문서 저장 + +이제 문서를 새 파일에 저장합니다. `Save` 메서드는 대상 경로와 준비한 `HtmlSaveOptions` 인스턴스를 인수로 받습니다. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +파일을 HTTP 등으로 전송하기 위해 메모리 스트림에 쓰고 싶다면 `Stream` 객체를 받는 오버로드를 사용합니다: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## 단계 5: 결과 확인 + +`output.html`을 브라우저에서 열거나 텍스트 편집기로 파일을 확인하세요. 이제 ` + + +
+ +"; +``` + +HTML definiuje prosty kształt wektorowy, który korzysta z antyaliasingu po rasteryzacji. + +## Krok 2: Zainicjalizuj silnik renderujący + +Aspose.HTML używa `HtmlRenderer` wraz z `ImageRenderingOptions`. To tutaj **jak włączyć antyaliasing** dla końcowej bitmapy. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Dlaczego `UseAntialiasing = true` ma znaczenie**: Silnik renderujący rysuje kształty wektorowe, tekst i gradienty z precyzją podpikselową. Włączenie antyaliasingu nakazuje rasteryzatorowi mieszać piksele krawędziowe z sąsiadującymi, eliminując ząbkowane linie, które pojawiają się, gdy `UseAntialiasing` pozostaje domyślnie `false`. To jest sedno **renderowania obrazów wysokiej jakości**. + +## Krok 3: Renderuj HTML do obrazu + +Po skonfigurowaniu opcji wywołaj metodę `RenderToImage`. Metoda zwraca obiekt `Image`, który możesz zapisać na dysku lub przesłać bezpośrednio w odpowiedzi. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Po wykonaniu, `output.png` zawiera gładkie, antyaliasowane koło. Otwórz plik w dowolnym przeglądarce obrazów, aby zweryfikować wynik. + +![jak włączyć antyaliasing w renderowaniu Aspose.HTML rendering](/images/antialiasing-example.png){alt="jak włączyć antyaliasing w renderowaniu Aspose.HTML"} + +## Krok 4: Zweryfikuj wysokiej jakości wynik (jak renderować obraz HTML) + +Możesz programowo potwierdzić wymiary obrazu i DPI, aby upewnić się, że renderowanie spełnia Twoje oczekiwania. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typowy output konsoli: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Zwiększone DPI w połączeniu z antyaliasingiem daje czysty rezultat nawet przy skalowaniu obrazu. To pokazuje **jak renderować obraz HTML** w profesjonalnej jakości. + +## Typowe warianty i przypadki brzegowe + +| Sytuacja | Zalecana modyfikacja | +|-----------|-------------------| +| Renderowanie bardzo dużych stron (np. aplikacji webowych pełnoekranowych) | Zwiększ `ImageRenderingOptions.Width` / `Height` lub ustaw `Scale`, aby kontrolować zużycie pamięci. | +| Potrzeba przezroczystego tła | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| Docelowy format JPEG dla mniejszego rozmiaru pliku | Zmień `ImageFormat` na `ImageFormat.Jpeg` i dostosuj `Quality` (0‑100). | +| Uruchamianie w kontenerze Linux bez GUI | Aspose.HTML działa w pełni w trybie headless; nie są wymagane dodatkowe zależności. | +| Musisz wyłączyć antyaliasing dla testu UI z dokładnością do piksela | Set `UseAntialiasing = false;` – krawędzie będą ostre, ale mogą wyglądać ząbkowanie. | + +### Porada pro + +Podczas generowania partii obrazów, ponownie używaj jednej instancji `HTMLDocument` i modyfikuj jedynie jej właściwość `Content` pomiędzy renderowaniami. Redukuje to narzut parsowania tego samego HTML wielokrotnie i zwiększa przepustowość. + +## Pełny listing źródłowego kodu + +Poniżej znajduje się kompletny program, który możesz skopiować do nowego projektu konsolowego i uruchomić od razu. + + + +## Co warto się nauczyć dalej? + +Poniższe samouczki obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Jak renderować HTML do obrazu w C# – Kompletny przewodnik](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Samouczek HTML do obrazu – Renderowanie HTML do PNG w C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Jak używać Aspose do renderowania HTML do PNG – Przewodnik krok po kroku](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/polish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/polish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..9d4ed272f --- /dev/null +++ b/html/polish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Popraw klarowność tekstu przy renderowaniu HTML przy użyciu Aspose.HTML, + włączając hinting. Ten przewodnik pokazuje, jak włączyć hinting i dlaczego jest + to ważne. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: pl +lastmod: 2026-09-10 +og_description: Popraw czytelność tekstu w Aspose.HTML, ucząc się, jak włączyć hinting. + Postępuj zgodnie z przewodnikiem krok po kroku, aby uzyskać wyraźniejszy tekst na + każdej platformie. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Popraw czytelność tekstu w Aspose.HTML – włącz hinting, aby uzyskać ostrzejsze + renderowanie +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Jak poprawić czytelność tekstu w Aspose.HTML przy użyciu hintingu +url: /pl/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak poprawić czytelność tekstu w Aspose.HTML przy użyciu hintingu + +Jeśli potrzebujesz poprawić czytelność tekstu podczas renderowania HTML za pomocą Aspose.HTML, ten przewodnik przedstawia pełne rozwiązanie. Włączenie hintingu zapewnia ostrzejsze glify, szczególnie na platformach nie‑Windows, gdzie domyślne renderowanie może wyglądać rozmycie. + +W tym tutorialu dowiesz się, jak włączyć hinting, dlaczego ma to znaczenie dla czytelności tekstu oraz jak zintegrować to ustawienie w typowym przepływie pracy Aspose.HTML. Nie jest wymagana żadna zewnętrzna dokumentacja — wszystko, czego potrzebujesz, znajduje się w poniższych krokach. + +## Wymagania wstępne + +Zanim rozpoczniesz, upewnij się, że masz: + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7+) +* Licencjonowaną kopię **Aspose.HTML for .NET** (darmowa wersja próbna wystarczy do testów) +* Podstawową znajomość C# oraz Visual Studio lub dowolnego innego ulubionego IDE + +Te wymagania są minimalne; to samo podejście działa w aplikacjach konsolowych, usługach ASP.NET Core oraz aplikacjach desktopowych. + +## Dlaczego włączenie hintingu poprawia czytelność tekstu + +Hinting to proces, który dostosowuje kontur każdego glifu do siatki pikseli urządzenia wyświetlającego. Bez hintingu, szczególnie na ekranach o niskiej rozdzielczości lub wysokim DPI, znaki mogą wyglądać na rozmyte lub nierówne. Włączenie hintingu nakazuje silnikowi renderującemu automatycznie zastosować te korekty, co skutkuje: + +* Jednolitym grubością kresek we wszystkich znakach +* Lepszą czytelnością na Linuxie, macOS oraz starszych wersjach Windows +* Profesjonalnym wyglądem PDF‑ów, zrzutów ekranu lub podglądów na ekranie + +Aspose.HTML udostępnia to zachowanie poprzez właściwość **TextOptions.UseHinting**, której domyślna wartość to `false` ze względu na kompatybilność wsteczną. + +## Krok 1: Utwórz instancję `TextOptions` + +Pierwszym krokiem jest zainicjowanie klasy **TextOptions**. Ten obiekt grupuje wszystkie ustawienia związane z renderowaniem tekstu, co ułatwia przekazanie ich do potoku renderowania. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Utworzenie obiektu nie zmienia jeszcze renderowania; po prostu przygotowuje pojemnik na opcje, które ustawisz później. + +## Krok 2: Włącz hinting, aby poprawić czytelność tekstu + +Ustaw właściwość **UseHinting** na `true`. Ten jedyny wiersz aktywuje algorytm hintingu dla każdego fragmentu tekstu renderowanego z użyciem powiązanych opcji. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Gdy `UseHinting` jest `true`, Aspose.HTML automatycznie stosuje korekty sub‑pikselowe do każdego glifu. Efekt jest najbardziej widoczny w czcionkach zawierających drobne detale, takich jak szeryfowe lub małe rozmiary tekstu. + +### Pro tip: Połącz hinting z anti‑aliasingiem + +Jeśli chcesz dodatkowo uzyskać płynniejsze krawędzie, możesz włączyć anti‑aliasing razem z hintingiem: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Oba ustawienia razem zapewniają najlepszą wierność wizualną na szerokim zakresie urządzeń. + +## Krok 3: Dołącz `TextOptions` do procesu renderowania + +Musisz przekazać skonfigurowany obiekt `TextOptions` do **HtmlRenderer** (lub innej klasy renderującej, której używasz). Poniżej znajduje się minimalny przykład, który wczytuje ciąg HTML, stosuje opcje i zapisuje wynik do pliku PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Wyjaśnienie kluczowych linii** + +* `HTMLDocument` parsuje znacznik HTML. +* `ImageDevice` definiuje wymiary wyjścia (800 × 600 pikseli w tym przykładzie). +* `HtmlRenderer` wykonuje rzeczywiste renderowanie; przypisanie `textOptions` do `renderer.Options.TextOptions` zapewnia zastosowanie hintingu. +* `device.Save("output.png")` zapisuje finalny obraz na dysku. + +Uruchomienie tego kodu generuje plik `output.png`, w którym nagłówek i akapit są wyraźne, nawet na monitorze 96 dpi. + +## Krok 4: Zweryfikuj wynik + +Otwórz wygenerowany obraz w dowolnym przeglądarce. Porównaj go z obrazem renderowanym **bez** hintingu (ustaw `UseHinting = false`). Powinieneś zauważyć: + +* Ostrzejsze krawędzie liter „H”, „e”, „l”, „o” +* Bardziej jednolitą grubość kresek w całym akapicie +* Zmniejszone „duchy” na ukośnych liniach znaków + +Jeśli różnica jest subtelna na Twoim ekranie, spróbuj przybliżyć obraz lub wydrukować go; poprawa staje się wyraźniejsza przy większych powiększeniach. + +## Typowe warianty i przypadki brzegowe + +### Renderowanie do PDF zamiast PNG + +Jeśli docelowym formatem jest PDF, zamień `ImageDevice` na `PdfDevice`. Ten sam obiekt `TextOptions` działa bez modyfikacji: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Wyświetlacze o wysokim DPI + +Na ekranach z czynnikami skalowania (np. 150 % lub 200 %) warto proporcjonalnie zwiększyć rozmiar urządzenia, aby zachować jakość wizualną. Hinting nadal działa, a rezultat pozostaje ostry. + +### Środowiska Linux lub macOS + +W Linuksie domyślny silnik renderujący może przejść na renderowanie bitmapowe, które ignoruje hinting, chyba że zostanie on wyraźnie włączony. Flaga `UseHinting = true` wymusza zastosowanie hintingu TrueType, eliminując typowy „rozmyty” wygląd na tych platformach. + +### Czcionki bez tabel hintingu + +Niektóre nowoczesne czcionki OpenType nie zawierają danych hintingu. W takich przypadkach Aspose.HTML przechodzi na auto‑hinting, który nadal poprawia czytelność w porównaniu z brakiem hintingu. + +## Krok 5: Najlepsze praktyki dla kodu produkcyjnego + +1. **Utwórz jedną instancję `TextOptions`** i używaj jej wielokrotnie w wywołaniach renderowania. Redukuje to narzut alokacji obiektów. +2. **Połącz hinting z anti‑aliasingiem** (`UseAntiAliasing = true`) dla najgładszego wyniku. +3. **Testuj na docelowych platformach** (Windows, Linux, macOS), ponieważ różnice wizualne mogą się różnić. +4. **Loguj konfigurację renderowania** w logach produkcyjnych; pomaga to w diagnozowaniu nieoczekiwanych artefaktów wizualnych. +5. **Utrzymuj Aspose.HTML w najnowszej wersji**. Nowsze wydania mogą wprowadzać dodatkowe ulepszenia renderowania tekstu. + +## Pełny działający przykład + +Poniżej znajduje się samodzielna aplikacja konsolowa, demonstrująca wszystko, o czym mowa. Skopiuj kod do nowego projektu .NET typu console, dodaj pakiet NuGet Aspose.HTML i uruchom. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Oczekiwany wynik** + +Po uruchomieniu programu zostanie utworzony plik `hinted_output.png`. Nagłówek „Hinting in action” oraz tekst akapitu będą wyraźne, o jednolitej grubości kresek i bez rozmytych krawędzi. Jeśli zakomentujesz `UseHinting = true`, ten sam obraz pokaże nieco rozmyte znaki, co ilustruje korzyść płynącą z tego ustawienia. + +## Podsumowanie + +Teraz wiesz, jak poprawić czytelność tekstu w Aspose.HTML poprzez włączenie hintingu. Proces polega na utworzeniu obiektu `TextOptions`, ustawieniu `UseHinting` (opcjonalnie `UseAntiAliasing`) oraz dołączeniu opcji do renderera. To podejście działa dla PNG, JPEG, PDF i innych formatów wyjściowych, zapewniając spójną jakość wizualną na Windows, Linux i macOS. + +Następnie możesz zgłębić tematy pokrewne, takie jak **jak włączyć hinting** dla własnych czcionek, **optymalizacja wydajności renderowania** lub **użycie CSS do kontrolowania wyglądu tekstu** w Aspose.HTML. Eksperymentuj z różnymi czcionkami i ustawieniami DPI, aby zobaczyć, jak hinting dostosowuje się do każdego scenariusza. + +Miłego kodowania i ciesz się ostrzejszym tekstem w każdym renderowaniu Aspose.HTML! + +## Co powinieneś nauczyć się dalej? + +Poniższe tutoriale obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne przykłady kodu oraz krok‑po‑kroku wyjaśnienia, pomagające opanować dodatkowe funkcje API i odkrywać alternatywne podejścia w własnych projektach. + +- [Jak renderować HTML do PNG przy użyciu Aspose – Kompletny przewodnik](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Jak używać Aspose do renderowania HTML do PNG – Przewodnik krok po kroku](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Utwórz dokument HTML ze stylowanym tekstem i wyeksportuj do PDF – Pełny przewodnik](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/polish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/polish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..4e87ab07d --- /dev/null +++ b/html/polish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: Jak renderować HTML w C# przy użyciu Aspose.Html. Dowiedz się, jak przetwarzać + HTML i CSS, zapisywać HTML, konwertować HTML na strumień oraz ładować dokument HTML + w .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: pl +lastmod: 2026-09-10 +og_description: Jak renderować HTML w C# przy użyciu Aspose.Html. Ten przewodnik pokazuje, + jak przetwarzać HTML i CSS, zapisywać HTML, konwertować HTML na strumień oraz efektywnie + ładować dokument HTML. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Renderowanie HTML w C# przy użyciu Aspose.Html – samouczek krok po kroku +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Jak renderować HTML w C# przy użyciu Aspose.Html – pełny przewodnik +url: /pl/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak renderować HTML w C# przy użyciu Aspose.Html – pełny przewodnik + +Jeśli potrzebujesz **how to render html** w aplikacji .NET, ten tutorial pokazuje pełny przepływ pracy. Zobaczysz, jak przetwarzać HTML CSS, jak zapisywać HTML, konwertować HTML do strumienia oraz ładować dokument HTML w C# przy użyciu biblioteki Aspose.Html. + +Renderowanie HTML w kontekście po stronie serwera często wymaga więcej niż tylko załadowania pliku — musisz także obsłużyć powiązane zasoby, takie jak obrazy i arkusze stylów. Ten przewodnik przeprowadzi Cię przez każdy krok, od ładowania dokumentu po dostosowanie obsługi zasobów i w końcu wyodrębnienie wyrenderowanego wyniku jako strumienia pamięci. + +Pod koniec artykułu będziesz w stanie: + +* Załadować dokument HTML z dysku lub z URL (`load html document c#`). +* Dostarczyć własny `ResourceHandler`, aby **process html css** w locie. +* Zapisz wyrenderowany HTML i **convert html to stream** do dalszego przetwarzania. +* Zachować wynik przy użyciu technik **how to save html**, które działają w każdym środowisku .NET. + +## Prerequisites + +* .NET 6.0 SDK lub nowszy zainstalowany. +* Visual Studio 2022 (lub dowolne IDE obsługujące .NET 6). +* Odwołanie NuGet do **Aspose.Html** (`dotnet add package Aspose.Html`). +* Plik `input.html` umieszczony w znanym folderze (przykład używa `YOUR_DIRECTORY/input.html`). + +Nie są wymagane dodatkowe biblioteki firm trzecich. + +## How to render HTML – step‑by‑step guide + +### Step 1: Load the HTML document in C# + +Pierwszą operacją jest utworzenie instancji `HTMLDocument`, która reprezentuje źródłowy kod. To jest rdzeń **how to render html** z Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Dlaczego to ważne:* Ładowanie dokumentu parsuje kod i buduje wewnętrzny DOM, którego renderer później używa do zastosowania CSS i rozwiązania zasobów. + +### Step 2: Create a custom resource handler to **process html css** + +Gdy renderer napotyka zewnętrzne zasoby (obrazy, pliki CSS, czcionki), pyta `ResourceHandler` o strumień. Dostarczając własny handler, zyskujesz pełną kontrolę nad tym, jak każdy zasób jest pobierany, przetwarzany lub zastępowany. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Dlaczego to ważne:* To w handlerze realizujesz logikę **process html css** — np. wstawianie CSS inline, zamiana obrazów na placeholdery lub stosowanie filtrów bezpieczeństwa. + +### Step 3: Configure `HtmlSaveOptions` to use the custom handler + +`HtmlSaveOptions` określa, jak renderer zapisuje wynik. Przypisz utworzony `ResourceHandler`, aby renderer wywoływał go przy każdej zewnętrznej referencji. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Ustawienie `EmbedCss` i `EmbedImages` jest przydatne, gdy później **convert html to stream** i potrzebujesz samodzielnego wyniku. + +### Step 4: Save the document and **convert html to stream** + +Teraz możesz wyrenderować dokument i przechwycić wynik w `MemoryStream`. To jest rdzeń **how to save html**, gdy chcesz uzyskać wynik w pamięci, a nie w fizycznym pliku. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Dlaczego to ważne:* `MemoryStream` zapewnia elastyczną, binarną reprezentację wyrenderowanego HTML, którą możesz przechowywać, przesyłać lub dalej manipulować bez dotykania systemu plików. + +## Handling common edge cases + +| Sytuacja | Zalecane podejście | +|-----------|----------------------| +| **Brakujące pliki CSS lub obrazy** | W `MyResourceHandler.HandleResource` sprawdź `File.Exists` przed otwarciem. Zwróć pusty `MemoryStream` lub obraz zastępczy, jeśli plik nie istnieje. | +| **Duże pliki HTML (>10 MB)** | Zwiększ domyślny rozmiar bufora `MemoryStream` (`new MemoryStream(capacity)`), aby uniknąć częstych realokacji. | +| **Względne adresy URL z segmentami `..`** | Użyj `new Uri(baseUri, info.Uri)`, aby rozwiązać pełną ścieżkę przed dostępem do systemu plików. | +| **Bezpieczeństwo wątkowe w ASP.NET** | Twórz nowy `HTMLDocument` i `MyResourceHandler` dla każdego żądania; unikaj współdzielenia instancji między wątkami. | +| **Problemy z kodowaniem** | Ustaw `saveOpts.Encoding = Encoding.UTF8`, aby zapewnić wyjście w UTF‑8, szczególnie gdy źródło zawiera znaki spoza ASCII. | + +## Pro tip: reuse the same handler for multiple documents + +Jeśli przetwarzasz wiele plików HTML w partii, możesz utrzymać jedną instancję `MyResourceHandler` i po prostu zmieniać jej wewnętrzną tabelę wyszukiwania. To zmniejsza narzut alokacji obiektów i przyspiesza fazę **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Full, runnable example + +Poniżej znajduje się kompletny program, który możesz wkleić do aplikacji konsolowej. Demonstruje **how to render html**, **process html css**, **how to save html**, **convert html to stream** oraz **load html document c#** — wszystko w jednym przepływie. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Oczekiwany wynik** (skrócony dla przejrzystości): + + + +## What Should You Learn Next? + +Poniższe tutoriale obejmują tematy ściśle powiązane, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne, działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Jak zapisać HTML przy użyciu Aspose.Html – Kompletny przewodnik C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Jak używać Aspose do renderowania HTML do PNG w C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Jak używać Aspose do renderowania HTML do PNG – Przewodnik krok po kroku](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/polish/net/working-with-html-documents/_index.md b/html/polish/net/working-with-html-documents/_index.md index 31ff9fd63..190557152 100644 --- a/html/polish/net/working-with-html-documents/_index.md +++ b/html/polish/net/working-with-html-documents/_index.md @@ -36,6 +36,8 @@ Gdy już opanujesz podstawy, zagłębimy się w proces tworzenia. W tej sekcji n Teraz przenieśmy Twoje umiejętności na wyższy poziom. Edycja dokumentów HTML to typowe zadanie dla programistów stron internetowych, a Aspose.HTML znacznie upraszcza ten proces. W tej sekcji omówimy tworzenie, manipulację i stylizowanie dokumentów. Odkryjesz, jak ulepszyć wygląd i funkcjonalność treści internetowych, czyniąc je angażującymi i przyjaznymi dla użytkownika. +### [Jak załadować dokument HTML z pliku przy użyciu Aspose.HTML w C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [Jak zapisać HTML w C# – Kompletny przewodnik z użyciem własnego obsługiwacza zasobów](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) Poznaj metodę zapisu HTML w C# z własnym obsługiwaczem zasobów, umożliwiającą pełną kontrolę nad zapisem i dostępem do zasobów. @@ -49,6 +51,10 @@ Dowiedz się, jak zapisać dokument HTML w C# przy użyciu biblioteki Aspose.Htm ### [Jak zapisać HTML w C# – własne obsługi zasobów i ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Jak spakować HTML w C# – Kompletny przewodnik krok po kroku](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Jak używać HtmlSaveOptions w C# z Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +Poznaj, jak skonfigurować i zastosować HtmlSaveOptions przy zapisywaniu dokumentów HTML w C# przy użyciu Aspose.HTML. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/polish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/polish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..6cc422e11 --- /dev/null +++ b/html/polish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,257 @@ +--- +category: general +date: 2026-09-10 +description: Naucz się ładować dokument HTML z pliku przy użyciu Aspose.HTML w C#. + Zawiera opcje renderowania obrazów, opcje renderowania tekstu oraz niestandardowy + obsługujący zasoby. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: pl +lastmod: 2026-09-10 +og_description: Wczytaj dokument HTML z pliku przy użyciu Aspose.HTML w C#. Ten przewodnik + omawia opcje renderowania, niestandardowy obsługiwacz zasobów oraz kompletny kod, + który możesz uruchomić już dziś. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Wczytaj dokument HTML z pliku przy użyciu Aspose.HTML – przewodnik krok + po kroku w C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Jak wczytać dokument HTML z pliku przy użyciu Aspose.HTML w C# +url: /pl/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak wczytać dokument HTML z pliku przy użyciu Aspose.HTML w C# + +Jeśli potrzebujesz **wczytać dokument HTML z pliku** i kontrolować jego renderowanie, ten tutorial pokaże Ci kompletną, gotową do uruchomienia rozwiązanie. Zobaczysz, jak skonfigurować renderowanie obrazów, włączyć hinting tekstu oraz dostarczyć własny handler zasobów, który zwraca puste strumienie dla zewnętrznych zasobów. Po zakończeniu przewodnika będziesz mógł zapisać przetworzony HTML do strumienia pamięci lub dowolnego innego docelowego miejsca, które preferujesz. + +Przykład używa Aspose.HTML for .NET, biblioteki upraszczającej przetwarzanie HTML, CSS i SVG bez silnika przeglądarki. Nie są wymagane żadne zewnętrzne narzędzia, a kod działa z .NET 6 lub nowszym. Upewnij się, że masz zainstalowany pakiet NuGet Aspose.HTML przed rozpoczęciem. + +## Prerequisites + +- .NET 6 SDK (lub dowolna wersja .NET obsługiwana przez Aspose.HTML) +- Visual Studio 2022 lub inne IDE C# +- Pakiet NuGet Aspose.HTML for .NET (`Install-Package Aspose.HTML`) +- Plik HTML o nazwie `input.html` umieszczony w folderze, do którego możesz odwołać się w kodzie + +## Step 1: Load the HTML document from a file + +Krok 1: Wczytaj dokument HTML z pliku + +Pierwszą operacją jest utworzenie instancji `HTMLDocument`, która odczytuje plik źródłowy. Ten obiekt reprezentuje cały drzewo DOM i udostępnia metody do dalszej manipulacji. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Dlaczego to ważne:** Wczytanie pliku do `HTMLDocument` daje pełny dostęp do struktury dokumentu, stylów i zasobów, które później możesz renderować lub przekształcać. + +## Step 2: Set up image rendering options (Aspose.HTML rendering) + +Krok 2: Skonfiguruj opcje renderowania obrazów (renderowanie Aspose.HTML) + +Jeśli planujesz później rasteryzować stronę, skonfigurowanie renderowania obrazów poprawia jakość wizualną. Antyaliasing wygładza krawędzie i redukuje ząbkowane artefakty. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Wskazówka:** `UseAntialiasing` jest szczególnie przydatny dla grafiki wektorowej i tekstu, które będą rasteryzowane do PNG lub JPEG. + +## Step 3: Enable text hinting (text rendering options) + +Krok 3: Włącz hinting tekstu (opcje renderowania tekstu) + +Hinting tekstu wpływa na to, jak glify są wyrównane do siatki pikseli, co może sprawić, że małe czcionki będą wyglądały ostrzej. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Dlaczego to ważne:** Gdy później eksportujesz HTML do obrazu, hinting redukuje rozmyte znaki i zapewnia spójną typografię na różnych platformach. + +## Step 4: Create a custom resource handler (custom resource handler) + +Krok 4: Utwórz własny handler zasobów (custom resource handler) + +Zewnętrzne zasoby, takie jak czcionki, obrazy czy skrypty, mogą być odwoływane w HTML. `ResourceHandler` pozwala kontrolować, w jaki sposób te zasoby są pobierane. W tym przykładzie handler zwraca pusty `MemoryStream` dla każdego żądania, skutecznie usuwając zewnętrzne zasoby. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Kiedy używać:** Ten wzorzec jest przydatny w środowiskach o ograniczeniach bezpieczeństwa, testach jednostkowych lub gdy potrzebujesz jedynie znaczników bez plików zewnętrznych. + +## Step 5: Assemble HTML save options (HTML to image conversion) + +Krok 5: Zgromadź opcje zapisu HTML (konwersja HTML do obrazu) + +Wszystkie elementy — handler zasobów, ustawienia renderowania i styl czcionki — są dołączane do obiektu `HtmlSaveOptions`. Ten obiekt informuje Aspose.HTML, jak serializować dokument. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Wyjaśnienie:** `WebFontStyle` może wymusić określony styl (np. pogrubiony) dla czcionek internetowych, które mogą być nieobecne. `ImageRenderingOptions` i `TextOptions`, które skonfigurowaliśmy wcześniej, są tutaj wstrzykiwane, zapewniając ich wpływ na wszelką późniejszą rasteryzację. + +## Step 6: Save the document to a memory stream (complete solution) + +Krok 6: Zapisz dokument do strumienia pamięci (kompletne rozwiązanie) + +Na koniec zapisz przetworzony HTML do `MemoryStream`. Stamtąd możesz zapisać strumień do pliku, wysłać go przez sieć lub przekazać do innego API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Rezultat:** `output.html` zawiera teraz ten sam znacznik co `input.html`, ale ze wszystkimi zewnętrznymi zasobami zastąpionymi pustymi strumieniami oraz z preferencjami renderowania wbudowanymi w opcje zapisu. + +## Full runnable example + +Pełny przykład gotowy do uruchomienia + +Połączenie wszystkich kroków daje Ci samodzielny program, który możesz skopiować, wkleić i uruchomić. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Uruchomienie tego programu tworzy `output.html` w bieżącym katalogu. Otwórz plik w przeglądarce, aby potwierdzić, że oryginalny znacznik się ładuje, ale wszystkie powiązane obrazy, czcionki lub skrypty są nieobecne (zostały zastąpione pustymi strumieniami). + +## Common questions and edge cases + +Częste pytania i przypadki brzegowe + +| Pytanie | Odpowiedź | +|----------|--------| +| **Co zrobić, jeśli potrzebuję oryginalnych zasobów zamiast pustych strumieni?** | Zastąp `MemoryResourceHandler` handlerem, który odczytuje pliki z dysku lub pobiera je przez HTTP. | +| **Czy mogę renderować HTML bezpośrednio do PNG lub JPEG?** | Tak. Użyj `ImageRenderer` z tymi samymi `ImageRenderingOptions` i `TextOptions`, które skonfigurowałeś, a następnie wywołaj `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Czy `WebFontStyle.Bold` jest wymagany?** | Nie. Jest pokazany jako przykład nadpisywania stylu czcionki. Pomiń go lub zmień na `WebFontStyle.Normal`, jeśli nie potrzebujesz wymuszonego stylu. | +| **Czy to działa na .NET Core?** | Aspose.HTML obsługuje .NET 5/6/7, więc ten sam kod działa w projektach .NET Core. | +| **Jak efektywnie obsługiwać duże pliki HTML?** | Strumieniuj plik do `HTMLDocument` używając konstruktora `FileStream`, aby uniknąć ładowania całego pliku do pamięci jednocześnie. | + +## Conclusion + +Podsumowanie + +Teraz wiesz, jak **wczytać dokument HTML z pliku** przy użyciu Aspose.HTML, skonfigurować **opcje renderowania obrazów** i **opcje renderowania tekstu**, oraz zastosować **własny handler zasobów** do kontrolowania zewnętrznych zasobów. Pełny przykład pokazuje zapis przetworzonego HTML do strumienia pamięci, który możesz zachować lub przesłać w razie potrzeby. + +Następnie możesz zbadać **konwersję HTML do obrazu** zamieniając `HtmlSaveOptions` na `ImageRenderer`, lub eksperymentować z funkcjami renderowania **Aspose.HTML**, takimi jak zapytania mediów CSS, obsługa SVG i eksport do PDF. Te rozszerzenia pozwalają budować zaawansowane potoki przetwarzania dokumentów w pełni w C#. + +Miłego kodowania! + +## What Should You Learn Next? + +Co powinieneś nauczyć się dalej? + +Poniższe tutoriale obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Wczytywanie HTML przy użyciu zdalnego serwera w .NET z Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Wczytywanie HTML przy użyciu URL w .NET z Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Jak zapisać HTML w C# – Kompletny przewodnik z użyciem własnego handlera zasobów](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/polish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/polish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..c7416ffb7 --- /dev/null +++ b/html/polish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,314 @@ +--- +category: general +date: 2026-09-10 +description: Dowiedz się, jak używać HtmlSaveOptions w C#, aby kontrolować style czcionek + internetowych i zapisywać pliki HTML przy użyciu Aspose.HTML. Pełny przykład kodu + oraz praktyczne wskazówki w zestawie. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: pl +lastmod: 2026-09-10 +og_description: Jak używać HtmlSaveOptions w C#, aby włączyć pogrubione i kursywne + style czcionek internetowych przy zapisywaniu HTML przy użyciu Aspose.HTML. Zapoznaj + się z pełnym przykładem i wskazówkami najlepszych praktyk. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Jak używać HtmlSaveOptions w C# z Aspose.HTML – przewodnik krok po kroku +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Jak używać HtmlSaveOptions w C# z Aspose.HTML +url: /pl/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak używać HtmlSaveOptions w C# z Aspose.HTML + +Jeśli potrzebujesz kontrolować sposób, w jaki Aspose.HTML zapisuje dokument HTML, **poznanie HtmlSaveOptions jest niezbędne**. Ten tutorial pokazuje krok po kroku, jak używać HtmlSaveOptions, aby włączyć pogrubione i kursywne style czcionek internetowych podczas zapisywania dokumentu. + +Biblioteka Aspose HTML udostępnia rozbudowane API do ładowania, modyfikowania i eksportowania treści HTML. Po zakończeniu tego przewodnika będziesz w stanie: + +* Załadować istniejący plik HTML do `HTMLDocument`. +* Skonfigurować `HtmlSaveOptions`, aby zastosować określone flagi `WebFontStyle`. +* Zapisać zmodyfikowany dokument w nowej lokalizacji lub do strumienia. +* Rozszerzyć rozwiązanie o inne style czcionek, własny CSS i obsługę błędów. + +## Wymagania wstępne + +Zanim rozpoczniesz, upewnij się, że masz: + +* .NET 6.0 lub nowszy zainstalowany. +* Ważną licencję na **Aspose.HTML for .NET** (bezpłatna wersja próbna wystarczy do tego przykładu). +* Visual Studio 2022 (lub dowolne IDE C#) do kompilacji i uruchomienia kodu. + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.HTML`. + +## Krok 1: Utworzenie projektu i import przestrzeni nazw + +Utwórz nowy projekt **Console App** i dodaj pakiet NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Następnie, na początku pliku `Program.cs`, zaimportuj wymagane przestrzenie nazw: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Te przestrzenie nazw udostępniają typy `HTMLDocument`, `HtmlSaveOptions` i `WebFontStyle`, które będą używane w całym tutorialu. + +## Krok 2: Załadowanie źródłowego dokumentu HTML + +Pierwszym krokiem jest odczytanie HTML, który chcesz przetworzyć. Zastąp `"YOUR_DIRECTORY/input.html"` rzeczywistą ścieżką do swojego pliku. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analizuje znacznik, buduje drzewo DOM i przygotowuje je do manipulacji. Jeśli plik nie istnieje, zostanie rzucony wyjątek, więc w kodzie produkcyjnym warto otoczyć to wywołanie blokiem try‑catch. + +## Krok 3: Utworzenie i skonfigurowanie HtmlSaveOptions + +`HtmlSaveOptions` pozwala precyzyjnie dostroić proces zapisu. Aby włączyć pogrubione i kursywne style czcionek internetowych, połącz odpowiednie flagi `WebFontStyle` przy użyciu operatora bitowego OR (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Dlaczego konfigurować WebFontStyle? + +Podczas eksportu dokumentu HTML, Aspose.HTML może osadzać czcionki internetowe odpowiadające oryginalnemu formatowaniu. Ustawiając `WebFontStyle`, określasz, które warianty czcionek mają zostać dołączone. Dzięki temu zmniejszasz rozmiar końcowego pliku, gdy potrzebujesz tylko wybranych stylów, i zapewniasz, że renderowany wynik będzie zgodny ze źródłem. + +#### Typowe warianty + +| Żądany styl | Odpowiednia flaga `WebFontStyle` | +|-------------|-----------------------------------| +| Normalny (regular) | `WebFontStyle.Regular` | +| Pogrubiony | `WebFontStyle.Bold` | +| Kursywa | `WebFontStyle.Italic` | +| Pogrubiony + Kursywa | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Wszystkie warianty | `WebFontStyle.All` | + +Możesz połączyć dowolną kombinację pasującą do Twojego scenariusza. + +## Krok 4: Zapis dokumentu z skonfigurowanymi opcjami + +Teraz zapisz dokument do nowego pliku. Metoda `Save` przyjmuje ścieżkę docelową oraz przygotowaną instancję `HtmlSaveOptions`. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Jeśli potrzebujesz zapisać do strumienia pamięci (np. aby przesłać plik przez HTTP), użyj przeciążenia przyjmującego obiekt `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Krok 5: Weryfikacja wyniku + +Otwórz `output.html` w przeglądarce lub przejrzyj plik w edytorze tekstu. Powinieneś zobaczyć, że blok ` + + +
+ +"; +``` + +O HTML define uma forma vetorial simples que se beneficia do antialiasing quando rasterizada. + +## Etapa 2: Inicializar o mecanismo de renderização + +Aspose.HTML usa um `HtmlRenderer` junto com `ImageRenderingOptions`. É aqui que você **como habilitar antialiasing** para o bitmap final. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Por que `UseAntialiasing = true` é importante**: O mecanismo de renderização desenha formas vetoriais, texto e gradientes usando precisão sub‑pixel. Habilitar o antialiasing indica ao rasterizador que ele deve mesclar os pixels de borda com seus vizinhos, eliminando linhas serrilhadas que aparecem quando `UseAntialiasing` permanece no padrão `false`. Isso é o núcleo da **renderização de imagens de alta qualidade**. + +## Etapa 3: Renderizar o HTML em uma imagem + +Com as opções configuradas, chame o método `RenderToImage`. O método retorna um objeto `Image` que você pode salvar no disco ou transmitir diretamente para uma resposta. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Após a execução, `output.png` contém um círculo suave e com antialiasing. Abra o arquivo em qualquer visualizador de imagens para verificar o resultado. + +![como habilitar antialiasing na renderização Aspose.HTML](/images/antialiasing-example.png){alt="como habilitar antialiasing na renderização Aspose.HTML"} + +## Etapa 4: Verificar saída de alta qualidade (como renderizar imagem html) + +Você pode confirmar programaticamente as dimensões da imagem e o DPI para garantir que a renderização atenda às suas expectativas. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Saída típica do console: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +O DPI aumentado combinado com antialiasing produz um resultado limpo mesmo quando a imagem é ampliada. Isso demonstra **como renderizar imagem html** com qualidade profissional. + +## Variações comuns e casos de borda + +| Situação | Ajuste recomendado | +|-----------|-------------------| +| Renderizando páginas muito grandes (por exemplo, aplicativos web em tela cheia) | Aumente `ImageRenderingOptions.Width` / `Height` ou defina `Scale` para controlar o uso de memória. | +| Necessidade de fundo transparente | Defina `imageOptions.BackgroundColor = Color.Transparent;` | +| Alvo JPEG para tamanho de arquivo menor | Altere `ImageFormat` para `ImageFormat.Jpeg` e ajuste `Quality` (0‑100). | +| Executando em um contêiner Linux sem interface gráfica | Aspose.HTML é totalmente headless; nenhuma dependência adicional é necessária. | +| Você deve desativar antialiasing para um teste de UI pixel‑perfect | Defina `UseAntialiasing = false;` – as bordas ficarão nítidas, mas podem parecer serrilhadas. | + +### Dica profissional + +Ao gerar um lote de imagens, reutilize uma única instância `HTMLDocument` e modifique apenas sua propriedade `Content` entre as renderizações. Isso reduz a sobrecarga de analisar o mesmo HTML repetidamente e melhora a taxa de processamento. + +## Listagem completa do código-fonte + +Abaixo está o programa completo que você pode copiar para um novo projeto console‑app e executar imediatamente. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos estreitamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá-lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Como renderizar html para uma imagem com C# – Guia Completo](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutorial HTML para Imagem – Renderizar HTML para PNG em C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Como usar Aspose para renderizar HTML em PNG – Guia passo a passo](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/portuguese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/portuguese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..935f9b2c1 --- /dev/null +++ b/html/portuguese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,295 @@ +--- +category: general +date: 2026-09-10 +description: Melhore a clareza do texto ao renderizar HTML com Aspose.HTML habilitando + o hinting. Este guia mostra como habilitar o hinting e por que isso é importante. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: pt +lastmod: 2026-09-10 +og_description: Melhore a clareza do texto no Aspose.HTML aprendendo como habilitar + o hinting. Siga o guia passo a passo para obter texto mais nítido em todas as plataformas. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Melhore a clareza do texto no Aspose.HTML – habilite o hinting para renderização + mais nítida +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Como melhorar a clareza do texto no Aspose.HTML com hinting +url: /pt/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como melhorar a clareza do texto no Aspose.HTML com hinting + +Se você precisa melhorar a clareza do texto ao renderizar HTML com Aspose.HTML, este guia mostra uma solução completa. Ao habilitar o hinting, você obtém glifos mais nítidos, especialmente em plataformas não‑Windows, onde a renderização padrão pode parecer borrada. + +Neste tutorial você aprenderá como habilitar o hinting, por que ele é importante para a clareza do texto e como integrar a configuração em um fluxo de trabalho típico do Aspose.HTML. Nenhuma documentação externa é necessária — tudo o que você precisa está incluído nos passos abaixo. + +## Pré‑requisitos + +Antes de começar, certifique‑se de que você tem: + +* .NET 6.0 ou superior (o código também funciona com .NET Framework 4.7+) +* Uma cópia licenciada do **Aspose.HTML for .NET** (a versão de avaliação gratuita serve para testes) +* Familiaridade básica com C# e Visual Studio ou qualquer IDE de sua preferência + +Esses requisitos são mínimos; a mesma abordagem funciona em aplicativos console, serviços ASP.NET Core ou aplicações desktop. + +## Por que habilitar o hinting melhora a clareza do texto + +Hinting é um processo que ajusta o contorno de cada glifo para alinhá‑lo à grade de pixels do dispositivo de exibição. Sem hinting, especialmente em telas de baixa resolução ou alta DPI, os caracteres podem parecer borrados ou irregulares. Habilitar o hinting instrui o motor de renderização a aplicar esses ajustes automaticamente, resultando em: + +* Espessura de traço consistente entre os caracteres +* Melhor legibilidade no Linux, macOS e versões mais antigas do Windows +* Aparência profissional para PDFs, capturas de tela ou pré‑visualizações na tela + +Aspose.HTML expõe esse comportamento através da propriedade **TextOptions.UseHinting**, que tem o valor padrão `false` por questões de compatibilidade retroativa. + +## Etapa 1: Criar uma instância de `TextOptions` + +O primeiro passo é instanciar a classe **TextOptions**. Esse objeto agrupa todas as configurações de renderização relacionadas ao texto, facilitando a passagem delas para o pipeline de renderização. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Criar o objeto ainda não altera a renderização; ele apenas prepara um contêiner para as opções que você definirá a seguir. + +## Etapa 2: Habilitar o hinting para melhorar a clareza do texto + +Defina a propriedade **UseHinting** como `true`. Essa única linha ativa o algoritmo de hinting para cada trecho de texto renderizado com as opções associadas. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Quando `UseHinting` está `true`, o Aspose.HTML aplica automaticamente ajustes sub‑pixel a cada glifo. O efeito é mais perceptível em fontes que contêm detalhes finos, como tipografias serifadas ou textos em tamanho pequeno. + +### Dica profissional: Combine hinting com anti‑aliasing + +Se você também deseja bordas mais suaves, pode habilitar o anti‑aliasing junto com o hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Ambas as configurações juntas proporcionam a melhor fidelidade visual em uma ampla variedade de dispositivos. + +## Etapa 3: Anexar `TextOptions` ao processo de renderização + +É necessário passar o `TextOptions` configurado para o **HtmlRenderer** (ou qualquer outra classe de renderização que você use). Abaixo está um exemplo mínimo que carrega uma string HTML, aplica as opções e grava a saída em um arquivo PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Explicação das linhas principais** + +* `HTMLDocument` analisa a marcação HTML. +* `ImageDevice` define as dimensões de saída (800 × 600 pixels neste caso). +* `HtmlRenderer` realiza a renderização propriamente dita; atribuir `textOptions` a `renderer.Options.TextOptions` garante que o hinting seja aplicado. +* `device.Save("output.png")` grava a imagem final no disco. + +Executar este código gera `output.png` onde o título e o parágrafo aparecem nítidos, mesmo em um monitor de 96 dpi. + +## Etapa 4: Verificar o resultado + +Abra a imagem gerada em qualquer visualizador. Compare-a com uma imagem renderizada **sem** hinting (defina `UseHinting = false`). Você deverá notar: + +* Bordas mais nítidas nas letras “H”, “e”, “l”, “o” +* Peso de traço mais uniforme ao longo do parágrafo +* Redução de ghosting em linhas diagonais dos caracteres + +Se a diferença for sutil na sua tela, tente ampliar ou imprimir a imagem; a melhoria torna‑se mais evidente em ampliações maiores. + +## Variações comuns e casos de borda + +### Renderizando para PDF em vez de PNG + +Se o seu destino for um PDF, substitua o `ImageDevice` por um `PdfDevice`. O mesmo objeto `TextOptions` funciona sem modificações: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Telas de alta DPI + +Em telas com fatores de escala (por exemplo, 150 % ou 200 %), pode ser necessário aumentar o tamanho do dispositivo proporcionalmente para manter a qualidade visual. O hinting continua sendo aplicado, e o resultado permanece nítido. + +### Ambientes Linux ou macOS + +No Linux, o motor de renderização padrão pode recair para um renderizador de fontes bitmap que ignora o hinting, a menos que você o habilite explicitamente. O sinalizador `UseHinting = true` força o motor a aplicar o hinting TrueType, eliminando a típica aparência “borrada” nessas plataformas. + +### Fontes sem tabelas de hinting + +Algumas fontes OpenType modernas omitem dados de hinting. Nesses casos, o Aspose.HTML recorre ao auto‑hinting, que ainda melhora a clareza em comparação com a ausência total de hinting. + +## Etapa 5: Boas práticas para código de produção + +1. **Crie uma única instância de `TextOptions`** e reutilize‑a em chamadas de renderização. Isso reduz a sobrecarga de alocação de objetos. +2. **Combine hinting com anti‑aliasing** (`UseAntiAliasing = true`) para a saída mais suave. +3. **Teste nas plataformas de destino** (Windows, Linux, macOS) porque as diferenças visuais podem variar. +4. **Registre a configuração de renderização** nos logs de produção; isso ajuda a diagnosticar artefatos visuais inesperados. +5. **Mantenha o Aspose.HTML atualizado**. Versões mais recentes podem introduzir melhorias adicionais na renderização de texto. + +## Exemplo completo funcional + +A seguir, um aplicativo console autocontido que demonstra tudo o que foi discutido. Copie o código para um novo projeto console .NET, adicione o pacote NuGet Aspose.HTML e execute-o. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Saída esperada** + +Ao executar o programa, será criado `hinted_output.png`. O título “Hinting in action” e o texto do parágrafo aparecem nítidos, com larguras de traço uniformes e sem bordas borradas. Se você comentar `UseHinting = true`, a mesma imagem mostrará caracteres ligeiramente desfocados, ilustrando o benefício da configuração. + +## Conclusão + +Agora você sabe como melhorar a clareza do texto no Aspose.HTML habilitando o hinting. O processo envolve criar um objeto `TextOptions`, definir `UseHinting` (e, opcionalmente, `UseAntiAliasing`) e anexar as opções ao renderizador. Essa abordagem funciona para PNG, JPEG, PDF e outros formatos de saída, entregando qualidade visual consistente em Windows, Linux e macOS. + +Em seguida, você pode explorar tópicos relacionados, como **como habilitar hinting para fontes personalizadas**, **otimização de desempenho de renderização** ou **uso de CSS para controlar a aparência do texto** no Aspose.HTML. Experimente diferentes fontes e configurações de DPI para ver como o hinting se adapta a cada cenário. + +Happy coding, and enjoy sharper text in every Aspose.HTML rendering! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos estreitamente relacionados que ampliam as técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens alternativas de implementação em seus próprios projetos. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/portuguese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/portuguese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..6b24d6809 --- /dev/null +++ b/html/portuguese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,301 @@ +--- +category: general +date: 2026-09-10 +description: Como renderizar HTML em C# usando Aspose.Html. Aprenda a processar HTML + e CSS, salvar HTML, converter HTML para stream e carregar documento HTML no .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: pt +lastmod: 2026-09-10 +og_description: Como renderizar HTML em C# com Aspose.Html. Este guia mostra como + processar HTML e CSS, salvar HTML, converter HTML para stream e carregar documentos + HTML de forma eficiente. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Renderizar HTML em C# com Aspose.Html – tutorial passo a passo +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Como renderizar HTML em C# com Aspose.Html – guia completo +url: /pt/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como renderizar HTML em C# com Aspose.Html – guia completo + +Se você precisa **how to render html** dentro de uma aplicação .NET, este tutorial mostra o fluxo de trabalho completo. Você verá como processar HTML CSS, como salvar HTML, converter HTML para stream e carregar um documento HTML em C# usando a biblioteca Aspose.Html. + +Renderizar HTML em um contexto de servidor geralmente requer mais do que apenas carregar um arquivo — você também deve lidar com recursos vinculados, como imagens e folhas de estilo. Este guia conduz você por cada etapa, desde o carregamento do documento até a personalização do tratamento de recursos e, finalmente, a extração da saída renderizada como um memory stream. + +Ao final do artigo você será capaz de: + +* Carregar um documento HTML a partir do disco ou de uma URL (`load html document c#`). +* Fornecer um `ResourceHandler` personalizado para **process html css** em tempo real. +* Salvar o HTML renderizado e **convert html to stream** para processamento adicional. +* Persistir o resultado usando técnicas de **how to save html** que funcionam em qualquer ambiente .NET. + +## Pré-requisitos + +* .NET 6.0 SDK ou posterior instalado. +* Visual Studio 2022 (ou qualquer IDE que suporte .NET 6). +* Uma referência NuGet para **Aspose.Html** (`dotnet add package Aspose.Html`). +* Um arquivo `input.html` colocado em uma pasta conhecida (o exemplo usa `YOUR_DIRECTORY/input.html`). + +Nenhuma biblioteca de terceiros adicional é necessária. + +## Como renderizar HTML – guia passo a passo + +### Etapa 1: Carregar o documento HTML em C# + +A primeira operação é criar uma instância `HTMLDocument` que representa a marcação de origem. Este é o núcleo de **how to render html** com Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Por que isso importa:* Carregar o documento analisa a marcação e constrói um DOM interno, que o renderizador usa posteriormente para aplicar CSS e resolver recursos. + +### Etapa 2: Criar um manipulador de recursos personalizado para **process html css** + +Quando o renderizador encontra recursos externos (imagens, arquivos CSS, fontes), ele solicita um `ResourceHandler` por um stream. Ao fornecer um manipulador personalizado, você obtém controle total sobre como cada recurso é buscado, transformado ou substituído. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Por que isso importa:* O manipulador é onde você implementa a lógica de **process html css** — por exemplo, CSS embutido, substituir imagens por placeholders ou aplicar filtros de segurança. + +### Etapa 3: Configurar `HtmlSaveOptions` para usar o manipulador personalizado + +`HtmlSaveOptions` informa ao renderizador como escrever a saída. Atribua o `ResourceHandler` que você acabou de criar para que o renderizador o chame para cada referência externa. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Definir `EmbedCss` e `EmbedImages` é útil quando você posteriormente **convert html to stream** e precisa de um resultado autocontido. + +### Etapa 4: Salvar o documento e **convert html to stream** + +Agora você pode renderizar o documento e capturar o resultado em um `MemoryStream`. Este é o núcleo de **how to save html** quando você deseja a saída na memória em vez de um arquivo físico. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Por que isso importa:* O `MemoryStream` fornece uma representação binária flexível do HTML renderizado, que você pode armazenar, transmitir ou manipular ainda mais sem tocar no sistema de arquivos. + +## Lidando com casos de borda comuns + +| Situação | Abordagem recomendada | +|-----------|----------------------| +| **Arquivos CSS ou de imagem ausentes** | Em `MyResourceHandler.HandleResource`, verifique `File.Exists` antes de abrir. Retorne um `MemoryStream` vazio ou uma imagem placeholder se o arquivo estiver ausente. | +| **Arquivos HTML grandes (>10 MB)** | Aumente o tamanho padrão do buffer do `MemoryStream` (`new MemoryStream(capacity)`) para evitar realocações frequentes. | +| **URLs relativas com segmentos `..`** | Use `new Uri(baseUri, info.Uri)` para resolver o caminho completo antes de acessar o sistema de arquivos. | +| **Segurança de thread no ASP.NET** | Instancie um novo `HTMLDocument` e `MyResourceHandler` por requisição; evite compartilhar instâncias entre threads. | +| **Problemas de codificação** | Defina `saveOpts.Encoding = Encoding.UTF8` para garantir saída UTF‑8, especialmente quando a origem contém caracteres não‑ASCII. | + +## Dica profissional: reutilizar o mesmo manipulador para vários documentos + +Se você processar muitos arquivos HTML em lote, pode manter uma única instância `MyResourceHandler` e apenas alterar sua tabela de pesquisa interna. Isso reduz a sobrecarga de alocação de objetos e acelera a fase de **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Exemplo completo e executável + +Abaixo está um programa completo que você pode colar em uma aplicação console. Ele demonstra **how to render html**, **process html css**, **how to save html**, **convert html to stream** e **load html document c#** — tudo em um único fluxo. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Saída esperada** (truncada para brevidade): + + + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos intimamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá-lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Como salvar HTML com Aspose.Html – Guia completo C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Como usar Aspose para renderizar HTML em PNG em C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Como usar Aspose para renderizar HTML em PNG – Guia passo a passo](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/portuguese/net/working-with-html-documents/_index.md b/html/portuguese/net/working-with-html-documents/_index.md index 5cacba130..5530510f2 100644 --- a/html/portuguese/net/working-with-html-documents/_index.md +++ b/html/portuguese/net/working-with-html-documents/_index.md @@ -41,6 +41,8 @@ Agora, vamos levar suas habilidades para o próximo nível. Editar documentos HT ### [Como salvar HTML em C# – Manipuladores de recursos personalizados e ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Como salvar HTML com Aspose.Html – Guia completo em C#](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [Como compactar HTML em C# – Guia completo passo a passo](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Como usar HtmlSaveOptions em C# com Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) +### [Como carregar documento HTML a partir de arquivo com Aspose.HTML em C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/portuguese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/portuguese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..13e23458e --- /dev/null +++ b/html/portuguese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Aprenda a carregar um documento HTML a partir de um arquivo usando Aspose.HTML + em C#. Inclui opções de renderização de imagens, opções de renderização de texto + e um manipulador de recursos personalizado. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: pt +lastmod: 2026-09-10 +og_description: Carregue o documento HTML a partir de um arquivo usando Aspose.HTML + em C#. Este guia aborda opções de renderização, um manipulador de recursos personalizado + e o código completo que você pode executar hoje. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Carregar documento HTML a partir de arquivo com Aspose.HTML – guia passo + a passo em C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Como carregar documento HTML a partir de um arquivo com Aspose.HTML em C# +url: /pt/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como carregar documento HTML a partir de arquivo com Aspose.HTML em C# + +Se você precisa **carregar documento HTML a partir de arquivo** e controlar sua renderização, este tutorial mostra uma solução completa, pronta‑para‑executar. Você verá como configurar a renderização de imagens, habilitar o hinting de texto e fornecer um manipulador de recursos personalizado que retorna streams vazios para ativos externos. Ao final do guia, você pode salvar o HTML processado em um memory stream ou em qualquer outro destino que preferir. + +O exemplo usa Aspose.HTML for .NET, uma biblioteca que simplifica o processamento de HTML, CSS e SVG sem um motor de navegador. Nenhuma ferramenta externa é necessária, e o código funciona com .NET 6 ou posterior. Certifique‑se de que o pacote NuGet Aspose.HTML está instalado antes de começar. + +## Pré-requisitos + +- SDK .NET 6 (ou qualquer versão .NET suportada pelo Aspose.HTML) +- Visual Studio 2022 ou outra IDE C# +- Pacote NuGet Aspose.HTML for .NET (`Install-Package Aspose.HTML`) +- Um arquivo HTML chamado `input.html` colocado em uma pasta que você pode referenciar no código + +## Etapa 1: Carregar o documento HTML a partir de um arquivo + +A primeira operação é criar uma instância de `HTMLDocument` que lê o arquivo de origem. Esse objeto representa toda a árvore DOM e fornece métodos para manipulação adicional. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Por que isso importa:** Carregar o arquivo em um `HTMLDocument` lhe dá acesso total à estrutura, estilos e recursos do documento, que você pode renderizar ou transformar posteriormente. + +## Etapa 2: Configurar opções de renderização de imagem (renderização Aspose.HTML) + +Se você planeja rasterizar a página posteriormente, configurar a renderização de imagem melhora a qualidade visual. O antialiasing suaviza as bordas e reduz artefatos serrilhados. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Dica:** `UseAntialiasing` é especialmente útil para gráficos vetoriais e texto que serão rasterizados para PNG ou JPEG. + +## Etapa 3: Habilitar hinting de texto (opções de renderização de texto) + +O hinting de texto influencia como os glifos são alinhados à grade de pixels, o que pode tornar fontes de tamanho pequeno mais nítidas. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Por que isso é importante:** Quando você exporta o HTML para uma imagem, o hinting reduz caracteres borrados e garante tipografia consistente em diferentes plataformas. + +## Etapa 4: Criar um manipulador de recursos personalizado (custom resource handler) + +Recursos externos como fontes, imagens ou scripts podem ser referenciados no HTML. Um `ResourceHandler` permite controlar como esses recursos são obtidos. Neste exemplo, o manipulador retorna um `MemoryStream` vazio para cada solicitação, removendo efetivamente os ativos externos. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Quando usar:** Esse padrão é útil em ambientes com restrições de segurança, testes unitários ou quando você precisa apenas da marcação sem arquivos externos. + +## Etapa 5: Montar opções de salvamento HTML (conversão HTML para imagem) + +Todas as peças — manipulador de recursos, configurações de renderização e estilo de fonte — são anexadas a um objeto `HtmlSaveOptions`. Esse objeto indica ao Aspose.HTML como serializar o documento. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explicação:** `WebFontStyle` pode forçar um estilo específico (por exemplo, negrito) para fontes web que podem estar ausentes. As `ImageRenderingOptions` e `TextOptions` que configuramos anteriormente são inseridas aqui, garantindo que afetem qualquer rasterização que ocorra posteriormente. + +## Etapa 6: Salvar o documento em um memory stream (solução completa) + +Finalmente, escreva o HTML processado em um `MemoryStream`. A partir daí, você pode gravar o stream em um arquivo, enviá‑lo pela rede ou passá‑lo para outra API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Resultado:** `output.html` agora contém a mesma marcação que `input.html`, mas com todos os recursos externos substituídos por streams vazios, e com as preferências de renderização incorporadas nas opções de salvamento. + +## Exemplo completo executável + +Juntando todas as etapas, você obtém um programa autocontido que pode copiar, colar e executar. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Executar este programa gera `output.html` no diretório atual. Abra o arquivo em um navegador para confirmar que a marcação original é carregada, mas quaisquer imagens, fontes ou scripts vinculados estão ausentes (foram substituídos por streams vazios). + +## Perguntas comuns e casos de borda + +| Pergunta | Resposta | +|----------|----------| +| **E se eu precisar dos recursos originais em vez de streams vazios?** | Substitua `MemoryResourceHandler` por um manipulador que lê arquivos do disco ou os baixa via HTTP. | +| **Posso renderizar o HTML diretamente para PNG ou JPEG?** | Sim. Use `ImageRenderer` com as mesmas `ImageRenderingOptions` e `TextOptions` que você configurou, então chame `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **`WebFontStyle.Bold` é obrigatório?** | Não. É mostrado como um exemplo de sobrescrita de estilo de fonte. Omitir ou alterá‑lo para `WebFontStyle.Normal` se você não precisar de um estilo forçado. | +| **Isso funciona no .NET Core?** | Aspose.HTML suporta .NET 5/6/7, então o mesmo código roda em projetos .NET Core. | +| **Como lidar com arquivos HTML grandes de forma eficiente?** | Transmita o arquivo para `HTMLDocument` usando um construtor `FileStream` para evitar carregar todo o arquivo na memória de uma vez. | + +## Conclusão + +Agora você sabe como **carregar documento HTML a partir de arquivo** usando Aspose.HTML, configurar **opções de renderização de imagem** e **opções de renderização de texto**, e aplicar um **manipulador de recursos personalizado** para controlar ativos externos. O exemplo completo demonstra como salvar o HTML processado em um memory stream, que você pode persistir ou transmitir conforme necessário. + +Em seguida, você pode explorar a **conversão de HTML para imagem** trocando o `HtmlSaveOptions` por um `ImageRenderer`, ou experimentar recursos de **renderização Aspose.HTML** como consultas de mídia CSS, suporte a SVG e exportação para PDF. Essas extensões permitem construir pipelines de processamento de documentos ricos inteiramente em C#. + +Boa codificação! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos estreitamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Carregar HTML usando um servidor remoto em .NET com Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Carregar HTML usando URL em .NET com Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Como salvar HTML em C# – Guia completo usando um manipulador de recursos personalizado](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/portuguese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/portuguese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..02d6e0ab1 --- /dev/null +++ b/html/portuguese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,314 @@ +--- +category: general +date: 2026-09-10 +description: Aprenda a usar HtmlSaveOptions em C# para controlar estilos de fontes + da web e salvar arquivos HTML com Aspose.HTML. Exemplo de código completo e dicas + práticas incluídos. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: pt +lastmod: 2026-09-10 +og_description: Como usar HtmlSaveOptions em C# para habilitar estilos de fonte web + em negrito e itálico ao salvar HTML com Aspose.HTML. Siga o exemplo completo e as + dicas de boas práticas. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Como usar HtmlSaveOptions em C# com Aspose.HTML – guia passo a passo +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Como usar HtmlSaveOptions em C# com Aspose.HTML +url: /pt/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como usar HtmlSaveOptions em C# com Aspose.HTML + +Se você precisa controlar como o Aspose.HTML salva um documento HTML, **aprender a usar HtmlSaveOptions é essencial**. Este tutorial mostra passo a passo como usar HtmlSaveOptions para habilitar estilos de fonte web em negrito e itálico ao salvar um documento. + +A biblioteca Aspose HTML fornece uma API rica para carregar, manipular e exportar conteúdo HTML. Ao final deste guia você será capaz de: + +* Carregar um arquivo HTML existente em um `HTMLDocument`. +* Configurar `HtmlSaveOptions` para aplicar flags específicas de `WebFontStyle`. +* Salvar o documento modificado em um novo local ou em um stream. +* Expandir a solução para outros estilos de fonte, CSS personalizado e tratamento de erros. + +## Pré-requisitos + +Antes de começar, certifique‑se de que você tem: + +* .NET 6.0 ou posterior instalado. +* Uma licença válida para **Aspose.HTML for .NET** (a versão de avaliação gratuita funciona para este exemplo). +* Visual Studio 2022 (ou qualquer IDE C#) para compilar e executar o código. + +Nenhum pacote NuGet adicional é necessário além do `Aspose.HTML`. + +## Etapa 1: Configurar o projeto e importar namespaces + +Crie um novo projeto **Console App** e adicione o pacote NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Em seguida, no topo do `Program.cs`, importe os namespaces necessários: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Esses namespaces expõem os tipos `HTMLDocument`, `HtmlSaveOptions` e `WebFontStyle` que você usará ao longo do tutorial. + +## Etapa 2: Carregar o documento HTML de origem + +A primeira operação é ler o HTML que você deseja processar. Substitua `"YOUR_DIRECTORY/input.html"` pelo caminho real do seu arquivo. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analisa a marcação, constrói uma árvore DOM e a deixa pronta para manipulação. Se o arquivo não existir, uma exceção será lançada, portanto, pode ser interessante envolver esta chamada em um bloco try‑catch em código de produção. + +## Etapa 3: Criar e configurar HtmlSaveOptions + +`HtmlSaveOptions` permite ajustar finamente o processo de salvamento. Para habilitar estilos de fonte web em negrito e itálico, combine as flags correspondentes de `WebFontStyle` usando o operador OR bit a bit (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Por que configurar WebFontStyle? + +Ao exportar um documento HTML, o Aspose.HTML pode incorporar fontes web que correspondam ao estilo original. Definindo `WebFontStyle`, você indica ao exportador quais variantes de fonte incluir. Isso reduz o tamanho final do arquivo quando você precisa apenas de estilos específicos e garante que a saída renderizada corresponda à fonte. + +#### Variações comuns + +| Estilo desejado | Flag `WebFontStyle` correspondente | +|-----------------|------------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Negrito | `WebFontStyle.Bold` | +| Itálico | `WebFontStyle.Italic` | +| Negrito + Itálico | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Todas as variantes | `WebFontStyle.All` | + +Você pode combinar qualquer combinação que se ajuste ao seu cenário. + +## Etapa 4: Salvar o documento com as opções configuradas + +Agora escreva o documento em um novo arquivo. O método `Save` aceita o caminho de destino e a instância de `HtmlSaveOptions` que você preparou. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Se precisar escrever em um memory stream (por exemplo, para enviar o arquivo via HTTP), use a sobrecarga que aceita um objeto `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Etapa 5: Verificar o resultado + +Abra `output.html` em um navegador ou inspecione o arquivo com um editor de texto. Você deverá ver que o bloco ` + + +
+ +"; +``` + +HTML определяет простую векторную форму, которая выигрывает от сглаживания при растеризации. + +## Шаг 2: Инициализировать движок рендеринга + +Aspose.HTML использует `HtmlRenderer` совместно с `ImageRenderingOptions`. Здесь вы **как включить сглаживание** для конечного растрового изображения. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Почему `UseAntialiasing = true` имеет значение**: движок рендеринга рисует векторные формы, текст и градиенты с субпиксельной точностью. Включение сглаживания заставляет растеризатор смешивать пиксели краёв с соседними, устраняя зубчатые линии, которые появляются при значении `UseAntialiasing` по умолчанию `false`. Это и есть основа **высококачественного рендеринга изображений**. + +## Шаг 3: Рендерить HTML в изображение + +После настройки параметров вызовите метод `RenderToImage`. Метод возвращает объект `Image`, который можно сохранить на диск или передать напрямую в ответ. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +После выполнения `output.png` содержит плавный, сглаженный круг. Откройте файл в любом просмотрщике изображений, чтобы убедиться в результате. + +![как включить сглаживание в рендеринге Aspose.HTML](/images/antialiasing-example.png){alt="как включить сглаживание в рендеринге Aspose.HTML"} + +## Шаг 4: Проверить высококачественный результат (как отрендерить html‑изображение) + +Вы можете программно подтвердить размеры изображения и DPI, чтобы убедиться, что рендеринг соответствует ожиданиям. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Пример вывода в консоль: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Повышенный DPI в сочетании со сглаживанием даёт чистый результат даже при масштабировании изображения. Это демонстрирует **как отрендерить html‑изображение** с профессиональным качеством. + +## Распространённые варианты и граничные случаи + +| Ситуация | Рекомендованная настройка | +|-----------|-------------------| +| Рендеринг очень больших страниц (например, полноэкранных веб‑приложений) | Увеличьте `ImageRenderingOptions.Width` / `Height` или задайте `Scale` для контроля использования памяти. | +| Необходим прозрачный фон | Установите `imageOptions.BackgroundColor = Color.Transparent;` | +| Требуется JPEG для меньшего размера файла | Измените `ImageFormat` на `ImageFormat.Jpeg` и настройте `Quality` (0‑100). | +| Запуск в Linux‑контейнере без GUI | Aspose.HTML полностью безголовый; дополнительные зависимости не нужны. | +| Нужно отключить сглаживание для пиксель‑идеального UI‑теста | Установите `UseAntialiasing = false;` – края будут чёткими, но могут выглядеть зубчатыми. | + +### Совет профессионала + +При генерации пакета изображений переиспользуйте один экземпляр `HTMLDocument` и меняйте только его свойство `Content` между рендерами. Это уменьшает накладные расходы на повторный разбор одинакового HTML и повышает пропускную способность. + +## Полный исходный код + +Ниже представлена полная программа, которую можно скопировать в новый консольный проект и сразу запустить. + + + +## Что изучать дальше? + +Следующие учебники охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [How to render html to an image with C# – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML to Image Tutorial – Render HTML to PNG in C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/russian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/russian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..5c689057e --- /dev/null +++ b/html/russian/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,295 @@ +--- +category: general +date: 2026-09-10 +description: Улучшите чёткость текста при рендеринге HTML с помощью Aspose.HTML, включив + хинтинг. Это руководство показывает, как включить хинтинг и почему это важно. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: ru +lastmod: 2026-09-10 +og_description: Улучшите чёткость текста в Aspose.HTML, узнав, как включить хинтинг. + Следуйте пошаговому руководству, чтобы получить более ясный текст на любой платформе. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Улучшить чёткость текста в Aspose.HTML – включить хинтинг для более резкого + рендеринга +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Как улучшить четкость текста в Aspose.HTML с помощью хинтинга +url: /ru/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как улучшить четкость текста в Aspose.HTML с помощью хинтинга + +Если вам нужно улучшить четкость текста при рендеринге HTML с помощью Aspose.HTML, это руководство предоставляет полное решение. Включив хинтинг, вы получаете более четкие глифы, особенно на платформах, отличных от Windows, где рендеринг по умолчанию может выглядеть размытым. + +В этом учебнике вы узнаете, как включить хинтинг, почему он важен для четкости текста и как интегрировать эту настройку в типичный рабочий процесс Aspose.HTML. Внешняя документация не требуется — всё, что нужно, включено в шаги ниже. + +## Предварительные требования + +Перед началом убедитесь, что у вас есть: + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7+) +* Лицензированная копия **Aspose.HTML for .NET** (бесплатная пробная версия подходит для тестирования) +* Базовые знания C# и Visual Studio или любой другой предпочитаемой IDE + +Эти требования минимальны; тот же подход работает в консольных приложениях, сервисах ASP.NET Core или настольных приложениях. + +## Почему включение хинтинга улучшает четкость текста + +Хинтинг — это процесс, который корректирует контур каждого глифа, выравнивая его по пиксельной сетке устройства отображения. Без хинтинга, особенно на экранах с низким разрешением или высоким DPI, символы могут выглядеть размытыми или неровными. Включение хинтинга заставляет движок рендеринга автоматически применять эти коррекции, что приводит к: + +* Согласованной толщине штрихов во всех символах +* Лучшей читаемости на Linux, macOS и старых версиях Windows +* Профессиональному виду PDF‑файлов, скриншотов или предварительных просмотров на экране + +Aspose.HTML предоставляет эту возможность через свойство **TextOptions.UseHinting**, которое по умолчанию имеет значение `false` для обратной совместимости. + +## Шаг 1: Создать экземпляр `TextOptions` + +Первый шаг — создать объект класса **TextOptions**. Этот объект группирует все настройки рендеринга, связанные с текстом, что упрощает их передачу в конвейер рендеринга. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Создание объекта пока не меняет процесс рендеринга; он просто подготавливает контейнер для параметров, которые вы зададите позже. + +## Шаг 2: Включить хинтинг для улучшения четкости текста + +Установите свойство **UseHinting** в `true`. Эта единственная строка активирует алгоритм хинтинга для каждого фрагмента текста, отрисованного с использованием указанных параметров. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Когда `UseHinting` равно `true`, Aspose.HTML автоматически применяет субпиксельные коррекции к каждому глифу. Эффект наиболее заметен на шрифтах с тонкими деталями, например, на засечных гарнитурах или небольшом размере текста. + +### Совет: Сочетайте хинтинг с антиалиасингом + +Если вы также хотите более плавные края, можно включить антиалиасинг вместе с хинтингом: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Обе настройки вместе обеспечивают наилучшую визуальную точность на широком спектре устройств. + +## Шаг 3: Присоединить `TextOptions` к процессу рендеринга + +Необходимо передать сконфигурированный `TextOptions` в **HtmlRenderer** (или любой другой используемый класс рендеринга). Ниже приведён минимальный пример, который загружает строку HTML, применяет параметры и сохраняет результат в PNG‑файл. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Объяснение ключевых строк** + +* `HTMLDocument` разбирает разметку HTML. +* `ImageDevice` задаёт размеры вывода (800 × 600 пикселей в данном случае). +* `HtmlRenderer` выполняет фактический рендеринг; присвоение `textOptions` свойству `renderer.Options.TextOptions` гарантирует применение хинтинга. +* `device.Save("output.png")` записывает окончательное изображение на диск. + +Запуск этого кода создаёт `output.png`, где заголовок и абзац выглядят чётко, даже на мониторе с 96 dpi. + +## Шаг 4: Проверить результат + +Откройте сгенерированное изображение в любом просмотрщике. Сравните его с изображением, отрендеренным **без** хинтинга (установите `UseHinting = false`). Вы должны заметить: + +* Более чёткие края букв “H”, “e”, “l”, “o” +* Более равномерную толщину штрихов по всему абзацу +* Сокращённые артефакты на диагональных линиях символов + +Если разница на вашем экране слабо заметна, попробуйте увеличить масштаб или распечатать изображение; улучшение становится очевиднее при большем увеличении. + +## Общие варианты и граничные случаи + +### Рендеринг в PDF вместо PNG + +Если вашей целью является PDF, замените `ImageDevice` на `PdfDevice`. Тот же объект `TextOptions` будет работать без изменений: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Дисплеи с высоким DPI + +На экранах с коэффициентом масштабирования (например, 150 % или 200 %) имеет смысл пропорционально увеличить размер устройства, чтобы сохранить визуальное качество. Хинтинг по‑прежнему применяется, и результат остаётся резким. + +### Окружения Linux или macOS + +В Linux движок рендеринга по умолчанию может переключаться на растровый рендерер шрифтов, который игнорирует хинтинг, если его явно не включить. Флаг `UseHinting = true` заставляет движок применять TrueType‑хинтинг, устраняя типичный «размытый» вид на этих платформах. + +### Шрифты без таблиц хинтинга + +Некоторые современные OpenType‑шрифты не содержат данных хинтинга. В таких случаях Aspose.HTML переходит к авто‑хинтингу, который всё равно улучшает чёткость по сравнению с полным отсутствием хинтинга. + +## Шаг 5: Лучшие практики для production‑кода + +1. **Создайте один экземпляр `TextOptions`** и переиспользуйте его при разных вызовах рендеринга. Это снижает нагрузку на выделение объектов. +2. **Сочетайте хинтинг с антиалиасингом** (`UseAntiAliasing = true`) для самого гладкого вывода. +3. **Тестируйте на целевых платформах** (Windows, Linux, macOS), так как визуальные различия могут варьироваться. +4. **Записывайте конфигурацию рендеринга** в production‑логи; это помогает отлаживать неожиданные визуальные артефакты. +5. **Поддерживайте Aspose.HTML в актуальном состоянии**. Новые версии могут добавлять дополнительные улучшения рендеринга текста. + +## Полный рабочий пример + +Ниже представлено самостоятельное консольное приложение, демонстрирующее всё обсужденное. Скопируйте код в новый .NET‑проект консоли, добавьте пакет Aspose.HTML через NuGet и запустите его. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Ожидаемый результат** + +Запуск программы создаёт `hinted_output.png`. Заголовок «Hinting in action» и текст абзаца выглядят чётко, с равномерной толщиной штрихов и без размытых краёв. Если закомментировать `UseHinting = true`, то то же изображение покажет слегка размытые символы, демонстрируя пользу этой настройки. + +## Заключение + +Теперь вы знаете, как улучшить четкость текста в Aspose.HTML, включив хинтинг. Процесс включает создание объекта `TextOptions`, установку `UseHinting` (и при желании `UseAntiAliasing`) и привязку параметров к рендереру. Этот подход работает для PNG, JPEG, PDF и других форматов вывода, обеспечивая согласованное визуальное качество на Windows, Linux и macOS. + +Далее вы можете изучить связанные темы, такие как **как включить хинтинг** для пользовательских шрифтов, **оптимизацию производительности рендеринга** или **использование CSS для управления внешним видом текста** в Aspose.HTML. Поэкспериментируйте с разными шрифтами и настройками DPI, чтобы увидеть, как хинтинг адаптируется к каждому сценарию. + +Счастливого кодинга и наслаждайтесь более резким текстом в каждом рендеринге Aspose.HTML! + +## Что изучать дальше? + +Следующие учебники охватывают тесно связанные темы, которые развивают техники, продемонстрированные в этом руководстве. Каждый ресурс включает полные рабочие примеры кода с пошаговыми объяснениями, помогая вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [Как отрендерить HTML в PNG с помощью Aspose – Полное руководство](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Как использовать Aspose для рендеринга HTML в PNG – Пошаговое руководство](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Создать HTML‑документ со стилизованным текстом и экспортировать в PDF – Полное руководство](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/russian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/russian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..0eb175ed6 --- /dev/null +++ b/html/russian/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,304 @@ +--- +category: general +date: 2026-09-10 +description: Как рендерить HTML в C# с помощью Aspose.Html. Узнайте, как обрабатывать + HTML и CSS, сохранять HTML, конвертировать HTML в поток и загружать HTML‑документ + в .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: ru +lastmod: 2026-09-10 +og_description: Как рендерить HTML в C# с помощью Aspose.Html. Это руководство покажет, + как обрабатывать HTML и CSS, сохранять HTML, конвертировать HTML в поток и эффективно + загружать HTML‑документ. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Отображение HTML в C# с помощью Aspose.Html – пошаговое руководство +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Как рендерить HTML в C# с помощью Aspose.Html – полное руководство +url: /ru/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как рендерить HTML в C# с Aspose.Html – полный гид + +Если вам нужно **как рендерить html** внутри .NET‑приложения, этот учебник покажет полный рабочий процесс. Вы увидите, как обрабатывать HTML CSS, как сохранять HTML, конвертировать HTML в поток и загружать HTML‑документ в C# с помощью библиотеки Aspose.Html. + +Рендеринг HTML в серверном контексте часто требует больше, чем просто загрузка файла — нужно также обрабатывать связанные ресурсы, такие как изображения и таблицы стилей. Этот гид проведёт вас через каждый шаг, от загрузки документа до настройки обработки ресурсов и, наконец, извлечения отрендеренного вывода в виде MemoryStream. + +К концу статьи вы сможете: + +* Загружать HTML‑документ с диска или по URL (`load html document c#`). +* Предоставлять пользовательский `ResourceHandler` для **process html css** «на лету». +* Сохранять отрендеренный HTML и **convert html to stream** для дальнейшей обработки. +* Сохранять результат с помощью техник **how to save html**, работающих в любой среде .NET. + +## Prerequisites + +Перед началом убедитесь, что у вас есть: + +* .NET 6.0 SDK или более новая версия. +* Visual Studio 2022 (или любой IDE, поддерживающий .NET 6). +* NuGet‑ссылка на **Aspose.Html** (`dotnet add package Aspose.Html`). +* Файл `input.html`, размещённый в известной папке (в примере используется `YOUR_DIRECTORY/input.html`). + +Дополнительные сторонние библиотеки не требуются. + +## How to render HTML – step‑by‑step guide + +### Step 1: Load the HTML document in C# + +Первая операция — создать экземпляр `HTMLDocument`, представляющий исходную разметку. Это ядро **how to render html** с Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Почему это важно:* Загрузка документа парсит разметку и строит внутренний DOM, который рендерер позже использует для применения CSS и разрешения ресурсов. + +### Step 2: Create a custom resource handler to **process html css** + +Когда рендерер встречает внешние ресурсы (изображения, CSS‑файлы, шрифты), он запрашивает у `ResourceHandler` поток. Предоставив собственный обработчик, вы получаете полный контроль над тем, как каждый ресурс будет получен, преобразован или заменён заглушкой. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Почему это важно:* В обработчике реализуется логика **process html css** — например, инлайн‑CSS, замена изображений заглушками или применение фильтров безопасности. + +### Step 3: Configure `HtmlSaveOptions` to use the custom handler + +`HtmlSaveOptions` указывает рендереру, как записывать вывод. Присвойте созданный `ResourceHandler`, чтобы рендерер вызывал его для каждой внешней ссылки. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Установка `EmbedCss` и `EmbedImages` полезна, когда позже вы **convert html to stream** и вам нужен автономный результат. + +### Step 4: Save the document and **convert html to stream** + +Теперь можно отрендерить документ и захватить результат в `MemoryStream`. Это ядро **how to save html**, когда нужен вывод в памяти, а не в виде физического файла. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Почему это важно:* `MemoryStream` предоставляет гибкое бинарное представление отрендеренного HTML, которое можно сохранять, передавать или дальше обрабатывать без обращения к файловой системе. + +## Handling common edge cases + +| Situation | Recommended approach | +|-----------|----------------------| +| **Missing CSS or image files** | В `MyResourceHandler.HandleResource` проверяйте `File.Exists` перед открытием. При отсутствии файла возвращайте пустой `MemoryStream` или изображение‑заглушку. | +| **Large HTML files (>10 MB)** | Увеличьте размер буфера по умолчанию у `MemoryStream` (`new MemoryStream(capacity)`), чтобы избежать частых перераспределений. | +| **Relative URLs with `..` segments** | Используйте `new Uri(baseUri, info.Uri)` для получения полного пути перед доступом к файловой системе. | +| **Thread‑safety in ASP.NET** | Создавайте новый `HTMLDocument` и `MyResourceHandler` для каждого запроса; не делитесь экземплярами между потоками. | +| **Encoding issues** | Установите `saveOpts.Encoding = Encoding.UTF8`, чтобы гарантировать вывод в UTF‑8, особенно если источник содержит не‑ASCII символы. | + +## Pro tip: reuse the same handler for multiple documents + +Если вы обрабатываете множество HTML‑файлов пакетно, можно держать один экземпляр `MyResourceHandler` и лишь менять его внутреннюю таблицу поиска. Это снижает накладные расходы на создание объектов и ускоряет фазу **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Full, runnable example + +Ниже полная программа, которую можно вставить в консольное приложение. Она демонстрирует **how to render html**, **process html css**, **how to save html**, **convert html to stream** и **load html document c#** — все в одном потоке. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Ожидаемый вывод** (усечённый для краткости): + + + +## Что изучать дальше? + +Следующие учебники охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [Как сохранить HTML с Aspose.Html – Полное руководство C#](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Как использовать Aspose для рендеринга HTML в PNG на C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Как использовать Aspose для рендеринга HTML в PNG – Пошаговый гид](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/russian/net/working-with-html-documents/_index.md b/html/russian/net/working-with-html-documents/_index.md index cfec39748..8cc0d6a38 100644 --- a/html/russian/net/working-with-html-documents/_index.md +++ b/html/russian/net/working-with-html-documents/_index.md @@ -39,12 +39,17 @@ HTML-документы являются основой Интернета, и ### [Как сохранить HTML в C# – Полное руководство с использованием пользовательского обработчика ресурсов](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [Как сделать заголовок жирным с помощью CSS и C# – Полное пошаговое руководство](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + ### [Как сохранить HTML в C# – Пользовательские обработчики ресурсов и ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) ### [Как сохранить HTML с Aspose.Html – Полное руководство C#](./how-to-save-html-with-aspose-html-complete-c-guide/) ### [Как заархивировать HTML в C# – Полное пошаговое руководство](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Как использовать HtmlSaveOptions в C# с Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [Как загрузить HTML-документ из файла с помощью Aspose.HTML в C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/russian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/russian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..a2d6ac468 --- /dev/null +++ b/html/russian/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Научитесь загружать HTML‑документ из файла с помощью Aspose.HTML в C#. + Включает параметры рендеринга изображений, параметры рендеринга текста и пользовательский + обработчик ресурсов. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: ru +lastmod: 2026-09-10 +og_description: Загрузите HTML‑документ из файла с помощью Aspose.HTML в C#. В этом + руководстве рассматриваются параметры рендеринга, пользовательский обработчик ресурсов + и полный код, который вы можете запустить уже сегодня. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Загрузка HTML‑документа из файла с помощью Aspose.HTML – пошаговое руководство + на C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Как загрузить HTML‑документ из файла с помощью Aspose.HTML в C# +url: /ru/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как загрузить HTML‑документ из файла с помощью Aspose.HTML в C# + +Если вам нужно **load HTML document from file** и контролировать его рендеринг, этот учебник покажет готовое, готовое к запуску решение. Вы увидите, как настроить рендеринг изображений, включить подсказки текста и предоставить пользовательский обработчик ресурсов, который возвращает пустые потоки для внешних ресурсов. К концу руководства вы сможете сохранить обработанный HTML в поток памяти или в любое другое место по вашему выбору. + +Пример использует Aspose.HTML for .NET — библиотеку, упрощающую работу с HTML, CSS и SVG без движка браузера. Внешние инструменты не требуются, код работает с .NET 6 и новее. Убедитесь, что пакет Aspose.HTML NuGet установлен перед началом. + +## Prerequisites + +- .NET 6 SDK (или любая версия .NET, поддерживаемая Aspose.HTML) +- Visual Studio 2022 или другая IDE для C# +- Aspose.HTML for .NET NuGet package (`Install-Package Aspose.HTML`) +- HTML‑файл с именем `input.html`, размещённый в папке, к которой можно обратиться из кода + +## Step 1: Load the HTML document from a file + +Первой операцией является создание экземпляра `HTMLDocument`, который читает исходный файл. Этот объект представляет всё дерево DOM и предоставляет методы для дальнейшего манипулирования. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** Загрузка файла в `HTMLDocument` даёт вам полный доступ к структуре документа, стилям и ресурсам, которые позже можно рендерить или преобразовывать. + +## Step 2: Set up image rendering options (Aspose.HTML rendering) + +Если вы планируете растрировать страницу позже, настройка рендеринга изображений улучшит визуальное качество. Антиалиасинг сглаживает края и уменьшает зубчатые артефакты. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tip:** `UseAntialiasing` особенно полезен для векторной графики и текста, который будет растрироваться в PNG или JPEG. + +## Step 3: Enable text hinting (text rendering options) + +Подсказки текста влияют на то, как глифы выравниваются по пиксельным сеткам, что может сделать мелкие шрифты более чёткими. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Why it’s important:** При последующем экспорте HTML в изображение подсказки уменьшают размытие символов и обеспечивают согласованную типографику на разных платформах. + +## Step 4: Create a custom resource handler (custom resource handler) + +Внешние ресурсы, такие как шрифты, изображения или скрипты, могут быть указаны в HTML. `ResourceHandler` позволяет контролировать, как эти ресурсы получаются. В этом примере обработчик возвращает пустой `MemoryStream` для каждого запроса, эффективно удаляя внешние активы. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**When to use:** Этот шаблон удобен в средах с ограничениями безопасности, при модульном тестировании или когда вам нужен только разметочный код без внешних файлов. + +## Step 5: Assemble HTML save options (HTML to image conversion) + +Все части — обработчик ресурсов, настройки рендеринга и стиль шрифта — прикрепляются к объекту `HtmlSaveOptions`. Этот объект указывает Aspose.HTML, как сериализовать документ. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explanation:** `WebFontStyle` может принудительно задать определённый стиль (например, bold) для веб‑шрифтов, которые могут отсутствовать. `ImageRenderingOptions` и `TextOptions`, настроенные ранее, внедряются здесь, гарантируя их влияние на любую последующую растеризацию. + +## Step 6: Save the document to a memory stream (complete solution) + +Наконец, запишите обработанный HTML в `MemoryStream`. Отсюда вы можете записать поток в файл, отправить по сети или передать другому API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Result:** `output.html` теперь содержит ту же разметку, что и `input.html`, но со всеми внешними ресурсами, заменёнными пустыми потоками, и с учётом предпочтений рендеринга, встроенных в параметры сохранения. + +## Full runnable example + +Собрав все шаги вместе, вы получаете автономную программу, которую можно скопировать, вставить и запустить. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Запуск этой программы создаёт `output.html` в текущем каталоге. Откройте файл в браузере, чтобы убедиться, что оригинальная разметка загружается, но любые связанные изображения, шрифты или скрипты отсутствуют (они были заменены пустыми потоками). + +## Common questions and edge cases + +| Question | Answer | +|----------|--------| +| **What if I need the original resources instead of empty streams?** | Replace `MemoryResourceHandler` with a handler that reads files from disk or downloads them over HTTP. | +| **Can I render the HTML directly to PNG or JPEG?** | Yes. Use `ImageRenderer` with the same `ImageRenderingOptions` and `TextOptions` you configured, then call `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Is `WebFontStyle.Bold` required?** | No. It’s shown as an example of overriding font style. Omit or change it to `WebFontStyle.Normal` if you don’t need a forced style. | +| **Does this work on .NET Core?** | Aspose.HTML supports .NET 5/6/7, so the same code runs on .NET Core projects. | +| **How do I handle large HTML files efficiently?** | Stream the file into `HTMLDocument` using a `FileStream` constructor to avoid loading the entire file into memory at once. | + +## Conclusion + +Теперь вы знаете, как **load HTML document from file** с помощью Aspose.HTML, настроить **image rendering options** и **text rendering options**, а также применить **custom resource handler** для контроля внешних активов. Полный пример демонстрирует сохранение обработанного HTML в поток памяти, который вы можете сохранить или передать по необходимости. + +Далее вы можете изучить **HTML to image conversion**, заменив `HtmlSaveOptions` на `ImageRenderer`, или поэкспериментировать с возможностями **Aspose.HTML rendering**, такими как CSS‑медиа‑запросы, поддержка SVG и экспорт в PDF. Эти расширения позволяют построить мощные конвейеры обработки документов полностью на C#. + +Happy coding! + +## What Should You Learn Next? + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/russian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/russian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..d96a63008 --- /dev/null +++ b/html/russian/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: Узнайте, как использовать HtmlSaveOptions в C# для управления стилями + веб‑шрифтов и сохранения HTML‑файлов с помощью Aspose.HTML. Включён полный пример + кода и практические советы. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: ru +lastmod: 2026-09-10 +og_description: Как использовать HtmlSaveOptions в C# для включения жирных и курсивных + стилей веб‑шрифтов при сохранении HTML с помощью Aspose.HTML. Следуйте полному примеру + и советам по лучшим практикам. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Как использовать HtmlSaveOptions в C# с Aspose.HTML – пошаговое руководство +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Как использовать HtmlSaveOptions в C# с Aspose.HTML +url: /ru/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как использовать HtmlSaveOptions в C# с Aspose.HTML + +Если вам нужно контролировать, как Aspose.HTML сохраняет HTML‑документ, **изучение использования HtmlSaveOptions необходимо**. В этом руководстве показано шаг за шагом, как использовать HtmlSaveOptions для включения жирных и курсивных стилей веб‑шрифтов при сохранении документа. + +Библиотека Aspose HTML предоставляет богатый API для загрузки, изменения и экспорта HTML‑контента. К концу этого руководства вы сможете: + +* Загрузить существующий HTML‑файл в `HTMLDocument`. +* Настроить `HtmlSaveOptions` для применения конкретных флагов `WebFontStyle`. +* Сохранить изменённый документ в новое место или в поток. +* Расширить решение для других стилей шрифтов, пользовательского CSS и обработки ошибок. + +## Требования + +Прежде чем начать, убедитесь, что у вас есть: + +* .NET 6.0 или новее установлен. +* Действующая лицензия для **Aspose.HTML for .NET** (бесплатная пробная версия подходит для этого примера). +* Visual Studio 2022 (или любая IDE для C#) для компиляции и запуска кода. + +Дополнительные пакеты NuGet не требуются, кроме `Aspose.HTML`. + +## Шаг 1: Настройте проект и импортируйте пространства имён + +Создайте новый проект **Console App** и добавьте пакет Aspose.HTML через NuGet: + +```bash +dotnet add package Aspose.HTML +``` + +Затем, в начале файла `Program.cs`, импортируйте необходимые пространства имён: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Эти пространства имён предоставляют типы `HTMLDocument`, `HtmlSaveOptions` и `WebFontStyle`, которые вы будете использовать в течение всего руководства. + +## Шаг 2: Загрузите исходный HTML‑документ + +Первая операция — прочитать HTML, который вы хотите обработать. Замените `"YOUR_DIRECTORY/input.html"` на фактический путь к вашему файлу. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` разбирает разметку, строит дерево DOM и готовит его к изменению. Если файл не существует, будет выброшено исключение, поэтому в продакшн‑коде рекомендуется обернуть этот вызов в блок try‑catch. + +## Шаг 3: Создайте и настройте HtmlSaveOptions + +`HtmlSaveOptions` позволяет точно настроить процесс сохранения. Чтобы включить жирные и курсивные стили веб‑шрифтов, объедините соответствующие флаги `WebFontStyle` с помощью побитового оператора ИЛИ (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Зачем настраивать WebFontStyle? + +При экспорте HTML‑документа Aspose.HTML может встраивать веб‑шрифты, соответствующие оригинальному оформлению. Устанавливая `WebFontStyle`, вы указываете экспортеру, какие варианты шрифтов включать. Это уменьшает размер конечного файла, если нужны только определённые стили, и гарантирует, что отрендеренный результат будет соответствовать исходному. + +#### Распространённые варианты + +| Желаемый стиль | Соответствующий флаг `WebFontStyle` | +|----------------|-------------------------------------| +| Обычный (regular) | `WebFontStyle.Regular` | +| Жирный | `WebFontStyle.Bold` | +| Курсив | `WebFontStyle.Italic` | +| Жирный + Курсив | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Все варианты | `WebFontStyle.All` | + +Вы можете комбинировать любые варианты, подходящие для вашего сценария. + +## Шаг 4: Сохраните документ с настроенными параметрами + +Теперь запишите документ в новый файл. Метод `Save` принимает путь назначения и подготовленный экземпляр `HtmlSaveOptions`. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Если необходимо записать в поток памяти (например, для отправки файла по HTTP), используйте перегрузку, принимающую объект `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Шаг 5: Проверьте результат + +Откройте `output.html` в браузере или проверьте файл в текстовом редакторе. Вы должны увидеть, что блок ` + + +
+ +"; +``` + +El HTML define una forma vectorial simple que se beneficia del antialiasing al rasterizarse. + +## Paso 2: Inicializar el motor de renderizado + +Aspose.HTML usa un `HtmlRenderer` junto con `ImageRenderingOptions`. Aquí es donde **how to enable antialiasing** para el bitmap final. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Por qué `UseAntialiasing = true` es importante**: El motor de renderizado dibuja formas vectoriales, texto y degradados usando precisión subpíxel. Habilitar el antialiasing indica al rasterizador que mezcle los píxeles de borde con sus vecinos, eliminando líneas dentadas que aparecen cuando `UseAntialiasing` se deja en el valor predeterminado `false`. Este es el núcleo de **high quality image rendering**. + +## Paso 3: Renderizar el HTML a una imagen + +Con las opciones configuradas, llama al método `RenderToImage`. El método devuelve un objeto `Image` que puedes guardar en disco o transmitir directamente a una respuesta. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Después de la ejecución, `output.png` contiene un círculo suave y antialiasado. Abre el archivo en cualquier visor de imágenes para verificar el resultado. + +![cómo habilitar el antialiasing en la renderización de Aspose.HTML](/images/antialiasing-example.png){alt="cómo habilitar el antialiasing en la renderización de Aspose.HTML"} + +## Paso 4: Verificar la salida de alta calidad (how to render html image) + +Puedes confirmar programáticamente las dimensiones y el DPI de la imagen para asegurarte de que la renderización cumpla con tus expectativas. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Salida típica de consola: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +El DPI incrementado combinado con el antialiasing produce un resultado limpio incluso cuando la imagen se escala. Esto demuestra **how to render html image** con calidad profesional. + +## Variaciones comunes y casos límite + +| Situación | Ajuste recomendado | +|-----------|-------------------| +| Renderizar páginas muy grandes (p. ej., aplicaciones web a pantalla completa) | Incrementar `ImageRenderingOptions.Width` / `Height` o establecer `Scale` para controlar el uso de memoria. | +| Necesitar fondo transparente | Establecer `imageOptions.BackgroundColor = Color.Transparent;` | +| Apuntar a JPEG para reducir el tamaño del archivo | Cambiar `ImageFormat` a `ImageFormat.Jpeg` y ajustar `Quality` (0‑100). | +| Ejecutar en un contenedor Linux sin GUI | Aspose.HTML es completamente headless; no se requieren dependencias adicionales. | +| Debes desactivar el antialiasing para una prueba UI pixel‑perfecta | Establecer `UseAntialiasing = false;` – los bordes serán nítidos pero pueden verse dentados. | + +### Consejo profesional + +Al generar un lote de imágenes, reutiliza una única instancia de `HTMLDocument` y solo modifica su propiedad `Content` entre renderizados. Esto reduce la sobrecarga de analizar el mismo HTML repetidamente y mejora el rendimiento. + +## Listado completo del código fuente + +A continuación se muestra el programa completo que puedes copiar en un nuevo proyecto de consola y ejecutar de inmediato. + + + +## ¿Qué deberías aprender a continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y explicaciones paso a paso para ayudarte a dominar funciones adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cómo renderizar html a una imagen con C# – Guía completa](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutorial HTML a Imagen – Renderizar HTML a PNG en C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Cómo usar Aspose para renderizar HTML a PNG – Guía paso a paso](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/spanish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/spanish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..1416c5e63 --- /dev/null +++ b/html/spanish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-09-10 +description: Mejora la claridad del texto al renderizar HTML con Aspose.HTML habilitando + el hinting. Esta guía muestra cómo habilitar el hinting y por qué es importante. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: es +lastmod: 2026-09-10 +og_description: Mejora la claridad del texto en Aspose.HTML aprendiendo a habilitar + el hinting. Sigue la guía paso a paso para obtener texto más nítido en cualquier + plataforma. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Mejora la claridad del texto en Aspose.HTML – habilita el hinting para una + renderización más nítida +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Cómo mejorar la claridad del texto en Aspose.HTML con hinting +url: /es/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo mejorar la claridad del texto en Aspose.HTML con hinting + +Si necesita mejorar la claridad del texto al renderizar HTML con Aspose.HTML, esta guía le muestra una solución completa. Al habilitar el hinting obtiene glifos más nítidos, especialmente en plataformas que no son Windows donde el renderizado predeterminado puede parecer borroso. + +En este tutorial aprenderá cómo habilitar el hinting, por qué es importante para la claridad del texto y cómo integrar la configuración en un flujo de trabajo típico de Aspose.HTML. No se requiere documentación externa; todo lo que necesita está incluido en los pasos a continuación. + +## Requisitos previos + +* .NET 6.0 o posterior (el código también funciona con .NET Framework 4.7+) +* Una copia con licencia de **Aspose.HTML for .NET** (la versión de prueba gratuita sirve para pruebas) +* Familiaridad básica con C# y Visual Studio o cualquier IDE que prefiera + +Estos requisitos son mínimos; el mismo enfoque funciona en aplicaciones de consola, servicios ASP.NET Core o aplicaciones de escritorio. + +## Por qué habilitar el hinting mejora la claridad del texto + +El hinting es un proceso que ajusta el contorno de cada glifo para alinearlo con la cuadrícula de píxeles del dispositivo de visualización. Sin hinting, especialmente en pantallas de baja resolución o alta DPI, los caracteres pueden verse borrosos o desiguales. Habilitar el hinting indica al motor de renderizado que aplique estos ajustes automáticamente, lo que resulta en: + +* Grosor de trazo consistente en todos los caracteres +* Mejor legibilidad en Linux, macOS y versiones antiguas de Windows +* Un aspecto profesional para PDFs, capturas de pantalla o vistas previas en pantalla + +Aspose.HTML expone este comportamiento a través de la propiedad **TextOptions.UseHinting**, que por defecto está en `false` por compatibilidad con versiones anteriores. + +## Paso 1: Crear una instancia de `TextOptions` + +El primer paso es instanciar la clase **TextOptions**. Este objeto agrupa todas las configuraciones de renderizado relacionadas con el texto, facilitando su paso al pipeline de renderizado. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Crear el objeto no altera el renderizado todavía; simplemente prepara un contenedor para las opciones que establecerá más adelante. + +## Paso 2: Habilitar el hinting para mejorar la claridad del texto + +Establezca la propiedad **UseHinting** en `true`. Esta única línea activa el algoritmo de hinting para cada fragmento de texto renderizado con las opciones asociadas. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Cuando `UseHinting` es `true`, Aspose.HTML aplica automáticamente ajustes subpíxel a cada glifo. El efecto es más notable en fuentes que contienen detalles finos, como tipografías con serifas o texto de tamaño pequeño. + +### Consejo profesional: Combinar hinting con anti‑aliasing + +Si también desea bordes más suaves, puede habilitar anti‑aliasing junto con hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Ambas configuraciones juntas proporcionan la mejor fidelidad visual en una amplia gama de dispositivos. + +## Paso 3: Adjuntar `TextOptions` al proceso de renderizado + +Debe pasar el `TextOptions` configurado al **HtmlRenderer** (o cualquier otra clase de renderizado que utilice). A continuación se muestra un ejemplo mínimo que carga una cadena HTML, aplica las opciones y escribe la salida en un archivo PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Explicación de las líneas clave** + +* `HTMLDocument` analiza el marcado HTML. +* `ImageDevice` define las dimensiones de salida (800 × 600 píxeles en este caso). +* `HtmlRenderer` realiza el renderizado real; asignar `textOptions` a `renderer.Options.TextOptions` garantiza que se aplique el hinting. +* `device.Save("output.png")` escribe la imagen final en el disco. + +Ejecutar este código produce `output.png` donde el encabezado y el párrafo aparecen nítidos, incluso en un monitor de 96 dpi. + +## Paso 4: Verificar el resultado + +Abra la imagen generada en cualquier visor. Compárela con una imagen renderizada **sin** hinting (establezca `UseHinting = false`). Debería notar: + +* Bordes más nítidos en las letras “H”, “e”, “l”, “o” +* Peso de trazo más uniforme en todo el párrafo +* Reducción del efecto fantasma en líneas diagonales de los caracteres + +Si la diferencia es sutil en su pantalla, intente acercar o imprimir la imagen; la mejora se vuelve más evidente a mayores aumentos. + +## Variaciones comunes y casos límite + +### Renderizado a PDF en lugar de PNG + +Si su objetivo es un PDF, reemplace `ImageDevice` por `PdfDevice`. El mismo objeto `TextOptions` funciona sin modificaciones: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Pantallas de alta DPI + +En pantallas con factores de escala (p. ej., 150 % o 200 %), puede que desee aumentar el tamaño del dispositivo proporcionalmente para mantener la calidad visual. El hinting sigue aplicándose y el resultado permanece nítido. + +### Entornos Linux o macOS + +En Linux, el motor de renderizado predeterminado puede recurrir a un renderizador de fuentes bitmap que ignora el hinting a menos que lo habilite explícitamente. La bandera `UseHinting = true` obliga al motor a aplicar hinting TrueType, eliminando el típico aspecto “borroso” en esas plataformas. + +### Fuentes sin tablas de hinting + +Algunas fuentes OpenType modernas omiten los datos de hinting. En esos casos, Aspose.HTML recurre al auto‑hinting, lo que aún mejora la claridad en comparación con no usar hinting. + +## Paso 5: Mejores prácticas para código de producción + +1. **Crear una única instancia de `TextOptions`** y reutilizarla en todas las llamadas de renderizado. Esto reduce la sobrecarga de asignación de objetos. +2. **Combinar hinting con anti‑aliasing** (`UseAntiAliasing = true`) para obtener la salida más suave. +3. **Probar en las plataformas objetivo** (Windows, Linux, macOS) porque las diferencias visuales pueden variar. +4. **Registrar la configuración de renderizado** en los logs de producción; ayuda a solucionar cualquier artefacto visual inesperado. +5. **Mantener Aspose.HTML actualizado**. Las versiones más recientes pueden introducir mejoras adicionales en el renderizado de texto. + +## Ejemplo completo en funcionamiento + +A continuación se muestra una aplicación de consola autónoma que demuestra todo lo discutido. Copie el código en un nuevo proyecto de consola .NET, añada el paquete NuGet Aspose.HTML y ejecútelo. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Salida esperada** + +Ejecutar el programa crea `hinted_output.png`. El encabezado “Hinting in action” y el texto del párrafo aparecen nítidos, con anchos de trazo uniformes y sin bordes borrosos. Si comenta `UseHinting = true`, la misma imagen mostrará caracteres ligeramente difuminados, ilustrando el beneficio de la configuración. + +## Conclusión + +Ahora sabe cómo mejorar la claridad del texto en Aspose.HTML habilitando el hinting. El proceso implica crear un objeto `TextOptions`, establecer `UseHinting` (y opcionalmente `UseAntiAliasing`), y adjuntar las opciones al renderizador. Este enfoque funciona para PNG, JPEG, PDF y otros formatos de salida, y brinda una calidad visual consistente en Windows, Linux y macOS. + +A continuación, podría explorar temas relacionados como **cómo habilitar el hinting** para fuentes personalizadas, **optimizar el rendimiento del renderizado**, o **usar CSS para controlar la apariencia del texto** en Aspose.HTML. Experimente con diferentes fuentes y configuraciones de DPI para ver cómo el hinting se adapta a cada escenario. + +¡Feliz codificación y disfrute de texto más nítido en cada renderizado de Aspose.HTML! + +## ¿Qué debería aprender a continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y funcionales con explicaciones paso a paso para ayudarle a dominar características adicionales de la API y explorar enfoques de implementación alternativos en sus propios proyectos. + +- [Cómo renderizar HTML a PNG con Aspose – Guía completa](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [Cómo usar Aspose para renderizar HTML a PNG – Guía paso a paso](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Crear documento HTML con texto con estilo y exportar a PDF – Guía completa](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/spanish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/spanish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..c307fa56c --- /dev/null +++ b/html/spanish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,303 @@ +--- +category: general +date: 2026-09-10 +description: Cómo renderizar HTML en C# usando Aspose.Html. Aprende a procesar HTML + y CSS, guardar HTML, convertir HTML a stream y cargar documentos HTML en .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: es +lastmod: 2026-09-10 +og_description: Cómo renderizar HTML en C# con Aspose.Html. Esta guía le muestra cómo + procesar HTML y CSS, guardar HTML, convertir HTML a un flujo y cargar documentos + HTML de forma eficiente. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Renderizar HTML en C# con Aspose.Html – tutorial paso a paso +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Cómo renderizar HTML en C# con Aspose.Html – guía completa +url: /es/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo renderizar HTML en C# con Aspose.Html – guía completa + +Si necesitas **how to render html** dentro de una aplicación .NET, este tutorial te muestra el flujo de trabajo completo. Verás cómo procesar HTML CSS, cómo guardar HTML, convertir HTML a stream y cargar un documento HTML en C# usando la biblioteca Aspose.Html. + +Renderizar HTML en un contexto del lado del servidor a menudo requiere más que simplemente cargar un archivo: también debes manejar recursos vinculados como imágenes y hojas de estilo. Esta guía te acompaña paso a paso, desde la carga del documento hasta la personalización del manejo de recursos y, finalmente, la extracción del resultado renderizado como un memory stream. + +Al final del artículo podrás: + +* Cargar un documento HTML desde disco o una URL (`load html document c#`). +* Proveer un `ResourceHandler` personalizado para **process html css** sobre la marcha. +* Guardar el HTML renderizado y **convert html to stream** para procesamiento adicional. +* Persistir el resultado usando técnicas de **how to save html** que funcionan en cualquier entorno .NET. + +## Prerrequisitos + +Antes de comenzar, asegúrate de tener: + +* .NET 6.0 SDK o posterior instalado. +* Visual Studio 2022 (o cualquier IDE que soporte .NET 6). +* Una referencia NuGet a **Aspose.Html** (`dotnet add package Aspose.Html`). +* Un archivo `input.html` ubicado en una carpeta conocida (el ejemplo usa `YOUR_DIRECTORY/input.html`). + +No se requieren bibliotecas de terceros adicionales. + +## Cómo renderizar HTML – guía paso a paso + +### Paso 1: Cargar el documento HTML en C# + +La primera operación es crear una instancia de `HTMLDocument` que represente el marcado fuente. Este es el núcleo de **how to render html** con Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Por qué es importante:* Cargar el documento analiza el marcado y construye un DOM interno, que el renderizador usa posteriormente para aplicar CSS y resolver recursos. + +### Paso 2: Crear un manejador de recursos personalizado para **process html css** + +Cuando el renderizador encuentra recursos externos (imágenes, archivos CSS, fuentes), solicita un stream a un `ResourceHandler`. Al proporcionar un manejador personalizado obtienes control total sobre cómo se obtiene, transforma o sustituye cada recurso. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Por qué es importante:* El manejador es donde implementas la lógica de **process html css**, por ejemplo, incrustar CSS, reemplazar imágenes por marcadores de posición o aplicar filtros de seguridad. + +### Paso 3: Configurar `HtmlSaveOptions` para usar el manejador personalizado + +`HtmlSaveOptions` indica al renderizador cómo escribir la salida. Asigna el `ResourceHandler` que acabas de crear para que el renderizador lo invoque por cada referencia externa. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Establecer `EmbedCss` y `EmbedImages` es útil cuando luego **convert html to stream** y necesitas un resultado autocontenido. + +### Paso 4: Guardar el documento y **convert html to stream** + +Ahora puedes renderizar el documento y capturar el resultado en un `MemoryStream`. Este es el núcleo de **how to save html** cuando deseas la salida en memoria en lugar de un archivo físico. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Por qué es importante:* El `MemoryStream` te brinda una representación binaria flexible del HTML renderizado, que puedes almacenar, transmitir o manipular sin tocar el sistema de archivos. + +## Manejo de casos límite comunes + +| Situación | Enfoque recomendado | +|-----------|----------------------| +| **Faltan archivos CSS o de imagen** | En `MyResourceHandler.HandleResource`, verifica `File.Exists` antes de abrir. Devuelve un `MemoryStream` vacío o una imagen de marcador de posición si el archivo no está presente. | +| **Archivos HTML grandes (>10 MB)** | Incrementa el tamaño del búfer predeterminado del `MemoryStream` (`new MemoryStream(capacity)`) para evitar reasignaciones frecuentes. | +| **URLs relativas con segmentos `..`** | Usa `new Uri(baseUri, info.Uri)` para resolver la ruta completa antes de acceder al sistema de archivos. | +| **Seguridad de subprocesos en ASP.NET** | Instancia un nuevo `HTMLDocument` y `MyResourceHandler` por solicitud; evita compartir instancias entre hilos. | +| **Problemas de codificación** | Configura `saveOpts.Encoding = Encoding.UTF8` para garantizar salida UTF‑8, especialmente cuando la fuente contiene caracteres no ASCII. | + +## Consejo profesional: reutilizar el mismo manejador para varios documentos + +Si procesas muchos archivos HTML en lote, puedes mantener una única instancia de `MyResourceHandler` y simplemente cambiar su tabla de búsqueda interna. Esto reduce la sobrecarga de asignación de objetos y acelera la fase de **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Ejemplo completo y ejecutable + +A continuación tienes un programa completo que puedes pegar en una aplicación de consola. Demuestra **how to render html**, **process html css**, **how to save html**, **convert html to stream** y **load html document c#**, todo en un solo flujo. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Salida esperada** (truncada por brevedad): + + + +## ¿Qué deberías aprender a continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y explicaciones paso a paso para ayudarte a dominar funcionalidades adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/spanish/net/working-with-html-documents/_index.md b/html/spanish/net/working-with-html-documents/_index.md index 563408acf..9d667c245 100644 --- a/html/spanish/net/working-with-html-documents/_index.md +++ b/html/spanish/net/working-with-html-documents/_index.md @@ -51,6 +51,14 @@ Aprenda a guardar documentos HTML en C# usando controladores de recursos persona Aprenda a comprimir archivos HTML en C# usando Aspose.HTML con esta guía paso a paso. +### [Cómo usar HtmlSaveOptions en C# con Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +Aprenda a configurar opciones de guardado al exportar HTML con Aspose.HTML en C#. + +### [Cómo cargar un documento HTML desde archivo con Aspose.HTML en C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + +Aprenda a cargar documentos HTML desde un archivo usando Aspose.HTML en C#. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/spanish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/spanish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..9b8328cd1 --- /dev/null +++ b/html/spanish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Aprende a cargar un documento HTML desde un archivo usando Aspose.HTML + en C#. Incluye opciones de renderizado de imágenes, opciones de renderizado de texto + y un controlador de recursos personalizado. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: es +lastmod: 2026-09-10 +og_description: Cargar documento HTML desde un archivo usando Aspose.HTML en C#. Esta + guía cubre opciones de renderizado, un controlador de recursos personalizado y el + código completo que puedes ejecutar hoy. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Cargar documento HTML desde archivo con Aspose.HTML – guía paso a paso en + C# +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Cómo cargar un documento HTML desde un archivo con Aspose.HTML en C# +url: /es/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo cargar un documento HTML desde un archivo con Aspose.HTML en C# + +Si necesitas **cargar un documento HTML desde un archivo** y controlar su renderizado, este tutorial te muestra una solución completa y lista para ejecutar. Verás cómo configurar el renderizado de imágenes, habilitar el hinting de texto y proporcionar un controlador de recursos personalizado que devuelve flujos vacíos para los activos externos. Al final de la guía podrás guardar el HTML procesado en un flujo de memoria o cualquier otro destino que prefieras. + +El ejemplo utiliza Aspose.HTML para .NET, una biblioteca que simplifica el procesamiento de HTML, CSS y SVG sin necesidad de un motor de navegador. No se requieren herramientas externas, y el código funciona con .NET 6 o posterior. Asegúrate de tener instalado el paquete NuGet de Aspose.HTML antes de comenzar. + +## Requisitos previos + +- .NET 6 SDK (o cualquier versión de .NET compatible con Aspose.HTML) +- Visual Studio 2022 u otro IDE de C# +- Paquete NuGet Aspose.HTML para .NET (`Install-Package Aspose.HTML`) +- Un archivo HTML llamado `input.html` ubicado en una carpeta a la que puedas referenciar desde el código + +## Paso 1: Cargar el documento HTML desde un archivo + +La primera operación es crear una instancia de `HTMLDocument` que lea el archivo fuente. Este objeto representa todo el árbol DOM y proporciona métodos para su manipulación posterior. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Por qué es importante:** Cargar el archivo en un `HTMLDocument` te brinda acceso total a la estructura, estilos y recursos del documento, que luego podrás renderizar o transformar. + +## Paso 2: Configurar opciones de renderizado de imágenes (renderizado Aspose.HTML) + +Si planeas rasterizar la página más adelante, configurar el renderizado de imágenes mejora la calidad visual. El antialiasing suaviza los bordes y reduce los artefactos dentados. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Consejo:** `UseAntialiasing` es especialmente útil para gráficos vectoriales y texto que se rasterizará a PNG o JPEG. + +## Paso 3: Habilitar el hinting de texto (opciones de renderizado de texto) + +El hinting de texto influye en cómo los glifos se alinean a las cuadrículas de píxeles, lo que puede hacer que las fuentes de tamaño pequeño se vean más nítidas. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Por qué es importante:** Cuando exportes el HTML a una imagen, el hinting reduce los caracteres borrosos y asegura una tipografía consistente en todas las plataformas. + +## Paso 4: Crear un controlador de recursos personalizado (controlador de recursos personalizado) + +Los recursos externos como fuentes, imágenes o scripts pueden estar referenciados en el HTML. Un `ResourceHandler` te permite controlar cómo se recuperan esos recursos. En este ejemplo el controlador devuelve un `MemoryStream` vacío para cada solicitud, eliminando efectivamente los activos externos. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Cuándo usarlo:** Este patrón es útil en entornos con restricciones de seguridad, pruebas unitarias o cuando solo necesitas el marcado sin archivos externos. + +## Paso 5: Configurar opciones de guardado HTML (conversión de HTML a imagen) + +Todas las piezas—controlador de recursos, configuraciones de renderizado y estilo de fuente—se adjuntan a un objeto `HtmlSaveOptions`. Este objeto indica a Aspose.HTML cómo serializar el documento. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Explicación:** `WebFontStyle` puede forzar un estilo particular (p. ej., negrita) para fuentes web que podrían faltar. Las `ImageRenderingOptions` y `TextOptions` que configuramos antes se inyectan aquí, garantizando que afecten cualquier rasterización que ocurra después. + +## Paso 6: Guardar el documento en un flujo de memoria (solución completa) + +Finalmente, escribe el HTML procesado en un `MemoryStream`. Desde allí puedes escribir el flujo a un archivo, enviarlo por red o pasarlo a otra API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Resultado:** `output.html` ahora contiene el mismo marcado que `input.html` pero con todos los recursos externos reemplazados por flujos vacíos, y con las preferencias de renderizado incorporadas en las opciones de guardado. + +## Ejemplo completo ejecutable + +Unir todos los pasos te brinda un programa autocontenido que puedes copiar, pegar y ejecutar. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Ejecutar este programa genera `output.html` en el directorio actual. Abre el archivo en un navegador para confirmar que el marcado original se carga, pero cualquier imagen, fuente o script enlazado está ausente (fueron reemplazados por flujos vacíos). + +## Preguntas frecuentes y casos límite + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Qué pasa si necesito los recursos originales en lugar de flujos vacíos?** | Reemplaza `MemoryResourceHandler` por un controlador que lea los archivos del disco o los descargue vía HTTP. | +| **¿Puedo renderizar el HTML directamente a PNG o JPEG?** | Sí. Usa `ImageRenderer` con las mismas `ImageRenderingOptions` y `TextOptions` que configuraste, luego llama a `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **¿Es necesario `WebFontStyle.Bold`?** | No. Se muestra como ejemplo de sobrescritura de estilo de fuente. Omítelo o cámbialo a `WebFontStyle.Normal` si no necesitas un estilo forzado. | +| **¿Esto funciona en .NET Core?** | Aspose.HTML soporta .NET 5/6/7, por lo que el mismo código se ejecuta en proyectos .NET Core. | +| **¿Cómo manejo archivos HTML grandes de forma eficiente?** | Transmite el archivo a `HTMLDocument` usando un constructor `FileStream` para evitar cargar todo el archivo en memoria de una sola vez. | + +## Conclusión + +Ahora sabes cómo **cargar un documento HTML desde un archivo** usando Aspose.HTML, configurar **opciones de renderizado de imágenes** y **opciones de renderizado de texto**, y aplicar un **controlador de recursos personalizado** para controlar los activos externos. El ejemplo completo muestra cómo guardar el HTML procesado en un flujo de memoria, que puedes persistir o transmitir según sea necesario. + +A continuación, podrías explorar la **conversión de HTML a imagen** sustituyendo `HtmlSaveOptions` por un `ImageRenderer`, o experimentar con funciones de **renderizado de Aspose.HTML** como consultas de medios CSS, soporte SVG y exportación a PDF. Estas extensiones te permiten crear pipelines de procesamiento de documentos ricos totalmente en C#. + +¡Feliz codificación! + +## ¿Qué deberías aprender a continuación? + +Los tutoriales siguientes cubren temas estrechamente relacionados que amplían las técnicas demostradas en esta guía. Cada recurso incluye ejemplos de código completos y funcionales con explicaciones paso a paso para ayudarte a dominar características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cargar HTML usando un servidor remoto en .NET con Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Cargar HTML usando URL en .NET con Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Cómo guardar HTML en C# – Guía completa usando un controlador de recursos personalizado](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/spanish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/spanish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..fc6318ab1 --- /dev/null +++ b/html/spanish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-09-10 +description: Aprende a usar HtmlSaveOptions en C# para controlar los estilos de fuentes + web y guardar archivos HTML con Aspose.HTML. Incluye un ejemplo de código completo + y consejos prácticos. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: es +lastmod: 2026-09-10 +og_description: Cómo usar HtmlSaveOptions en C# para habilitar los estilos de fuente + web en negrita y cursiva al guardar HTML con Aspose.HTML. Sigue el ejemplo completo + y los consejos de mejores prácticas. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Cómo usar HtmlSaveOptions en C# con Aspose.HTML – guía paso a paso +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Cómo usar HtmlSaveOptions en C# con Aspose.HTML +url: /es/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo usar HtmlSaveOptions en C# con Aspose.HTML + +Si necesitas controlar cómo Aspose.HTML guarda un documento HTML, **aprender a usar HtmlSaveOptions es esencial**. Este tutorial te muestra paso a paso cómo usar HtmlSaveOptions para habilitar estilos de fuentes web en negrita y cursiva al guardar un documento. + +La biblioteca Aspose HTML proporciona una API completa para cargar, manipular y exportar contenido HTML. Al final de esta guía podrás: + +* Cargar un archivo HTML existente en un `HTMLDocument`. +* Configurar `HtmlSaveOptions` para aplicar banderas específicas de `WebFontStyle`. +* Guardar el documento modificado en una nueva ubicación o en un flujo. +* Ampliar la solución para otros estilos de fuente, CSS personalizado y manejo de errores. + +## Prerequisites + +Antes de comenzar, asegúrate de tener: + +* .NET 6.0 o posterior instalado. +* Una licencia válida para **Aspose.HTML for .NET** (la versión de prueba gratuita funciona para este ejemplo). +* Visual Studio 2022 (o cualquier IDE de C#) para compilar y ejecutar el código. + +No se requieren paquetes NuGet adicionales más allá de `Aspose.HTML`. + +## Step 1: Set up the project and import namespaces + +Crea un nuevo proyecto **Console App** y agrega el paquete NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Luego, en la parte superior de `Program.cs`, importa los espacios de nombres requeridos: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Estos espacios de nombres exponen los tipos `HTMLDocument`, `HtmlSaveOptions` y `WebFontStyle` que usarás a lo largo del tutorial. + +## Step 2: Load the source HTML document + +La primera operación es leer el HTML que deseas procesar. Reemplaza `"YOUR_DIRECTORY/input.html"` con la ruta real de tu archivo. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analiza el marcado, construye un árbol DOM y lo deja listo para su manipulación. Si el archivo no existe, se lanza una excepción, por lo que podrías envolver esta llamada en un bloque try‑catch para código de producción. + +## Step 3: Create and configure HtmlSaveOptions + +`HtmlSaveOptions` te permite afinar el proceso de guardado. Para habilitar los estilos de fuentes web en negrita y cursiva, combina las banderas `WebFontStyle` correspondientes usando el operador OR a nivel de bits (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Why configure WebFontStyle? + +Cuando exportas un documento HTML, Aspose.HTML puede incrustar fuentes web que coincidan con el estilo original. Al establecer `WebFontStyle`, le indicas al exportador qué variantes de fuente incluir. Esto reduce el tamaño final del archivo cuando solo necesitas estilos específicos y garantiza que la salida renderizada coincida con la fuente. + +#### Common variations + +| Desired style | Corresponding `WebFontStyle` flag | +|---------------|-----------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +Puedes combinar cualquier combinación que se ajuste a tu escenario. + +## Step 4: Save the document with the configured options + +Ahora escribe el documento en un nuevo archivo. El método `Save` acepta la ruta de destino y la instancia de `HtmlSaveOptions` que preparaste. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Si necesitas escribir a un flujo de memoria (p. ej., para enviar el archivo por HTTP), usa la sobrecarga que acepta un objeto `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Step 5: Verify the result + +Abre `output.html` en un navegador o inspecciona el archivo con un editor de texto. Deberías ver que el bloque ` + + +
+ +"; +``` + +HTML‑koden definierar en enkel vektorform som drar nytta av kantutjämning när den rasteriseras. + +## Steg 2: Initiera renderingsmotorn + +Aspose.HTML använder en `HtmlRenderer` tillsammans med `ImageRenderingOptions`. Det är här du **how to enable antialiasing** för den slutliga bitmapen. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Varför `UseAntialiasing = true` är viktigt**: Renderingsmotorn ritar vektorformer, text och gradienter med sub‑pixel‑precision. Att aktivera kantutjämning får rasteriseraren att blanda kantpixlar med sina grannar, vilket eliminerar hackiga linjer som uppstår när `UseAntialiasing` är kvar på standardvärdet `false`. Detta är kärnan i **high quality image rendering**. + +## Steg 3: Rendera HTML till en bild + +När alternativen är konfigurerade, anropa metoden `RenderToImage`. Metoden returnerar ett `Image`‑objekt som du kan spara till disk eller strömma direkt till ett svar. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Efter körning innehåller `output.png` en jämn, kantutjämnad cirkel. Öppna filen i någon bildvisare för att verifiera resultatet. + +![hur man aktiverar kantutjämning i Aspose.HTML rendering](/images/antialiasing-example.png){alt="hur man aktiverar kantutjämning i Aspose.HTML rendering"} + +## Steg 4: Verifiera högkvalitativt resultat (how to render html image) + +Du kan programatiskt bekräfta bildens dimensioner och DPI för att säkerställa att renderingen uppfyller dina förväntningar. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Typisk konsolutskrift: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Den ökade DPI:n kombinerad med kantutjämning ger ett rent resultat även när bilden skalas upp. Detta demonstrerar **how to render html image** med professionell kvalitet. + +## Vanliga variationer och kantfall + +| Situation | Rekommenderad justering | +|-----------|-------------------| +| Rendera mycket stora sidor (t.ex. helskärms‑webbappar) | Öka `ImageRenderingOptions.Width` / `Height` eller sätt `Scale` för att kontrollera minnesanvändning. | +| Behöver transparent bakgrund | Ange `imageOptions.BackgroundColor = Color.Transparent;` | +| Målsätt JPEG för mindre filstorlek | Ändra `ImageFormat` till `ImageFormat.Jpeg` och justera `Quality` (0‑100). | +| Kör i en Linux‑container utan GUI | Aspose.HTML är helt huvudlös; inga ytterligare beroenden krävs. | +| Du måste inaktivera kantutjämning för ett pixel‑perfekt UI‑test | Sätt `UseAntialiasing = false;` – kanterna blir skarpa men kan se hackiga ut. | + +### Proffstips + +När du genererar en batch av bilder, återanvänd en enda `HTMLDocument`‑instans och ändra bara dess `Content`‑egenskap mellan renderingar. Detta minskar overheaden av att parsra samma HTML upprepade gånger och förbättrar genomströmningen. + +## Fullständig källkod + +Nedan är det kompletta programmet som du kan kopiera in i ett nytt konsol‑app‑projekt och köra direkt. + + + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närliggande ämnen som bygger på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Hur man renderar html till en bild med C# – Komplett guide](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML till Bild‑handledning – Rendera HTML till PNG i C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Hur man använder Aspose för att rendera HTML till PNG – Steg‑för‑steg‑guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/swedish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/swedish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..ab7dd177a --- /dev/null +++ b/html/swedish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,296 @@ +--- +category: general +date: 2026-09-10 +description: Förbättra textens tydlighet vid rendering av HTML med Aspose.HTML genom + att aktivera hintning. Denna guide visar hur du aktiverar hintning och varför det + är viktigt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: sv +lastmod: 2026-09-10 +og_description: Förbättra textens tydlighet i Aspose.HTML genom att lära dig hur du + aktiverar hinting. Följ den steg‑för‑steg‑guiden för att få tydligare text på alla + plattformar. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Förbättra textklarhet i Aspose.HTML – aktivera hintning för skarpare rendering +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Hur man förbättrar textens tydlighet i Aspose.HTML med hintning +url: /sv/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur du förbättrar textklarhet i Aspose.HTML med hinting + +Om du behöver förbättra textklarheten när du renderar HTML med Aspose.HTML visar den här guiden en komplett lösning. Genom att aktivera hinting får du skarpare glyfer, särskilt på icke‑Windows‑plattformar där standardrenderingen kan se suddig ut. + +I den här tutorialen lär du dig hur du aktiverar hinting, varför det är viktigt för textklarhet och hur du integrerar inställningen i ett typiskt Aspose.HTML‑arbetsflöde. Ingen extern dokumentation krävs – allt du behöver finns i stegen nedan. + +## Förutsättningar + +Innan du börjar, se till att du har: + +* .NET 6.0 eller senare (koden fungerar även med .NET Framework 4.7+) +* En licensierad kopia av **Aspose.HTML for .NET** (gratis provversion fungerar för testning) +* Grundläggande kunskap om C# och Visual Studio eller någon annan IDE du föredrar + +Dessa krav är minimala; samma tillvägagångssätt fungerar i konsolappar, ASP.NET Core‑tjänster eller skrivbordsapplikationer. + +## Varför aktivering av hinting förbättrar textklarhet + +Hinting är en process som justerar konturen för varje glyf så att den anpassas till bildskärmens pixelgrid. Utan hinting, särskilt på lågupplösta eller hög‑DPI‑skärmar, kan tecken se suddiga eller ojämna ut. När hinting aktiveras instruerar du renderingsmotorn att automatiskt göra dessa justeringar, vilket resulterar i: + +* Enhetlig linjetjocklek över alla tecken +* Bättre läsbarhet på Linux, macOS och äldre Windows‑versioner +* Ett professionellt utseende för PDF‑filer, skärmdumpar eller förhandsvisningar på skärmen + +Aspose.HTML exponerar detta beteende via egenskapen **TextOptions.UseHinting**, som som standard är `false` för bakåtkompatibilitet. + +## Steg 1: Skapa en `TextOptions`‑instans + +Det första steget är att instansiera klassen **TextOptions**. Detta objekt samlar alla text‑relaterade renderingsinställningar, vilket gör det enkelt att skicka dem till renderings‑pipeline:n. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Att skapa objektet ändrar ännu inte renderingen; det förbereder bara en behållare för de alternativ du kommer att ange senare. + +## Steg 2: Aktivera hinting för att förbättra textklarhet + +Sätt egenskapen **UseHinting** till `true`. Denna enda rad aktiverar hinting‑algoritmen för varje textstycke som renderas med de associerade alternativen. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +När `UseHinting` är `true` applicerar Aspose.HTML automatiskt sub‑pixel‑justeringar på varje glyf. Effekten märks mest på typsnitt som innehåller fina detaljer, såsom serif‑typsnitt eller liten text. + +### Proffstips: Kombinera hinting med anti‑aliasing + +Om du också vill ha mjukare kanter kan du aktivera anti‑aliasing samtidigt som du använder hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Båda inställningarna tillsammans ger bästa visuella återgivning över ett brett spektrum av enheter. + +## Steg 3: Fäst `TextOptions` på renderingsprocessen + +Du måste skicka de konfigurerade `TextOptions` till **HtmlRenderer** (eller någon annan renderingsklass du använder). Nedan är ett minimalt exempel som laddar en HTML‑sträng, applicerar alternativen och sparar resultatet till en PNG‑fil. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Förklaring av nyckellinjerna** + +* `HTMLDocument` parser HTML‑markupen. +* `ImageDevice` definierar utmatningsdimensionerna (800 × 600 pixlar i detta fall). +* `HtmlRenderer` utför själva renderingen; genom att tilldela `textOptions` till `renderer.Options.TextOptions` säkerställer du att hinting tillämpas. +* `device.Save("output.png")` skriver den färdiga bilden till disk. + +När du kör koden får du `output.png` där rubriken och stycket visas skarpt, även på en 96 dpi‑monitor. + +## Steg 4: Verifiera resultatet + +Öppna den genererade bilden i någon bildvisare. Jämför den med en bild renderad **utan** hinting (sätt `UseHinting = false`). Du bör märka: + +* Skarpare kanter på bokstäverna “H”, “e”, “l”, “o” +* Mer enhetlig linjetjocklek i hela stycket +* Minskad ghosting på diagonala linjer i tecknen + +Om skillnaden är subtil på din skärm, zooma in eller skriv ut bilden; förbättringen blir tydligare vid högre förstoring. + +## Vanliga variationer och kantfall + +### Rendera till PDF istället för PNG + +Om ditt mål är en PDF, ersätt `ImageDevice` med en `PdfDevice`. Samma `TextOptions`‑objekt fungerar utan ändring: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Hög‑DPI‑skärmar + +På skärmar med skalningsfaktorer (t.ex. 150 % eller 200 %) kan du vilja öka enhetens storlek proportionellt för att behålla visuell kvalitet. Hinting appliceras fortfarande, och resultatet förblir skarpt. + +### Linux‑ eller macOS‑miljöer + +På Linux kan standardrenderingsmotorn falla tillbaka till en bitmap‑font‑renderare som ignorerar hinting om du inte aktiverar den explicit. Flaggan `UseHinting = true` tvingar motorn att använda TrueType‑hinting, vilket eliminerar det typiska “suddiga” utseendet på dessa plattformar. + +### Typsnitt utan hinting‑tabeller + +Vissa moderna OpenType‑typsnitt saknar hinting‑data. I sådana fall faller Aspose.HTML tillbaka på auto‑hinting, vilket fortfarande förbättrar klarheten jämfört med ingen hinting alls. + +## Steg 5: Bästa praxis för produktionskod + +1. **Skapa en enda `TextOptions`‑instans** och återanvänd den över renderingsanrop. Detta minskar minnesallokering. +2. **Kombinera hinting med anti‑aliasing** (`UseAntiAliasing = true`) för den mjukaste utmatningen. +3. **Testa på målplattformarna** (Windows, Linux, macOS) eftersom visuella skillnader kan variera. +4. **Logga renderingskonfigurationen** i produktionsloggar; det underlättar felsökning av oväntade visuella artefakter. +5. **Håll Aspose.HTML uppdaterat**. Nyare versioner kan introducera ytterligare förbättringar av textrendering. + +## Fullt fungerande exempel + +Nedan finns en fristående konsolapplikation som demonstrerar allt som diskuterats. Kopiera koden till ett nytt .NET‑konsolprojekt, lägg till Aspose.HTML‑NuGet‑paketet och kör det. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Förväntat resultat** + +När programmet körs skapas `hinted_output.png`. Rubriken “Hinting in action” och paragraftexten visas skarpa, med enhetliga linjebredder och utan suddiga kanter. Om du kommenterar bort `UseHinting = true` kommer samma bild att visa något suddiga tecken, vilket illustrerar fördelarna med inställningen. + +## Slutsats + +Du vet nu hur du förbättrar textklarhet i Aspose.HTML genom att aktivera hinting. Processen innebär att skapa ett `TextOptions`‑objekt, sätta `UseHinting` (och eventuellt `UseAntiAliasing`) samt fästa alternativen på renderaren. Detta tillvägagångssätt fungerar för PNG, JPEG, PDF och andra utdataformat, och levererar konsekvent visuell kvalitet på Windows, Linux och macOS. + +Nästa steg kan vara att utforska relaterade ämnen såsom **hur du aktiverar hinting för anpassade typsnitt**, **optimera renderingsprestanda** eller **använda CSS för att styra textutseende** i Aspose.HTML. Experimentera med olika typsnitt och DPI‑inställningar för att se hur hinting anpassar sig till varje scenario. + +Lycka till med kodningen, och njut av skarpare text i varje Aspose.HTML‑rendering! + +## Vad bör du lära dig härnäst? + +De följande tutorialerna täcker närliggande ämnen som bygger vidare på teknikerna som demonstrerats i den här guiden. Varje resurs innehåller kompletta kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/swedish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/swedish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..9fe2e2cfa --- /dev/null +++ b/html/swedish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,303 @@ +--- +category: general +date: 2026-09-10 +description: Hur man renderar HTML i C# med Aspose.Html. Lär dig att bearbeta HTML‑CSS, + spara HTML, konvertera HTML till ström och ladda HTML‑dokument i .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: sv +lastmod: 2026-09-10 +og_description: Hur man renderar HTML i C# med Aspose.Html. Den här guiden visar hur + du bearbetar HTML och CSS, sparar HTML, konverterar HTML till en ström och laddar + HTML-dokument effektivt. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Rendera HTML i C# med Aspose.Html – steg‑för‑steg‑handledning +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Hur man renderar HTML i C# med Aspose.Html – fullständig guide +url: /sv/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Så renderar du HTML i C# med Aspose.Html – fullständig guide + +Om du behöver **how to render html** i en .NET‑applikation visar den här handledningen hela arbetsflödet. Du kommer att se hur du bearbetar HTML CSS, hur du sparar HTML, konverterar HTML till stream och laddar ett HTML‑dokument i C# med Aspose.Html‑biblioteket. + +Att rendera HTML i ett server‑side‑sammanhang kräver ofta mer än att bara ladda en fil—du måste också hantera länkade resurser som bilder och stilmallar. Den här guiden går dig igenom varje steg, från att ladda dokumentet till att anpassa resurshanteringen och slutligen extrahera den renderade utdata som ett minnes‑stream. + +Vid slutet av artikeln kommer du att kunna: + +* Ladda ett HTML‑dokument från disk eller en URL (`load html document c#`). +* Tillhandahålla en anpassad `ResourceHandler` för att **process html css** i realtid. +* Spara den renderade HTML‑en och **convert html to stream** för vidare bearbetning. +* Behålla resultatet med **how to save html**‑tekniker som fungerar i alla .NET‑miljöer. + +## Förutsättningar + +Innan du börjar, se till att du har: + +* .NET 6.0 SDK eller senare installerat. +* Visual Studio 2022 (eller någon IDE som stödjer .NET 6). +* En NuGet‑referens till **Aspose.Html** (`dotnet add package Aspose.Html`). +* En `input.html`‑fil placerad i en känd mapp (exemplet använder `YOUR_DIRECTORY/input.html`). + +Inga ytterligare tredjepartsbibliotek krävs. + +## Så renderar du HTML – steg‑för‑steg‑guide + +### Steg 1: Ladda HTML‑dokumentet i C# + +Den första operationen är att skapa en `HTMLDocument`‑instans som representerar käll‑markupen. Detta är kärnan i **how to render html** med Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Varför detta är viktigt:* Att ladda dokumentet parsar markupen och bygger ett internt DOM, vilket renderaren senare använder för att tillämpa CSS och lösa resurser. + +### Steg 2: Skapa en anpassad resurshanterare för att **process html css** + +När renderaren stöter på externa resurser (bilder, CSS‑filer, typsnitt) ber den en `ResourceHandler` om ett stream. Genom att tillhandahålla en anpassad hanterare får du full kontroll över hur varje resurs hämtas, transformeras eller stubbas. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Varför detta är viktigt:* Hanteraren är där du implementerar **process html css**‑logik—t.ex. inline‑CSS, ersätta bilder med platshållare eller tillämpa säkerhetsfilter. + +### Steg 3: Konfigurera `HtmlSaveOptions` för att använda den anpassade hanteraren + +`HtmlSaveOptions` talar om för renderaren hur utdata ska skrivas. Tilldela den `ResourceHandler` du just skapade så att renderaren anropar den för varje extern referens. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Att sätta `EmbedCss` och `EmbedImages` är användbart när du senare **convert html to stream** och behöver ett självständigt resultat. + +### Steg 4: Spara dokumentet och **convert html to stream** + +Nu kan du rendera dokumentet och fånga resultatet i ett `MemoryStream`. Detta är kärnan i **how to save html** när du vill ha utdata i minnet snarare än i en fysisk fil. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Varför detta är viktigt:* `MemoryStream` ger dig en flexibel, binär representation av den renderade HTML‑en, som du kan lagra, överföra eller vidare manipulera utan att röra filsystemet. + +## Hantera vanliga edge‑cases + +| Situation | Rekommenderad metod | +|-----------|----------------------| +| **Saknade CSS‑ eller bildfiler** | I `MyResourceHandler.HandleResource`, kontrollera `File.Exists` innan du öppnar. Returnera ett tomt `MemoryStream` eller en platshållarbild om filen saknas. | +| **Stora HTML‑filer (>10 MB)** | Öka standardbuffertstorleken för `MemoryStream` (`new MemoryStream(capacity)`) för att undvika frekventa omallokeringar. | +| **Relativa URL:er med `..`‑segment** | Använd `new Uri(baseUri, info.Uri)` för att lösa den fullständiga sökvägen innan du åtkommer till filsystemet. | +| **Trådsäkerhet i ASP.NET** | Instansiera ett nytt `HTMLDocument` och `MyResourceHandler` per begäran; undvik att dela instanser mellan trådar. | +| **Kodningsproblem** | Sätt `saveOpts.Encoding = Encoding.UTF8` för att garantera UTF‑8‑utdata, särskilt när källan innehåller icke‑ASCII‑tecken. | + +## Pro‑tips: återanvänd samma hanterare för flera dokument + +Om du bearbetar många HTML‑filer i ett batch‑jobb kan du behålla en enda `MyResourceHandler`‑instans och bara ändra dess interna uppslagstabell. Detta minskar objektallokeringskostnaden och snabbar upp **process html css**‑fasen. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Fullt, körbart exempel + +Nedan är ett komplett program som du kan klistra in i en konsolapplikation. Det demonstrerar **how to render html**, **process html css**, **how to save html**, **convert html to stream**, och **load html document c#**—allt i ett flöde. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Förväntad output** (avkortad för korthet): + + + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närbesläktade ämnen som bygger på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementeringsmetoder i dina egna projekt. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/swedish/net/working-with-html-documents/_index.md b/html/swedish/net/working-with-html-documents/_index.md index 1367c3949..babeadbec 100644 --- a/html/swedish/net/working-with-html-documents/_index.md +++ b/html/swedish/net/working-with-html-documents/_index.md @@ -50,6 +50,14 @@ Lär dig spara HTML med Aspose.Html i C# med en komplett steg‑för‑steg‑gu ### [Hur du zippar HTML i C# – Komplett steg‑för‑steg‑guide](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [Hur man använder HtmlSaveOptions i C# med Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +Lär dig hur du använder HtmlSaveOptions för att spara HTML med anpassade inställningar i C#. + +### [Hur man laddar HTML-dokument från fil med Aspose.HTML i C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + +Lär dig hur du laddar ett HTML‑dokument från en fil med Aspose.HTML i C#. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/swedish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/swedish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..f06688d88 --- /dev/null +++ b/html/swedish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Lär dig att läsa in HTML‑dokument från fil med Aspose.HTML i C#. Inkluderar + alternativ för bildrendering, alternativ för textrendering och en anpassad resurs‑hanterare. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: sv +lastmod: 2026-09-10 +og_description: Läs in HTML-dokument från fil med Aspose.HTML i C#. Denna guide täcker + renderingsalternativ, en anpassad resurshanterare och komplett kod som du kan köra + idag. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Läs in HTML-dokument från fil med Aspose.HTML – steg‑för‑steg C#‑guide +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Hur man laddar HTML-dokument från fil med Aspose.HTML i C# +url: /sv/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man laddar HTML‑dokument från fil med Aspose.HTML i C# + +Om du behöver **ladda HTML‑dokument från fil** och kontrollera dess rendering, visar den här handledningen en komplett, färdig‑att‑köra lösning. Du får se hur du konfigurerar bildrendering, aktiverar text‑hinting och tillhandahåller en anpassad resurshanterare som returnerar tomma strömmar för externa resurser. I slutet av guiden kan du spara den bearbetade HTML‑koden i ett minnes‑stream eller någon annan destination du föredrar. + +Exemplet använder Aspose.HTML för .NET, ett bibliotek som förenklar bearbetning av HTML, CSS och SVG utan en webbläsarmotor. Inga externa verktyg krävs, och koden fungerar med .NET 6 eller senare. Se till att du har Aspose.HTML‑NuGet‑paketet installerat innan du börjar. + +## Förutsättningar + +- .NET 6 SDK (eller någon .NET‑version som stöds av Aspose.HTML) +- Visual Studio 2022 eller någon annan C#‑IDE +- Aspose.HTML för .NET NuGet‑paket (`Install-Package Aspose.HTML`) +- En HTML‑fil med namnet `input.html` placerad i en mapp som du kan referera till från koden + +## Steg 1: Ladda HTML‑dokumentet från en fil + +Den första operationen är att skapa en `HTMLDocument`‑instans som läser källfilen. Detta objekt representerar hela DOM‑trädet och tillhandahåller metoder för vidare manipulation. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Varför detta är viktigt:** Att ladda filen i ett `HTMLDocument` ger dig full åtkomst till dokumentets struktur, stilar och resurser, som du senare kan rendera eller transformera. + +## Steg 2: Ställ in bildrenderingsalternativ (Aspose.HTML rendering) + +Om du planerar att rasterisera sidan senare förbättrar konfiguration av bildrendering den visuella kvaliteten. Antialiasing jämnar ut kanter och minskar hackiga artefakter. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Tips:** `UseAntialiasing` är särskilt användbart för vektorgrafik och text som kommer att rasteriseras till PNG eller JPEG. + +## Steg 3: Aktivera text‑hinting (text rendering options) + +Text‑hinting påverkar hur glyfer placeras på pixelrutnätet, vilket kan göra små teckensnitt skarpare. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Varför det är viktigt:** När du senare exporterar HTML till en bild minskar hinting suddiga tecken och säkerställer enhetlig typografi över plattformar. + +## Steg 4: Skapa en anpassad resurshanterare (custom resource handler) + +Externa resurser såsom teckensnitt, bilder eller skript kan refereras i HTML‑koden. En `ResourceHandler` låter dig kontrollera hur dessa resurser hämtas. I detta exempel returnerar hanteraren ett tomt `MemoryStream` för varje begäran, vilket effektivt tar bort externa tillgångar. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**När du ska använda:** Detta mönster är praktiskt i säkerhetskänsliga miljöer, vid enhetstestning eller när du bara behöver markupen utan externa filer. + +## Steg 5: Sammanställ HTML‑spara‑alternativ (HTML to image conversion) + +Alla delar – resurshanterare, renderingsinställningar och teckensnittsstil – fästs på ett `HtmlSaveOptions`‑objekt. Detta objekt talar om för Aspose.HTML hur dokumentet ska serialiseras. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Förklaring:** `WebFontStyle` kan tvinga en viss stil (t.ex. fet) för webbteckensnitt som eventuellt saknas. `ImageRenderingOptions` och `TextOptions` som vi konfigurerade tidigare injiceras här, så att de påverkar eventuell rasterisering som sker senare. + +## Steg 6: Spara dokumentet i ett minnes‑stream (complete solution) + +Till sist skriver du den bearbetade HTML‑koden till ett `MemoryStream`. Därefter kan du skriva strömmen till en fil, skicka den över ett nätverk eller vidarebefordra den till ett annat API. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Resultat:** `output.html` innehåller nu samma markup som `input.html` men med alla externa resurser ersatta av tomma strömmar, samt med renderingspreferenserna inbakade i spara‑alternativen. + +## Fullt körbart exempel + +Att sätta ihop alla steg ger dig ett självständigt program som du kan kopiera, klistra in och köra. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +När du kör programmet skapas `output.html` i den aktuella katalogen. Öppna filen i en webbläsare för att bekräfta att den ursprungliga markupen laddas, men att eventuella länkade bilder, teckensnitt eller skript saknas (de har ersatts av tomma strömmar). + +## Vanliga frågor och edge‑cases + +| Fråga | Svar | +|----------|--------| +| **Vad gör jag om jag behöver de ursprungliga resurserna istället för tomma strömmar?** | Byt ut `MemoryResourceHandler` mot en hanterare som läser filer från disk eller laddar ner dem via HTTP. | +| **Kan jag rendera HTML direkt till PNG eller JPEG?** | Ja. Använd `ImageRenderer` med samma `ImageRenderingOptions` och `TextOptions` som du konfigurerade, och anropa sedan `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Är `WebFontStyle.Bold` obligatoriskt?** | Nej. Det visas som ett exempel på hur man åsidosätter teckensnittsstil. Utelämna eller ändra till `WebFontStyle.Normal` om du inte behöver en tvingad stil. | +| **Fungerar detta på .NET Core?** | Aspose.HTML stödjer .NET 5/6/7, så samma kod körs i .NET Core‑projekt. | +| **Hur hanterar jag stora HTML‑filer på ett effektivt sätt?** | Strömma in filen i `HTMLDocument` med en `FileStream`‑konstruktor för att undvika att hela filen laddas in i minnet på en gång. | + +## Slutsats + +Du vet nu hur du **laddar HTML‑dokument från fil** med Aspose.HTML, konfigurerar **bildrenderingsalternativ** och **textrenderingsalternativ**, samt använder en **anpassad resurshanterare** för att kontrollera externa tillgångar. Det kompletta exemplet demonstrerar hur du sparar den bearbetade HTML‑koden i ett minnes‑stream, som du kan lagra eller överföra efter behov. + +Nästa steg kan vara att utforska **HTML‑till‑bild‑konvertering** genom att byta ut `HtmlSaveOptions` mot en `ImageRenderer`, eller experimentera med **Aspose.HTML‑renderingsfunktioner** såsom CSS‑media‑queries, SVG‑stöd och PDF‑export. Dessa tillägg låter dig bygga kraftfulla dokument‑bearbetningspipelines helt i C#. + +Lycka till med kodandet! + + +## Vad bör du lära dig härnäst? + + +De följande handledningarna behandlar närliggande ämnen som bygger vidare på teknikerna i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/swedish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/swedish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..cdeab9005 --- /dev/null +++ b/html/swedish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: Lär dig hur du använder HtmlSaveOptions i C# för att kontrollera webbteckensnittsstilar + och spara HTML‑filer med Aspose.HTML. Fullständigt kodexempel och praktiska tips + ingår. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: sv +lastmod: 2026-09-10 +og_description: Hur man använder HtmlSaveOptions i C# för att aktivera fet och kursiv + webbteckensnittsstilar när man sparar HTML med Aspose.HTML. Följ det kompletta exemplet + och bästa praxis‑tipsen. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Hur man använder HtmlSaveOptions i C# med Aspose.HTML – steg‑för‑steg‑guide +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Hur man använder HtmlSaveOptions i C# med Aspose.HTML +url: /sv/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Så använder du HtmlSaveOptions i C# med Aspose.HTML + +Om du behöver kontrollera hur Aspose.HTML sparar ett HTML‑dokument, **är det viktigt att lära sig hur man använder HtmlSaveOptions**. Denna handledning visar dig steg‑för‑steg hur du använder HtmlSaveOptions för att aktivera fetstil och kursiv web‑font‑stil när du sparar ett dokument. + +Aspose HTML‑biblioteket erbjuder ett omfattande API för att ladda, manipulera och exportera HTML‑innehåll. I slutet av den här guiden kommer du att kunna: + +* Ladda en befintlig HTML‑fil i ett `HTMLDocument`. +* Konfigurera `HtmlSaveOptions` för att tillämpa specifika `WebFontStyle`‑flaggor. +* Spara det modifierade dokumentet till en ny plats eller till en ström. +* Utöka lösningen för andra teckensnittsstilar, anpassad CSS och felhantering. + +## Förutsättningar + +Innan du börjar, se till att du har: + +* .NET 6.0 eller senare installerat. +* En giltig licens för **Aspose.HTML for .NET** (gratis provversion fungerar för detta exempel). +* Visual Studio 2022 (eller någon C#‑IDE) för att kompilera och köra koden. + +Inga ytterligare NuGet‑paket krävs utöver `Aspose.HTML`. + +## Steg 1: Ställ in projektet och importera namnrymder + +Skapa ett nytt **Console App**‑projekt och lägg till Aspose.HTML‑NuGet‑paketet: + +```bash +dotnet add package Aspose.HTML +``` + +Sedan, högst upp i `Program.cs`, importera de nödvändiga namnrymderna: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Dessa namnrymder exponerar typerna `HTMLDocument`, `HtmlSaveOptions` och `WebFontStyle` som du kommer att använda genom hela handledningen. + +## Steg 2: Ladda käll‑HTML‑dokumentet + +Den första operationen är att läsa den HTML du vill bearbeta. Ersätt `"YOUR_DIRECTORY/input.html"` med den faktiska sökvägen till din fil. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` analyserar markupen, bygger ett DOM‑träd och gör det redo för manipulation. Om filen inte finns kastas ett undantag, så du kanske vill omsluta detta anrop i ett try‑catch‑block för produktionskod. + +## Steg 3: Skapa och konfigurera HtmlSaveOptions + +`HtmlSaveOptions` låter dig finjustera sparprocessen. För att aktivera fetstil och kursiv web‑font‑stil, kombinera motsvarande `WebFontStyle`‑flaggor med bitvis OR‑operator (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Varför konfigurera WebFontStyle? + +När du exporterar ett HTML‑dokument kan Aspose.HTML bädda in web‑fonter som matchar den ursprungliga stilen. Genom att sätta `WebFontStyle` talar du om för exportören vilka teckensnittsvarianter som ska inkluderas. Detta minskar den slutliga filstorleken när du bara behöver specifika stilar och garanterar att den renderade utskriften matchar källan. + +#### Vanliga varianter + +| Önskad stil | Motsvarande `WebFontStyle`‑flagga | +|-------------|-----------------------------------| +| Normal (vanlig) | `WebFontStyle.Regular` | +| Fet | `WebFontStyle.Bold` | +| Kursiv | `WebFontStyle.Italic` | +| Fet + Kursiv | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Alla varianter | `WebFontStyle.All` | + +Du kan kombinera valfri kombination som passar ditt scenario. + +## Steg 4: Spara dokumentet med de konfigurerade alternativen + +Skriv nu dokumentet till en ny fil. `Save`‑metoden accepterar mål‑sökvägen och den `HtmlSaveOptions`‑instans du förberett. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Om du behöver skriva till en minnesström (t.ex. för att skicka filen via HTTP), använd den överlagrade metoden som accepterar ett `Stream`‑objekt: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Steg 5: Verifiera resultatet + +Öppna `output.html` i en webbläsare eller inspektera filen med en textredigerare. Du bör se att ` + + +
+ +"; +``` + +HTML นี้กำหนดรูปทรงเวกเตอร์ง่าย ๆ ที่จะได้รับประโยชน์จาก antialiasing เมื่อแปลงเป็นภาพ + +## ขั้นตอนที่ 2: เริ่มต้นเครื่องยนต์การเรนเดอร์ + +Aspose.HTML ใช้ `HtmlRenderer` ร่วมกับ `ImageRenderingOptions` นี่คือจุดที่คุณ **how to enable antialiasing** สำหรับบิตแมพสุดท้าย + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**ทำไม `UseAntialiasing = true` ถึงสำคัญ**: เครื่องยนต์การเรนเดอร์วาดรูปเวกเตอร์, ข้อความ, และไล่สีโดยใช้ความละเอียดระดับซับพิกเซล การเปิดใช้งาน antialiasing จะสั่งให้ rasterizer ผสมพิกเซลขอบกับพิกเซลใกล้เคียง เพื่อลบเส้นหยักที่ปรากฏเมื่อ `UseAntialiasing` อยู่ที่ค่าเริ่มต้น `false` นี่คือหัวใจของ **high quality image rendering** + +## ขั้นตอนที่ 3: เรนเดอร์ HTML เป็นภาพ + +เมื่อกำหนดตัวเลือกแล้ว ให้เรียกเมธอด `RenderToImage` เมธอดนี้จะคืนค่าอ็อบเจกต์ `Image` ที่คุณสามารถบันทึกลงดิสก์หรือสตรีมโดยตรงไปยังการตอบกลับ + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +หลังจากทำงานเสร็จ `output.png` จะมีวงกลมที่เรียบและมี antialiasing เปิดอยู่ เปิดไฟล์ในโปรแกรมดูรูปใดก็ได้เพื่อยืนยันผลลัพธ์ + +![วิธีเปิดใช้งาน antialiasing ในการเรนเดอร์ Aspose.HTML](/images/antialiasing-example.png){alt="วิธีเปิดใช้งาน antialiasing ในการเรนเดอร์ Aspose.HTML"} + +## ขั้นตอนที่ 4: ตรวจสอบผลลัพธ์คุณภาพสูง (how to render html image) + +คุณสามารถตรวจสอบขนาดภาพและ DPI ด้วยโปรแกรมเพื่อให้แน่ใจว่าการเรนเดอร์ตรงตามความคาดหวังของคุณ + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +ผลลัพธ์คอนโซลทั่วไป: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +การเพิ่ม DPI ควบคู่กับ antialiasing จะให้ผลลัพธ์ที่สะอาดแม้ภาพจะถูกขยายขนาด นี่แสดงให้เห็น **how to render html image** ด้วยคุณภาพระดับมืออาชีพ + +## ความแตกต่างทั่วไปและกรณีขอบ + +| สถานการณ์ | การปรับแต่งที่แนะนำ | +|-----------|-------------------| +| การเรนเดอร์หน้าเว็บขนาดใหญ่มาก (เช่น แอปเว็บเต็มหน้าจอ) | เพิ่ม `ImageRenderingOptions.Width` / `Height` หรือกำหนด `Scale` เพื่อควบคุมการใช้หน่วยความจำ | +| ต้องการพื้นหลังโปร่งใส | Set `imageOptions.BackgroundColor = Color.Transparent;` | +| ต้องการ JPEG เพื่อลดขนาดไฟล์ | เปลี่ยน `ImageFormat` เป็น `ImageFormat.Jpeg` และปรับ `Quality` (0‑100) | +| รันในคอนเทนเนอร์ Linux โดยไม่มี GUI | Aspose.HTML ทำงานแบบ headless อย่างเต็มที่; ไม่ต้องการการพึ่งพาเพิ่มเติม | +| คุณต้องปิดการใช้งาน antialiasing สำหรับการทดสอบ UI ที่ต้องการพิกเซลที่สมบูรณ์แบบ | ตั้งค่า `UseAntialiasing = false;` – ขอบจะคมชัดแต่อาจดูเป็นขั้น | + +### เคล็ดลับพิเศษ + +เมื่อสร้างชุดภาพหลาย ๆ รูป ให้ใช้ `HTMLDocument` ตัวเดียวและเปลี่ยนเฉพาะคุณสมบัติ `Content` ระหว่างการเรนเดอร์ วิธีนี้จะลดภาระการพาร์ส HTML ซ้ำ ๆ และเพิ่มอัตราการประมวลผล + +## รายการซอร์สโค้ดเต็ม + +ด้านล่างเป็นโปรแกรมสมบูรณ์ที่คุณสามารถคัดลอกไปยังโปรเจกต์ console‑app ใหม่และรันได้ทันที + + + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานแบบอื่นในโครงการของคุณเอง + +- [วิธีเรนเดอร์ html เป็นภาพด้วย C# – คู่มือเต็ม](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [บทเรียน HTML เป็นภาพ – เรนเดอร์ HTML เป็น PNG ด้วย C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [วิธีใช้ Aspose เพื่อเรนเดอร์ HTML เป็น PNG – คู่มือขั้นตอนต่อขั้นตอน](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/thai/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/thai/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..a4ff181d8 --- /dev/null +++ b/html/thai/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,296 @@ +--- +category: general +date: 2026-09-10 +description: ปรับปรุงความคมชัดของข้อความเมื่อเรนเดอร์ HTML ด้วย Aspose.HTML โดยเปิดใช้งาน + Hinting คู่มือนี้จะแสดงวิธีเปิดใช้งาน Hinting และเหตุผลที่สำคัญ. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: th +lastmod: 2026-09-10 +og_description: ปรับปรุงความชัดเจนของข้อความใน Aspose.HTML ด้วยการเรียนรู้วิธีเปิดใช้งาน + hinting. ปฏิบัติตามคู่มือขั้นตอนต่อขั้นตอนเพื่อให้ได้ข้อความที่ชัดเจนยิ่งขึ้นบนทุกแพลตฟอร์ม. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: ปรับปรุงความคมชัดของข้อความใน Aspose.HTML – เปิดใช้งานการให้คำแนะนำเพื่อการเรนเดอร์ที่คมชัดยิ่งขึ้น +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: วิธีปรับปรุงความคมชัดของข้อความใน Aspose.HTML ด้วยการใช้ hinting +url: /th/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีปรับปรุงความคมชัดของข้อความใน Aspose.HTML ด้วยการใช้ hinting + +หากคุณต้องการปรับปรุงความคมชัดของข้อความขณะเรนเดอร์ HTML ด้วย Aspose.HTML คู่มือนี้จะแสดงวิธีแก้ไขแบบครบถ้วน โดยการเปิดใช้งาน hinting คุณจะได้ glyph ที่คมชัดยิ่งขึ้น โดยเฉพาะบนแพลตฟอร์มที่ไม่ใช่ Windows ที่การเรนเดอร์เริ่มต้นอาจดูเบลอ + +ในบทเรียนนี้คุณจะได้เรียนรู้วิธีเปิดใช้งาน hinting ทำไมมันถึงสำคัญต่อความคมชัดของข้อความ และวิธีรวมการตั้งค่านี้เข้าไปในเวิร์กโฟลว์ทั่วไปของ Aspose.HTML ไม่ต้องอ้างอิงเอกสารภายนอก—ทุกอย่างที่คุณต้องการอยู่ในขั้นตอนต่อไปนี้ + +## Prerequisites + +ก่อนเริ่มทำงาน โปรดตรวจสอบว่าคุณมี: + +* .NET 6.0 หรือใหม่กว่า (โค้ดยังทำงานกับ .NET Framework 4.7+ ด้วย) +* สำเนาไลเซนส์ของ **Aspose.HTML for .NET** (คุณสามารถใช้รุ่นทดลองฟรีเพื่อทดสอบ) +* ความคุ้นเคยพื้นฐานกับ C# และ Visual Studio หรือ IDE ใด ๆ ที่คุณชอบ + +ข้อกำหนดเหล่านี้เป็นขั้นต่ำ; วิธีเดียวกันนี้ทำงานได้ในแอปคอนโซล, บริการ ASP.NET Core, หรือแอปเดสก์ท็อป + +## Why enabling hinting improves text clarity + +Hinting คือกระบวนการปรับโครงร่างของแต่ละ glyph ให้สอดคล้องกับกริดพิกเซลของอุปกรณ์แสดงผล หากไม่มี hinting โดยเฉพาะบนหน้าจอที่ความละเอียดต่ำหรือ DPI สูง ตัวอักษรอาจดูเบลอหรือไม่สม่ำเสมอ การเปิดใช้งาน hinting จะสั่งให้เอนจินเรนเดอร์ทำการปรับเหล่านี้โดยอัตโนมัติ ส่งผลให้ได้: + +* ความหนาของเส้นที่สม่ำเสมอระหว่างอักขระ +* การอ่านที่ดีขึ้นบน Linux, macOS, และ Windows เวอร์ชันเก่า +* รูปลักษณ์ระดับมืออาชีพสำหรับ PDF, ภาพหน้าจอ, หรือการพรีวิวบนหน้าจอ + +Aspose.HTML เปิดเผยพฤติกรรมนี้ผ่านคุณสมบัติ **TextOptions.UseHinting** ซึ่งค่าเริ่มต้นคือ `false` เพื่อความเข้ากันได้ย้อนหลัง + +## Step 1: Create a `TextOptions` instance + +ขั้นตอนแรกคือการสร้างอินสแตนซ์ของคลาส **TextOptions** วัตถุนี้จะรวบรวมการตั้งค่าเรนเดอร์ที่เกี่ยวกับข้อความทั้งหมด ทำให้ส่งต่อไปยัง pipeline ได้ง่าย + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +การสร้างอ็อบเจกต์นี้ไม่ได้เปลี่ยนแปลงการเรนเดอร์ในขณะนี้; เพียงแค่เตรียมคอนเทนเนอร์สำหรับตัวเลือกที่คุณจะตั้งค่าในขั้นต่อไป + +## Step 2: Enable hinting to improve text clarity + +ตั้งค่าคุณสมบัติ **UseHinting** เป็น `true` บรรทัดเดียวนี้จะเปิดใช้งานอัลกอริทึม hinting สำหรับข้อความทุกส่วนที่เรนเดอร์ด้วยตัวเลือกที่กำหนด + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +เมื่อ `UseHinting` เป็น `true` Aspose.HTML จะปรับการจัดตำแหน่ง sub‑pixel ของแต่ละ glyph โดยอัตโนมัติ ผลลัพธ์จะเห็นได้ชัดที่สุดกับฟอนต์ที่มีรายละเอียดละเอียด เช่น ฟอนต์ serif หรือข้อความขนาดเล็ก + +### Pro tip: Combine hinting with anti‑aliasing + +หากคุณต้องการขอบที่เรียบเนียนยิ่งขึ้น สามารถเปิดใช้งาน anti‑aliasing ควบคู่กับ hinting ได้: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +การตั้งค่าทั้งสองร่วมกันให้คุณภาพภาพที่ดีที่สุดบนอุปกรณ์หลากหลายประเภท + +## Step 3: Attach `TextOptions` to the rendering process + +คุณต้องส่ง `TextOptions` ที่กำหนดค่าแล้วไปยัง **HtmlRenderer** (หรือคลาสเรนเดอร์อื่นที่คุณใช้) ตัวอย่างต่อไปนี้เป็นโค้ดขั้นต่ำที่โหลดสตริง HTML, ใช้ตัวเลือก, และบันทึกผลลัพธ์เป็นไฟล์ PNG + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Explanation of key lines** + +* `HTMLDocument` ทำการพาร์ส HTML markup +* `ImageDevice` กำหนดขนาดเอาต์พุต (800 × 600 พิกเซลในตัวอย่างนี้) +* `HtmlRenderer` ทำการเรนเดอร์จริง; การกำหนด `textOptions` ให้กับ `renderer.Options.TextOptions` ทำให้ hinting ถูกนำไปใช้ +* `device.Save("output.png")` บันทึกภาพสุดท้ายลงดิสก์ + +เมื่อรันโค้ดนี้จะได้ไฟล์ `output.png` ที่หัวเรื่องและย่อหน้าปรากฏคมชัด แม้บนจอ 96 dpi + +## Step 4: Verify the result + +เปิดภาพที่สร้างขึ้นด้วยโปรแกรมดูภาพใดก็ได้ แล้วเปรียบเทียบกับภาพที่เรนเดอร์ **โดยไม่** เปิด hinting (ตั้ง `UseHinting = false`) คุณควรสังเกตเห็น: + +* ขอบตัวอักษร “H”, “e”, “l”, “o” คมชัดขึ้น +* ความหนาของเส้นที่สม่ำเสมอทั่วทั้งย่อหน้า +* ลดการเกิด ghosting บนเส้นทแยงของอักขระ + +หากความแตกต่างดูเล็กน้อยบนหน้าจอของคุณ ให้ซูมเข้าไปหรือพิมพ์ภาพออก; การปรับขนาดจะทำให้เห็นการปรับปรุงได้ชัดเจนยิ่งขึ้น + +## Common variations and edge cases + +### Rendering to PDF instead of PNG + +หากเป้าหมายของคุณเป็น PDF ให้แทนที่ `ImageDevice` ด้วย `PdfDevice` ตัวอ็อบเจกต์ `TextOptions` เดิมทำงานได้โดยไม่ต้องแก้ไขเพิ่มเติม: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### High‑DPI displays + +บนหน้าจอที่มีอัตราสเกล (เช่น 150 % หรือ 200 %) คุณอาจต้องเพิ่มขนาดอุปกรณ์ตามสัดส่วนเพื่อรักษาคุณภาพภาพ Hinting ยังคงทำงานและผลลัพธ์ยังคมชัด + +### Linux or macOS environments + +บน Linux เอนจินเรนเดอร์เริ่มต้นอาจย้อนกลับไปใช้ bitmap font renderer ที่ละเลย hinting เว้นแต่คุณจะเปิดใช้งานอย่างชัดเจน `UseHinting = true` จะบังคับให้เอนจินใช้ TrueType hinting ทำให้ลบล้างลักษณะ “เบลอ” ที่พบบนแพลตฟอร์มเหล่านี้ + +### Fonts without hinting tables + +ฟอนต์ OpenType สมัยใหม่บางตัวไม่มีข้อมูล hinting ในกรณีนี้ Aspose.HTML จะใช้ auto‑hinting แทน ซึ่งยังคงทำให้ความคมชัดดีขึ้นเมื่อเทียบกับการไม่มี hinting เลย + +## Step 5: Best practices for production code + +1. **Create a single `TextOptions` instance** และใช้ซ้ำในทุกการเรียกเรนเดอร์ เพื่อลดค่าใช้จ่ายของการสร้างอ็อบเจกต์ +2. **Combine hinting with anti‑aliasing** (`UseAntiAliasing = true`) เพื่อผลลัพธ์ที่เรียบเนียนที่สุด +3. **Test on the target platforms** (Windows, Linux, macOS) เพราะความแตกต่างของภาพอาจแตกต่างกัน +4. **Log the rendering configuration** ในบันทึกการทำงานของระบบ; จะช่วยวิเคราะห์ปัญหาภาพที่ไม่คาดคิด +5. **Keep Aspose.HTML up to date** เวอร์ชันใหม่อาจมีการปรับปรุงการเรนเดอร์ข้อความเพิ่มเติม + +## Full working example + +ด้านล่างเป็นแอปคอนโซลแบบครบวงจรที่สาธิตทุกอย่างที่กล่าวมา คัดลอกโค้ดไปใส่ในโปรเจกต์ .NET console ใหม่, เพิ่มแพคเกจ NuGet ของ Aspose.HTML, แล้วรัน + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Expected output** + +เมื่อรันโปรแกรมจะสร้างไฟล์ `hinted_output.png` หัวเรื่อง “Hinting in action” และข้อความย่อหน้าจะปรากฏคมชัด มีความหนาของเส้นสม่ำเสมอและไม่มีขอบเบลอ หากคุณคอมเมนต์ `UseHinting = true` ภาพเดียวกันจะแสดงอักขระที่ค่อนข้างเบลอ แสดงให้เห็นประโยชน์ของการตั้งค่านี้ + +## Conclusion + +คุณได้เรียนรู้วิธีปรับปรุงความคมชัดของข้อความใน Aspose.HTML ด้วยการเปิดใช้งาน hinting กระบวนการประกอบด้วยการสร้างอ็อบเจกต์ `TextOptions`, ตั้งค่า `UseHinting` (และอาจเพิ่ม `UseAntiAliasing`), แล้วผูกตัวเลือกเหล่านั้นกับเรนเดอร์ การทำเช่นนี้ทำงานได้กับ PNG, JPEG, PDF และรูปแบบเอาต์พุตอื่น ๆ พร้อมให้คุณภาพภาพที่สม่ำเสมอบน Windows, Linux, และ macOS + +ต่อไปคุณอาจสนใจหัวข้อที่เกี่ยวข้องเช่น **วิธีเปิดใช้งาน hinting สำหรับฟอนต์กำหนดเอง**, **การเพิ่มประสิทธิภาพการเรนเดอร์**, หรือ **การใช้ CSS ควบคุมลักษณะข้อความ** ใน Aspose.HTML ทดลองใช้ฟอนต์และการตั้งค่า DPI ต่าง ๆ เพื่อดูว่า hinting ปรับตัวอย่างไรในแต่ละสถานการณ์ + +Happy coding, and enjoy sharper text in every Aspose.HTML rendering! + + +## What Should You Learn Next? + + +บทเรียนต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีโค้ดตัวอย่างทำงานครบถ้วนพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานทางเลือกในโปรเจกต์ของคุณ + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/thai/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/thai/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..7b95f3fb2 --- /dev/null +++ b/html/thai/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,302 @@ +--- +category: general +date: 2026-09-10 +description: วิธีเรนเดอร์ HTML ด้วย C# โดยใช้ Aspose.Html เรียนรู้การประมวลผล HTML CSS, + การบันทึก HTML, การแปลง HTML เป็นสตรีม, และการโหลดเอกสาร HTML ใน .NET +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: th +lastmod: 2026-09-10 +og_description: วิธีเรนเดอร์ HTML ใน C# ด้วย Aspose.Html คู่มือนี้จะแสดงวิธีการประมวลผล + HTML CSS, บันทึก HTML, แปลง HTML เป็นสตรีม, และโหลดเอกสาร HTML อย่างมีประสิทธิภาพ +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: เรนเดอร์ HTML ใน C# ด้วย Aspose.Html – คู่มือทีละขั้นตอน +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: วิธีเรนเดอร์ HTML ใน C# ด้วย Aspose.Html – คู่มือเต็ม +url: /th/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีการเรนเดอร์ HTML ใน C# ด้วย Aspose.Html – คู่มือเต็ม + +หากคุณต้องการ **วิธีการเรนเดอร์ html** ภายในแอปพลิเคชัน .NET นี้ จะอธิบายขั้นตอนการทำงานทั้งหมดให้คุณเห็น คุณจะได้เรียนรู้วิธีประมวลผล HTML CSS, วิธีบันทึก HTML, การแปลง HTML เป็นสตรีม, และการโหลดเอกสาร HTML ใน C# ด้วยไลบรารี Aspose.Html + +การเรนเดอร์ HTML ในบริบทฝั่งเซิร์ฟเวอร์มักต้องทำมากกว่าการโหลดไฟล์เพียงอย่างเดียว—คุณต้องจัดการทรัพยากรที่เชื่อมโยงเช่นรูปภาพและสไตล์ชีต คู่มือนี้จะพาคุณผ่านทุกขั้นตอน ตั้งแต่การโหลดเอกสารจนถึงการปรับแต่งการจัดการทรัพยากรและสุดท้ายการดึงเอาต์พุตที่เรนเดอร์เป็น MemoryStream + +เมื่ออ่านบทความจนจบแล้ว คุณจะสามารถ: + +* โหลดเอกสาร HTML จากดิสก์หรือ URL (`load html document c#`) +* จัดหา `ResourceHandler` แบบกำหนดเองเพื่อ **process html css** แบบเรียลไทม์ +* บันทึก HTML ที่เรนเดอร์และ **convert html to stream** เพื่อการประมวลผลต่อไป +* เก็บผลลัพธ์โดยใช้เทคนิค **how to save html** ที่ทำงานได้ในทุกสภาพแวดล้อม .NET + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน ให้ตรวจสอบว่าคุณมี: + +* .NET 6.0 SDK หรือใหม่กว่า +* Visual Studio 2022 (หรือ IDE ใด ๆ ที่รองรับ .NET 6) +* การอ้างอิง NuGet ไปยัง **Aspose.Html** (`dotnet add package Aspose.Html`) +* ไฟล์ `input.html` อยู่ในโฟลเดอร์ที่รู้จัก (ตัวอย่างใช้ `YOUR_DIRECTORY/input.html`) + +ไม่จำเป็นต้องใช้ไลบรารีของบุคคลที่สามเพิ่มเติม + +## วิธีการเรนเดอร์ HTML – คู่มือขั้นตอนโดยละเอียด + +### ขั้นตอนที่ 1: โหลดเอกสาร HTML ใน C# + +ขั้นตอนแรกคือการสร้างอินสแตนซ์ `HTMLDocument` ที่แทน markup ต้นฉบับ นี่คือหัวใจของ **how to render html** ด้วย Aspose.Html + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*เหตุผลที่สำคัญ:* การโหลดเอกสารจะทำการพาร์ส markup และสร้าง DOM ภายใน ซึ่งเรนเดอร์จะใช้ต่อไปเพื่อประยุกต์ CSS และแก้ไขทรัพยากรต่าง ๆ + +### ขั้นตอนที่ 2: สร้าง ResourceHandler แบบกำหนดเองเพื่อ **process html css** + +เมื่อเรนเดอร์พบทรัพยากรภายนอก (รูปภาพ, ไฟล์ CSS, ฟอนต์) มันจะเรียก `ResourceHandler` เพื่อขอสตรีม การให้ handler แบบกำหนดเองทำให้คุณควบคุมการดึง, แปลง, หรือแทนที่ทรัพยากรแต่ละรายการได้อย่างเต็มที่ + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*เหตุผลที่สำคัญ:* ที่นี่คือจุดที่คุณใส่ตรรกะ **process html css** — เช่น การทำ inline CSS, แทนที่รูปภาพด้วย placeholder, หรือใช้ฟิลเตอร์ความปลอดภัย + +### ขั้นตอนที่ 3: ตั้งค่า `HtmlSaveOptions` ให้ใช้ handler ที่กำหนดเอง + +`HtmlSaveOptions` บอกเรนเดอร์วิธีเขียนเอาต์พุต กำหนด `ResourceHandler` ที่คุณสร้างไว้เพื่อให้เรนเดอร์เรียกใช้สำหรับทุกการอ้างอิงภายนอก + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +การตั้งค่า `EmbedCss` และ `EmbedImages` มีประโยชน์เมื่อคุณต้อง **convert html to stream** และต้องการผลลัพธ์ที่เป็นไฟล์เดียว + +### ขั้นตอนที่ 4: บันทึกเอกสารและ **convert html to stream** + +ตอนนี้คุณสามารถเรนเดอร์เอกสารและจับผลลัพธ์ไว้ใน `MemoryStream` ได้ นี่คือหัวใจของ **how to save html** เมื่อคุณต้องการเอาต์พุตในหน่วยความจำแทนไฟล์จริง + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*เหตุผลที่สำคัญ:* `MemoryStream` ให้คุณมีตัวแทนไบนารีที่ยืดหยุ่นของ HTML ที่เรนเดอร์ ซึ่งสามารถเก็บ, ส่งต่อ, หรือทำการประมวลผลต่อได้โดยไม่ต้องสัมผัสระบบไฟล์ + +## การจัดการกรณีขอบทั่วไป + +| สถานการณ์ | วิธีการที่แนะนำ | +|-----------|-------------------| +| **ไฟล์ CSS หรือรูปภาพหาย** | ใน `MyResourceHandler.HandleResource` ตรวจสอบ `File.Exists` ก่อนเปิด หากไฟล์ไม่มี ให้คืน `MemoryStream` ว่างหรือรูป placeholder | +| **ไฟล์ HTML ขนาดใหญ่ (>10 MB)** | เพิ่มขนาดบัฟเฟอร์เริ่มต้นของ `MemoryStream` (`new MemoryStream(capacity)`) เพื่อหลีกเลี่ยงการจัดสรรบ่อย | +| **URL แบบ relative ที่มีส่วน `..`** | ใช้ `new Uri(baseUri, info.Uri)` เพื่อแก้ไขเป็นพาธเต็มก่อนเข้าถึงระบบไฟล์ | +| **ความปลอดภัยของเธรดใน ASP.NET** | สร้าง `HTMLDocument` และ `MyResourceHandler` ใหม่ต่อคำขอ; อย่าแชร์อินสแตนซ์ระหว่างเธรด | +| **ปัญหา Encoding** | ตั้ง `saveOpts.Encoding = Encoding.UTF8` เพื่อรับประกันผลลัพธ์เป็น UTF‑8 โดยเฉพาะเมื่อแหล่งมีอักขระที่ไม่ใช่ ASCII | + +## เคล็ดลับพิเศษ: ใช้ handler เดียวกันหลายเอกสาร + +หากคุณต้องประมวลผลไฟล์ HTML จำนวนมากเป็นชุด คุณสามารถใช้ `MyResourceHandler` ตัวเดียวและเปลี่ยนตารางค้นหาภายในตามต้องการ วิธีนี้ลดการจัดสรรออบเจ็กต์และเร่งขั้นตอน **process html css** ให้เร็วขึ้น + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## ตัวอย่างเต็มที่สามารถรันได้ + +ด้านล่างเป็นโปรแกรมสมบูรณ์ที่คุณสามารถคัดลอกไปวางในแอปพลิเคชันคอนโซล มันสาธิต **how to render html**, **process html css**, **how to save html**, **convert html to stream**, และ **load html document c#** — ทั้งหมดในกระบวนการเดียว + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** (ตัดทอนเพื่อความกระชับ): + + + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งรวมโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโครงการของคุณ + +- [วิธีบันทึก HTML ด้วย Aspose.Html – คู่มือ C# ฉบับสมบูรณ์](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [วิธีใช้ Aspose เพื่อเรนเดอร์ HTML เป็น PNG ใน C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [วิธีใช้ Aspose เพื่อเรนเดอร์ HTML เป็น PNG – คู่มือขั้นตอนโดยละเอียด](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/thai/net/working-with-html-documents/_index.md b/html/thai/net/working-with-html-documents/_index.md index 9440eb1fc..f8625f80a 100644 --- a/html/thai/net/working-with-html-documents/_index.md +++ b/html/thai/net/working-with-html-documents/_index.md @@ -36,6 +36,8 @@ url: /th/net/working-with-html-documents/ ตอนนี้ มาพัฒนาทักษะของคุณไปอีกขั้น การแก้ไขเอกสาร HTML เป็นงานทั่วไปสำหรับนักพัฒนาเว็บ และ Aspose.HTML ช่วยลดความยุ่งยากของกระบวนการนี้ได้อย่างมาก ในส่วนนี้ เราจะพูดถึงการสร้าง การจัดการ และการจัดรูปแบบเอกสาร คุณจะค้นพบวิธีปรับปรุงรูปลักษณ์และฟังก์ชันการทำงานของเนื้อหาเว็บของคุณ ให้ดึงดูดและใช้งานง่าย +### [วิธีโหลดเอกสาร HTML จากไฟล์ด้วย Aspose.HTML ใน C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + ### [วิธีบันทึก HTML ใน C# – คู่มือฉบับสมบูรณ์โดยใช้ Custom Resource Handler](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) ### [วิธีทำให้หัวเรื่องเป็นตัวหนาด้วย CSS & C# – คู่มือขั้นตอนเต็ม](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) @@ -48,6 +50,9 @@ url: /th/net/working-with-html-documents/ ### [วิธีบีบอัด HTML ใน C# – คู่มือขั้นตอนเต็ม](./how-to-zip-html-in-c-complete-step-by-step-guide/) เรียนรู้วิธีบีบอัดไฟล์ HTML ด้วย C# อย่างละเอียด พร้อมขั้นตอนครบถ้วนเพื่อเพิ่มประสิทธิภาพการจัดเก็บ +### [วิธีใช้ HtmlSaveOptions ใน C# กับ Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/thai/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/thai/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..a55b3e073 --- /dev/null +++ b/html/thai/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-09-10 +description: เรียนรู้การโหลดเอกสาร HTML จากไฟล์โดยใช้ Aspose.HTML ใน C# รวมถึงตัวเลือกการเรนเดอร์ภาพ + ตัวเลือกการเรนเดอร์ข้อความ และตัวจัดการทรัพยากรแบบกำหนดเอง. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: th +lastmod: 2026-09-10 +og_description: โหลดเอกสาร HTML จากไฟล์โดยใช้ Aspose.HTML ใน C#. คู่มือนี้ครอบคลุมตัวเลือกการเรนเดอร์ + ตัวจัดการทรัพยากรแบบกำหนดเอง และโค้ดเต็มที่คุณสามารถรันได้วันนี้. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: โหลดเอกสาร HTML จากไฟล์ด้วย Aspose.HTML – คู่มือ C# ทีละขั้นตอน +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: วิธีโหลดเอกสาร HTML จากไฟล์ด้วย Aspose.HTML ใน C# +url: /th/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีโหลดเอกสาร HTML จากไฟล์ด้วย Aspose.HTML ใน C# + +หากคุณต้องการ **load HTML document from file** และควบคุมการเรนเดอร์ของมัน บทแนะนำนี้จะแสดงวิธีแก้ไขที่สมบูรณ์พร้อมใช้งาน คุณจะได้เห็นวิธีตั้งค่าการเรนเดอร์รูปภาพ, เปิดใช้งาน text hinting, และจัดหา custom resource handler ที่คืนค่า empty streams สำหรับแอสเซ็ตภายนอก เมื่อจบคู่มือคุณจะสามารถบันทึก HTML ที่ประมวลผลแล้วลงใน memory stream หรือปลายทางอื่น ๆ ที่คุณต้องการได้ + +ตัวอย่างใช้ Aspose.HTML for .NET ซึ่งเป็นไลบรารีที่ทำให้การประมวลผล HTML, CSS, และ SVG ง่ายขึ้นโดยไม่ต้องใช้เอนจินเบราว์เซอร์ ไม่ต้องใช้เครื่องมือภายนอก และโค้ดทำงานได้กับ .NET 6 หรือใหม่กว่า อย่าลืมติดตั้งแพ็กเกจ NuGet ของ Aspose.HTML ก่อนเริ่ม + +## ข้อกำหนดเบื้องต้น + +- .NET 6 SDK (หรือเวอร์ชัน .NET ใด ๆ ที่ Aspose.HTML รองรับ) +- Visual Studio 2022 หรือ IDE C# อื่น ๆ +- Aspose.HTML for .NET NuGet package (`Install-Package Aspose.HTML`) +- ไฟล์ HTML ชื่อ `input.html` ที่วางไว้ในโฟลเดอร์ที่คุณสามารถอ้างอิงจากโค้ดได้ + +## ขั้นตอนที่ 1: โหลดเอกสาร HTML จากไฟล์ + +การดำเนินการแรกคือสร้างอินสแตนซ์ `HTMLDocument` ที่อ่านไฟล์ต้นทาง วัตถุนี้แทนโครงสร้าง DOM ทั้งหมดและให้เมธอดสำหรับการจัดการต่อไป + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**ทำไมเรื่องนี้สำคัญ:** การโหลดไฟล์เข้าสู่ `HTMLDocument` ทำให้คุณเข้าถึงโครงสร้าง, สไตล์, และแหล่งข้อมูลของเอกสารได้เต็มที่ ซึ่งคุณสามารถเรนเดอร์หรือแปลงต่อไปได้ + +## ขั้นตอนที่ 2: ตั้งค่าตัวเลือกการเรนเดอร์รูปภาพ (Aspose.HTML rendering) + +หากคุณวางแผนจะ rasterize หน้าในภายหลัง การกำหนด image rendering จะช่วยเพิ่มคุณภาพภาพ Antialiasing ทำให้ขอบเรียบและลดอาร์ติแฟกต์ที่หยัก + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**เคล็ดลับ:** `UseAntialiasing` มีประโยชน์เป็นพิเศษสำหรับกราฟิกเวกเตอร์และข้อความที่จะ rasterize เป็น PNG หรือ JPEG + +## ขั้นตอนที่ 3: เปิดใช้งาน text hinting (text rendering options) + +Text hinting มีผลต่อการจัดตำแหน่ง glyphs กับพิกเซลกริด ซึ่งช่วยให้ฟอนต์ขนาดเล็กดูคมชัดขึ้น + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**ทำไมจึงสำคัญ:** เมื่อคุณส่งออก HTML เป็นภาพในขั้นต่อไป hinting จะลดอักษรเบลอและทำให้การจัดรูปแบบตัวอักษรสอดคล้องกันบนทุกแพลตฟอร์ม + +## ขั้นตอนที่ 4: สร้าง custom resource handler (custom resource handler) + +แหล่งข้อมูลภายนอกเช่นฟอนต์, รูปภาพ หรือสคริปต์อาจถูกอ้างอิงใน HTML `ResourceHandler` ช่วยให้คุณควบคุมวิธีการดึงแหล่งข้อมูลเหล่านั้น ในตัวอย่างนี้ handler จะคืนค่า `MemoryStream` ว่างสำหรับทุกคำขอ ทำให้แอสเซ็ตภายนอกทั้งหมดถูกตัดออก + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**เมื่อใดควรใช้:** รูปแบบนี้เหมาะกับสภาพแวดล้อมที่มีข้อจำกัดด้านความปลอดภัย, การทดสอบหน่วย, หรือเมื่อคุณต้องการเพียง markup โดยไม่มีไฟล์ภายนอก + +## ขั้นตอนที่ 5: ประกอบ HTML save options (HTML to image conversion) + +ส่วนประกอบทั้งหมด—resource handler, การตั้งค่าเรนเดอร์, และสไตล์ฟอนต์—จะถูกแนบเข้าไปในอ็อบเจ็กต์ `HtmlSaveOptions` ซึ่งบอก Aspose.HTML วิธีการทำซีเรียลไลซ์เอกสาร + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**คำอธิบาย:** `WebFontStyle` สามารถบังคับสไตล์เฉพาะ (เช่น bold) สำหรับเว็บฟอนต์ที่อาจหายไป `ImageRenderingOptions` และ `TextOptions` ที่เราตั้งค่าไว้ก่อนหน้านี้จะถูกฉีดเข้าไปที่นี่ เพื่อให้มีผลต่อการ rasterization ที่อาจเกิดขึ้นต่อไป + +## ขั้นตอนที่ 6: บันทึกเอกสารลงใน memory stream (complete solution) + +สุดท้ายให้เขียน HTML ที่ประมวลผลแล้วลงใน `MemoryStream` จากนั้นคุณสามารถบันทึกสตรีมลงไฟล์, ส่งผ่านเครือข่าย, หรือส่งต่อให้ API อื่นได้ + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**ผลลัพธ์:** `output.html` จะมี markup เหมือนกับ `input.html` แต่แอสเซ็ตภายนอกทั้งหมดถูกแทนที่ด้วย empty streams และตัวเลือกการเรนเดอร์ถูกฝังไว้ใน save options + +## ตัวอย่างที่สามารถรันได้เต็มรูปแบบ + +การรวมทุกขั้นตอนเข้าด้วยกันจะให้โปรแกรมอิสระที่คุณสามารถคัดลอก, วาง, และรันได้ + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +การรันโปรแกรมนี้จะสร้าง `output.html` ในไดเรกทอรีปัจจุบัน เปิดไฟล์ในเบราว์เซอร์เพื่อยืนยันว่า markup ดั้งเดิมโหลดได้ แต่รูปภาพ, ฟอนต์, หรือสคริปต์ที่เชื่อมโยงจะไม่มี (เพราะถูกแทนที่ด้วย empty streams) + +## คำถามที่พบบ่อยและกรณีขอบ + +| คำถาม | คำตอบ | +|----------|--------| +| **ถ้าฉันต้องการแหล่งข้อมูลต้นฉบับแทน empty streams จะทำอย่างไร?** | แทนที่ `MemoryResourceHandler` ด้วย handler ที่อ่านไฟล์จากดิสก์หรือดาวน์โหลดผ่าน HTTP | +| **ฉันสามารถเรนเดอร์ HTML โดยตรงเป็น PNG หรือ JPEG ได้ไหม?** | ได้ ใช้ `ImageRenderer` พร้อม `ImageRenderingOptions` และ `TextOptions` ที่ตั้งค่าไว้ แล้วเรียก `renderer.Render(page, outputStream, ImageFormat.Png)` | +| **จำเป็นต้องใช้ `WebFontStyle.Bold` หรือไม่?** | ไม่จำเป็น ตัวอย่างนี้แสดงการบังคับสไตล์ฟอนต์ หากไม่ต้องการสไตล์บังคับให้ใช้ `WebFontStyle.Normal` หรือไม่ใส่เลย | +| **โค้ดนี้ทำงานบน .NET Core ได้หรือไม่?** | Aspose.HTML รองรับ .NET 5/6/7 ดังนั้นโค้ดเดียวกันทำงานบนโปรเจกต์ .NET Core ได้ | +| **ฉันจะจัดการไฟล์ HTML ขนาดใหญ่อย่างมีประสิทธิภาพอย่างไร?** | ใช้ `FileStream` constructor เพื่อสตรีมไฟล์เข้าสู่ `HTMLDocument` แทนการโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำในครั้งเดียว | + +## สรุป + +คุณได้เรียนรู้วิธี **load HTML document from file** ด้วย Aspose.HTML, ตั้งค่า **image rendering options** และ **text rendering options**, และใช้ **custom resource handler** เพื่อควบคุมแอสเซ็ตภายนอก ตัวอย่างเต็มแสดงการบันทึก HTML ที่ประมวลผลแล้วลงใน memory stream ซึ่งคุณสามารถเก็บหรือส่งต่อได้ตามต้องการ + +ต่อไปคุณอาจสำรวจ **HTML to image conversion** โดยสลับ `HtmlSaveOptions` เป็น `ImageRenderer` หรือทดลองฟีเจอร์การเรนเดอร์ของ Aspose.HTML เช่น CSS media queries, การสนับสนุน SVG, และการส่งออกเป็น PDF ฟีเจอร์เหล่านี้ช่วยให้คุณสร้าง pipeline การประมวลผลเอกสารที่สมบูรณ์แบบทั้งหมดใน C# ได้ + +ขอให้เขียนโค้ดสนุก! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคในคู่มือนี้ แต่ละแหล่งข้อมูลมีโค้ดตัวอย่างทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยคุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโปรเจกต์ของคุณ + +- [โหลด HTML โดยใช้เซิร์ฟเวอร์ระยะไกลใน .NET ด้วย Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [โหลด HTML ด้วย URL ใน .NET ด้วย Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [วิธีบันทึก HTML ใน C# – คู่มือเต็มด้วย Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/thai/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/thai/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..63ab4dbd8 --- /dev/null +++ b/html/thai/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,311 @@ +--- +category: general +date: 2026-09-10 +description: เรียนรู้วิธีใช้ HtmlSaveOptions ใน C# เพื่อควบคุมสไตล์เว็บ‑ฟอนต์และบันทึกไฟล์ + HTML ด้วย Aspose.HTML พร้อมตัวอย่างโค้ดเต็มและเคล็ดลับเชิงปฏิบัติ. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: th +lastmod: 2026-09-10 +og_description: วิธีใช้ HtmlSaveOptions ใน C# เพื่อเปิดใช้งานสไตล์ตัวหนาและตัวเอียงของเว็บฟอนต์เมื่อบันทึก + HTML ด้วย Aspose.HTML. ติดตามตัวอย่างเต็มและเคล็ดลับการปฏิบัติที่ดีที่สุด. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: วิธีใช้ HtmlSaveOptions ใน C# กับ Aspose.HTML – คู่มือขั้นตอนโดยละเอียด +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: วิธีใช้ HtmlSaveOptions ใน C# กับ Aspose.HTML +url: /th/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีใช้ HtmlSaveOptions ใน C# กับ Aspose.HTML + +หากคุณต้องการควบคุมวิธีที่ Aspose.HTML บันทึกเอกสาร HTML, **การเรียนรู้วิธีใช้ HtmlSaveOptions เป็นสิ่งสำคัญ**. บทแนะนำนี้จะแสดงขั้นตอนโดยละเอียดว่าต้องใช้ HtmlSaveOptions เพื่อเปิดใช้งานสไตล์ฟอนต์เว็บแบบหนาและเอียงขณะบันทึกเอกสารอย่างไร. + +ไลบรารี Aspose HTML ให้ API ที่ครอบคลุมสำหรับการโหลด, แก้ไข, และส่งออกเนื้อหา HTML. เมื่อจบคู่มือนี้คุณจะสามารถ: + +* โหลดไฟล์ HTML ที่มีอยู่เข้าสู่ `HTMLDocument`. +* กำหนดค่า `HtmlSaveOptions` เพื่อใช้แฟล็ก `WebFontStyle` ที่ต้องการ. +* บันทึกเอกสารที่แก้ไขไปยังตำแหน่งใหม่หรือสตรีม. +* ขยายโซลูชันเพื่อรองรับสไตล์ฟอนต์อื่น ๆ, CSS กำหนดเอง, และการจัดการข้อผิดพลาด. + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน, ตรวจสอบว่าคุณมี: + +* .NET 6.0 หรือใหม่กว่า ติดตั้งแล้ว. +* ไลเซนส์ที่ถูกต้องสำหรับ **Aspose.HTML for .NET** (รุ่นทดลองฟรีใช้ได้กับตัวอย่างนี้). +* Visual Studio 2022 (หรือ IDE C# ใดก็ได้) เพื่อคอมไพล์และรันโค้ด. + +ไม่จำเป็นต้องติดตั้งแพ็กเกจ NuGet เพิ่มเติมนอกจาก `Aspose.HTML`. + +## ขั้นตอนที่ 1: ตั้งค่าโครงการและนำเข้าเนมสเปซ + +สร้างโปรเจกต์ **Console App** ใหม่และเพิ่มแพ็กเกจ NuGet ของ Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +จากนั้น, ที่ส่วนหัวของไฟล์ `Program.cs`, นำเข้าเนมสเปซที่จำเป็น: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +เนมสเปซเหล่านี้ทำให้คุณเข้าถึงประเภท `HTMLDocument`, `HtmlSaveOptions`, และ `WebFontStyle` ที่จะใช้ตลอดบทแนะนำนี้. + +## ขั้นตอนที่ 2: โหลดเอกสาร HTML ต้นฉบับ + +การดำเนินการแรกคือการอ่านไฟล์ HTML ที่ต้องการประมวลผล. แทนที่ `"YOUR_DIRECTORY/input.html"` ด้วยพาธจริงของไฟล์ของคุณ. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` จะทำการพาร์สมาร์กอัป, สร้างโครงสร้าง DOM, และเตรียมพร้อมสำหรับการแก้ไข. หากไฟล์ไม่พบ, จะเกิดข้อยกเว้น, ดังนั้นคุณอาจต้องห่อการเรียกนี้ด้วยบล็อก try‑catch สำหรับโค้ดในสภาพการผลิต. + +## ขั้นตอนที่ 3: สร้างและกำหนดค่า HtmlSaveOptions + +`HtmlSaveOptions` ช่วยให้คุณปรับแต่งกระบวนการบันทึกได้ละเอียด. เพื่อเปิดใช้งานสไตล์ฟอนต์เว็บแบบหนาและเอียง, ให้รวมแฟล็ก `WebFontStyle` ที่สอดคล้องกันด้วยตัวดำเนินการบิต OR (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### ทำไมต้องกำหนดค่า WebFontStyle? + +เมื่อคุณส่งออกเอกสาร HTML, Aspose.HTML สามารถฝังเว็บฟอนต์ที่ตรงกับสไตล์ต้นฉบับ. การตั้งค่า `WebFontStyle` จะบอกตัวส่งออกว่าควรรวมรูปแบบฟอนต์ใดบ้าง. สิ่งนี้ช่วยลดขนาดไฟล์สุดท้ายเมื่อคุณต้องการสไตล์เฉพาะและทำให้ผลลัพธ์ที่แสดงตรงกับแหล่งที่มา. + +#### ตัวแปรทั่วไป + +| สไตล์ที่ต้องการ | แฟล็ก `WebFontStyle` ที่สอดคล้อง | +|----------------|-----------------------------------| +| ปกติ (regular) | `WebFontStyle.Regular` | +| หนา | `WebFontStyle.Bold` | +| เอียง | `WebFontStyle.Italic` | +| หนา + เอียง | `WebFontStyle.Bold | WebFontStyle.Italic` | +| ทุกแบบ | `WebFontStyle.All` | + +คุณสามารถรวมแฟล็กใดก็ได้ตามความต้องการของคุณ. + +## ขั้นตอนที่ 4: บันทึกเอกสารด้วยตัวเลือกที่กำหนดไว้ + +ตอนนี้ให้บันทึกเอกสารไปยังไฟล์ใหม่. เมธอด `Save` รับพาธเป้าหมายและอินสแตนซ์ `HtmlSaveOptions` ที่คุณเตรียมไว้. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +หากต้องการบันทึกไปยังสตรีมหน่วยความจำ (เช่น เพื่อส่งไฟล์ผ่าน HTTP), ใช้ overload ที่รับอ็อบเจ็กต์ `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## ขั้นตอนที่ 5: ตรวจสอบผลลัพธ์ + +เปิด `output.html` ในเบราว์เซอร์หรือเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความ. คุณควรเห็นว่าแท็ก ` + + +
+ +"; +``` + +HTML, rasterleştirildiğinde antialiasing'den faydalanan basit bir vektör şekli tanımlar. + +## Adım 2: Render motorunu başlatın + +Aspose.HTML, `HtmlRenderer` ve `ImageRenderingOptions` birlikte kullanır. İşte burada son bitmap için **antialiasing nasıl etkinleştirilir**. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**`UseAntialiasing = true` neden önemlidir**: Render motoru vektör şekilleri, metin ve degrade'leri alt‑piksel hassasiyetiyle çizer. Antialiasing'i etkinleştirmek, rasterleştiriciyi kenar piksellerini komşularıyla karıştırmaya yönlendirir ve `UseAntialiasing` varsayılan `false` bırakıldığında ortaya çıkan tırtıklı çizgileri ortadan kaldırır. Bu, **yüksek kaliteli görüntü oluşturmanın** temelidir. + +## Adım 3: HTML'yi bir görüntüye render edin + +Seçenekler yapılandırıldıktan sonra `RenderToImage` metodunu çağırın. Metod, diske kaydedebileceğiniz veya doğrudan bir yanıt akışına gönderebileceğiniz bir `Image` nesnesi döndürür. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Çalıştırdıktan sonra `output.png` pürüzsüz, antialiasing uygulanmış bir daire içerir. Sonucu doğrulamak için dosyayı herhangi bir görüntü görüntüleyicide açın. + +![Aspose.HTML render'ında antialiasing nasıl etkinleştirilir](/images/antialiasing-example.png){alt="Aspose.HTML render'ında antialiasing nasıl etkinleştirilir"} + +## Adım 4: Yüksek kaliteli çıktıyı doğrulayın (html görüntüsü nasıl render edilir) + +Render işleminin beklentilerinizi karşıladığından emin olmak için programlı olarak görüntü boyutlarını ve DPI'yi doğrulayabilirsiniz. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Tipik konsol çıktısı: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +Artırılmış DPI ve antialiasing birleşimi, görüntü büyütüldüğünde bile temiz bir sonuç üretir. Bu, **html görüntüsü nasıl render edilir** sorusuna profesyonel kaliteyle bir yanıt verir. + +## Yaygın varyasyonlar ve kenar durumları + +| Durum | Önerilen ayar | +|-----------|-------------------| +| Çok büyük sayfaların render edilmesi (ör. tam ekran web uygulamaları) | `ImageRenderingOptions.Width` / `Height` değerlerini artırın veya bellek kullanımını kontrol etmek için `Scale` ayarlayın. | +| Şeffaf arka plan ihtiyacı | `imageOptions.BackgroundColor = Color.Transparent;` satırını ekleyin | +| Daha küçük dosya boyutu için JPEG hedefleme | `ImageFormat`'ı `ImageFormat.Jpeg` olarak değiştirin ve `Quality` (0‑100) değerini ayarlayın. | +| GUI olmadan Linux konteynerinde çalıştırma | Aspose.HTML tamamen başsızdır; ek bağımlılık gerekmez. | +| Piksel‑tam UI testi için antialiasing'i devre dışı bırakmanız gerekiyor | `UseAntialiasing = false;` olarak ayarlayın – kenarlar net olur ancak tırtıklı görünebilir. | + +### Pro ipucu + +Bir dizi görüntü oluştururken tek bir `HTMLDocument` örneğini yeniden kullanın ve renderlar arasında yalnızca `Content` özelliğini değiştirin. Bu, aynı HTML'in tekrar tekrar ayrıştırılmasından kaynaklanan yükü azaltır ve verimliliği artırır. + +## Tam kaynak listesi + +Aşağıda, yeni bir console‑app projesine kopyalayıp hemen çalıştırabileceğiniz tam program yer almaktadır. + + + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini öğrenmenize ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmenize yardımcı olacak adım adım açıklamalı tam çalışan kod örnekleri içerir. + +- [C# ile html'yi bir görüntüye render etme – Tam Kılavuz](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [HTML'den Görüntü Öğreticisi – C# ile HTML'yi PNG'ye render et](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Aspose'u Kullanarak HTML'yi PNG'ye Render Etme – Adım Adım Kılavuz](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/turkish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/turkish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..f7259c68a --- /dev/null +++ b/html/turkish/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,298 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTML ile HTML render ederken metin netliğini artırmak için ipucu + özelliğini etkinleştirin. Bu kılavuz, ipucu özelliğini nasıl etkinleştireceğinizi + ve neden önemli olduğunu gösterir. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: tr +lastmod: 2026-09-10 +og_description: Aspose.HTML'de metin netliğini artırmak için ipuçlarını nasıl etkinleştireceğinizi + öğrenin. Her platformda daha net metin elde etmek için adım adım rehberi izleyin. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Aspose.HTML'de metin netliğini artırın – daha keskin render için hinting'i + etkinleştirin +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Aspose.HTML'de hinting ile metin netliğini nasıl artırabilirsiniz +url: /tr/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML'de metin netliğini artırma: İpucu (hinting) kullanımı + +HTML'yi Aspose.HTML ile işlerken metin netliğini artırmanız gerekiyorsa, bu kılavuz eksiksiz bir çözüm sunar. İpucu (hinting) özelliğini etkinleştirerek, özellikle varsayılan renderlamanın bulanık görünebildiği Windows dışı platformlarda daha keskin glifler elde edersiniz. + +Bu öğreticide ipucu (hinting) nasıl etkinleştirilir, metin netliği açısından neden önemlidir ve bu ayar tipik bir Aspose.HTML iş akışına nasıl entegre edilir öğrenilecektir. Harici bir dokümantasyona ihtiyaç yoktur—aşağıdaki adımlarda ihtiyacınız olan her şey mevcuttur. + +## Önkoşullar + +Başlamadan önce şunların kurulu olduğundan emin olun: + +* .NET 6.0 veya üzeri (kod .NET Framework 4.7+ ile de çalışır) +* **Aspose.HTML for .NET**'in lisanslı bir kopyası (deneme sürümü test için yeterlidir) +* C# ve Visual Studio ya da tercih ettiğiniz herhangi bir IDE hakkında temel bilgi + +Bu gereksinimler minimum düzeydedir; aynı yaklaşım konsol uygulamaları, ASP.NET Core servisleri veya masaüstü uygulamaları için de geçerlidir. + +## İpucu (hinting) etkinleştirmenin metin netliğini artırması neden önemlidir? + +Hinting, her glifin konturunu ekran cihazının piksel ızgarasına hizalayacak şekilde ayarlayan bir süreçtir. Hinting olmadan, özellikle düşük çözünürlüklü veya yüksek DPI ekranlarda karakterler bulanık ya da düzensiz görünebilir. Hinting'i etkinleştirmek, render motoruna bu ayarlamaları otomatik olarak yapmasını söyler ve şu faydaları sağlar: + +* Karakterler arasında tutarlı çizgi kalınlığı +* Linux, macOS ve eski Windows sürümlerinde daha iyi okunabilirlik +* PDF'ler, ekran görüntüleri veya ekran ön izlemeleri için profesyonel bir görünüm + +Aspose.HTML bu davranışı **TextOptions.UseHinting** özelliği üzerinden sunar; varsayılan değer geriye uyumluluk için `false`'tur. + +## Adım 1: `TextOptions` örneği oluşturma + +İlk adım **TextOptions** sınıfının bir örneğini oluşturmaktır. Bu nesne, tüm metin‑ile‑ilgili render ayarlarını gruplar ve bunları render hattına kolayca iletmenizi sağlar. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Nesneyi oluşturmak henüz renderlamayı etkilemez; sadece daha sonra ayarlayacağınız seçenekler için bir konteyner hazırlar. + +## Adım 2: Metin netliğini artırmak için hinting'i etkinleştirme + +**UseHinting** özelliğini `true` olarak ayarlayın. Bu tek satır, ilişkili seçeneklerle renderlanan her metin parçası için hinting algoritmasını etkinleştirir. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +`UseHinting` `true` olduğunda, Aspose.HTML her glife alt‑piksel ayarlamaları otomatik olarak uygular. Etki, özellikle ince detaylar içeren serif yazı tipleri veya küçük boyutlu metinlerde belirgindir. + +### Uzman ipucu: Hinting'i anti‑aliasing ile birleştirin + +Daha yumuşak kenarlar da istiyorsanız, hinting ile birlikte anti‑aliasing'i etkinleştirebilirsiniz: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Her iki ayar birlikte, geniş bir cihaz yelpazesinde en iyi görsel doğruluğu sağlar. + +## Adım 3: `TextOptions`'ı render sürecine ekleme + +Yapılandırılmış `TextOptions` nesnesini **HtmlRenderer** (veya kullandığınız başka bir render sınıfı) ile birlikte geçmeniz gerekir. Aşağıda bir HTML dizesi yükleyen, seçenekleri uygulayan ve çıktıyı PNG dosyasına yazan minimal bir örnek yer alıyor. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Ana satırların açıklaması** + +* `HTMLDocument` HTML işaretlemesini ayrıştırır. +* `ImageDevice` çıktı boyutlarını tanımlar (bu örnekte 800 × 600 piksel). +* `HtmlRenderer` gerçek renderlamayı gerçekleştirir; `renderer.Options.TextOptions`'a `textOptions` atamak, hinting'in uygulanmasını sağlar. +* `device.Save("output.png")` son görüntüyü diske yazar. + +Bu kodu çalıştırdığınızda, başlık ve paragraf 96 dpi bir monitörde bile net bir şekilde ortaya çıkar ve `output.png` dosyası oluşturulur. + +## Adım 4: Sonucu doğrulama + +Oluşturulan görüntüyü herhangi bir görüntüleyicide açın. **Hinting olmadan** renderlanan bir görüntüyle ( `UseHinting = false` ) karşılaştırın. Şunları fark edeceksiniz: + +* “H”, “e”, “l”, “o” harflerinin daha keskin kenarları +* Paragraf boyunca daha tutarlı çizgi kalınlığı +* Karakterlerin diyagonal hatlarında azalmış hayaletleme (ghosting) + +Fark ekranınızda çok ince ise, görüntüyü yakınlaştırın ya da yazdırın; büyütülmüş boyutta iyileşme daha belirgin olur. + +## Yaygın varyasyonlar ve kenar durumları + +### PNG yerine PDF'ye renderlama + +Hedefiniz PDF ise, `ImageDevice` yerine `PdfDevice` kullanın. Aynı `TextOptions` nesnesi değişiklik yapmadan çalışır: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Yüksek DPI ekranlar + +Ölçek faktörleri (ör. %150 veya %200) olan ekranlarda görsel kaliteyi korumak için cihaz boyutunu orantılı olarak artırmak isteyebilirsiniz. Hinting hâlâ uygulanır ve sonuç keskin kalır. + +### Linux veya macOS ortamları + +Linux'ta varsayılan render motoru, hinting'i yok sayan bir bitmap font renderlayıcıya geri dönebilir. `UseHinting = true` bayrağı, motorun TrueType hinting uygulamasını zorlayarak bu platformlardaki tipik “bulanık” görünümü ortadan kaldırır. + +### Hint tablosu olmayan yazı tipleri + +Bazı modern OpenType yazı tipleri hinting verisini içermez. Bu durumlarda Aspose.HTML otomatik hinting'e geçer; bu da hiç hinting kullanılmadığına göre hâlâ netlik sağlar. + +## Adım 5: Üretim kodu için en iyi uygulamalar + +1. **Tek bir `TextOptions` örneği oluşturup** render çağrıları arasında yeniden kullanın. Böylece nesne tahsis maliyeti azalır. +2. **Hinting'i anti‑aliasing** (`UseAntiAliasing = true`) ile birleştirerek en pürüzsüz çıktıyı elde edin. +3. **Hedef platformlarda test edin** (Windows, Linux, macOS); görsel farklar platforma göre değişebilir. +4. **Render konfigürasyonunu üretim loglarına kaydedin**; beklenmeyen görsel artefaktları tespit etmeye yardımcı olur. +5. **Aspose.HTML'i güncel tutun**. Yeni sürümler ek metin‑render iyileştirmeleri getirebilir. + +## Tam çalışan örnek + +Aşağıda, burada ele alınan tüm konuları gösteren bağımsız bir konsol uygulaması yer alıyor. Kodu yeni bir .NET konsol projesine kopyalayın, Aspose.HTML NuGet paketini ekleyin ve çalıştırın. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Beklenen çıktı** + +Program çalıştırıldığında `hinted_output.png` oluşturulur. “Hinting in action” başlığı ve paragraf metni, eşit çizgi kalınlıkları ve bulanık kenar olmadan net bir şekilde görünür. `UseHinting = true` satırını yorum satırı haline getirirseniz, aynı görüntüde hafif bulanık karakterler göreceksiniz; bu da ayarın faydasını gösterir. + +## Sonuç + +Artık Aspose.HTML'de hinting'i etkinleştirerek metin netliğini nasıl artıracağınızı biliyorsunuz. Süreç, bir `TextOptions` nesnesi oluşturmayı, `UseHinting` (ve isteğe bağlı olarak `UseAntiAliasing`) ayarlamayı ve bu seçenekleri renderlayıcıya eklemeyi içerir. Bu yaklaşım PNG, JPEG, PDF ve diğer çıktı formatları için geçerlidir ve Windows, Linux ve macOS üzerinde tutarlı görsel kalite sağlar. + +Sonraki adımda, **özel yazı tipleri için hinting'i nasıl etkinleştirirsiniz**, **render performansını nasıl optimize edersiniz** veya **Aspose.HTML'de CSS ile metin görünümünü nasıl kontrol edersiniz** gibi ilgili konuları keşfedebilirsiniz. Farklı yazı tipleri ve DPI ayarlarıyla deneyler yaparak hinting'in her senaryoya nasıl uyduğunu görebilirsiniz. + +İyi kodlamalar ve her Aspose.HTML renderlamasında daha keskin metinlerin tadını çıkarın! + + +## Sonraki Öğrenmeniz Gereken Konular + + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanız ve projelerinizde alternatif uygulama yaklaşımlarını keşfetmeniz için adım‑adım açıklamalı tam çalışan kod örnekleri içerir. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/turkish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/turkish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..fee2a3dc8 --- /dev/null +++ b/html/turkish/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,305 @@ +--- +category: general +date: 2026-09-10 +description: C# ile Aspose.Html kullanarak HTML nasıl render edilir. HTML ve CSS işleme, + HTML kaydetme, HTML'yi akışa dönüştürme ve .NET'te HTML belgesi yükleme konularını + öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: tr +lastmod: 2026-09-10 +og_description: Aspose.Html ile C#'ta HTML nasıl render edilir. Bu rehber, HTML ve + CSS'i nasıl işleyebileceğinizi, HTML'yi nasıl kaydedebileceğinizi, HTML'yi akışa + nasıl dönüştürebileceğinizi ve HTML belgesini verimli bir şekilde nasıl yükleyebileceğinizi + gösterir. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Aspose.Html ile C#'de HTML Renderleme – adım adım öğretici +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: C#'ta Aspose.Html ile HTML nasıl render edilir – tam rehber +url: /tr/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile Aspose.Html kullanarak HTML render etme – tam kılavuz + +Eğer bir .NET uygulaması içinde **how to render html** yapmanız gerekiyorsa, bu öğretici size tam iş akışını gösterir. HTML CSS'i nasıl işleyebileceğinizi, HTML'i nasıl kaydedeceğinizi, HTML'i akışa nasıl dönüştüreceğinizi ve Aspose.Html kütüphanesini kullanarak C# içinde bir HTML belgesini nasıl yükleyeceğinizi göreceksiniz. + +Sunucu tarafı bağlamında HTML render etmek genellikle sadece bir dosyayı yüklemekten daha fazlasını gerektirir—görüntüler ve stil sayfaları gibi bağlı kaynakları da yönetmeniz gerekir. Bu kılavuz, belgeyi yüklemekten kaynak yönetimini özelleştirmeye ve sonunda render edilmiş çıktıyı bir bellek akışı olarak çıkarmaya kadar her adımı size gösterir. + +Makalenin sonunda şunları yapabilecek durumdasınız: + +* Diskten veya bir URL'den HTML belgesi yükleyin (`load html document c#`). +* Özel bir `ResourceHandler` sağlayarak **process html css**'i anında işleyin. +* Render edilmiş HTML'i kaydedin ve **convert html to stream**'i daha sonraki işlemler için kullanın. +* Sonucu, herhangi bir .NET ortamında çalışan **how to save html** teknikleriyle kalıcı hale getirin. + +## Önkoşullar + +Başlamadan önce şunların yüklü olduğundan emin olun: + +* .NET 6.0 SDK veya daha yeni bir sürümünün yüklü olduğundan emin olun. +* Visual Studio 2022 (veya .NET 6'yı destekleyen herhangi bir IDE). +* **Aspose.Html**'e bir NuGet referansı (`dotnet add package Aspose.Html`). +* Bilinen bir klasöre yerleştirilmiş bir `input.html` dosyası (örnek `YOUR_DIRECTORY/input.html` kullanır). + +Ek bir üçüncü‑taraf kütüphanesi gerekmemektedir. + +## HTML render etme – adım adım kılavuz + +### Adım 1: C# içinde HTML belgesini yükleyin + +İlk işlem, kaynak işaretlemesini temsil eden bir `HTMLDocument` örneği oluşturmaktır. Bu, Aspose.Html ile **how to render html**'in çekirdeğidir. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Neden önemli:* Belgeyi yüklemek işaretlemeyi ayrıştırır ve iç bir DOM oluşturur; renderlayıcı daha sonra CSS'i uygulamak ve kaynakları çözmek için bunu kullanır. + +### Adım 2: **process html css** için özel bir kaynak işleyici oluşturun + +Renderlayıcı dış kaynaklarla (görüntüler, CSS dosyaları, fontlar) karşılaştığında bir `ResourceHandler`'dan bir akış ister. Özel bir işleyici sağlayarak her kaynağın nasıl alınacağı, dönüştürüleceği veya taklit edileceği üzerinde tam kontrol elde edersiniz. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Neden önemli:* İşleyici, **process html css** mantığının bulunduğu yerdir—örneğin, CSS'i satır içi yapmak, görüntüleri yer tutucularla değiştirmek veya güvenlik filtreleri uygulamak. + +### Adım 3: `HtmlSaveOptions`'ı özel işleyiciyi kullanacak şekilde yapılandırın + +`HtmlSaveOptions`, renderlayıcıya çıktıyı nasıl yazacağını söyler. Az önce oluşturduğunuz `ResourceHandler`'ı atayın, böylece renderlayıcı her dış referans için onu çağırır. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +`EmbedCss` ve `EmbedImages` ayarlarını yapmak, daha sonra **convert html to stream** yapıp kendine yeten bir sonuç elde etmek istediğinizde faydalıdır. + +### Adım 4: Belgeyi kaydedin ve **convert html to stream** + +Şimdi belgeyi renderlayabilir ve sonucu bir `MemoryStream` içinde yakalayabilirsiniz. Bu, çıktıyı fiziksel bir dosya yerine bellek içinde tutmak istediğinizde **how to save html**'in çekirdeğidir. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Neden önemli:* `MemoryStream`, renderlanmış HTML'in esnek bir ikili temsiliğini sağlar; bunu dosya sistemine dokunmadan saklayabilir, iletebilir veya daha fazla işleyebilirsiniz. + +## Yaygın kenar durumlarını ele alma + +| Situation | Recommended approach | +|-----------|----------------------| +| **Eksik CSS veya görüntü dosyaları** | `MyResourceHandler.HandleResource` içinde, açmadan önce `File.Exists` kontrol edin. Dosya yoksa boş bir `MemoryStream` veya bir yer tutucu görüntü döndürün. | +| **Büyük HTML dosyaları (>10 MB)** | `MemoryStream`'in varsayılan tampon boyutunu (`new MemoryStream(capacity)`) artırarak sık yeniden tahsislerden kaçının. | +| **`..` segmentli göreli URL'ler** | Dosya sistemine erişmeden önce tam yolu çözmek için `new Uri(baseUri, info.Uri)` kullanın. | +| **ASP.NET'te iş parçacığı güvenliği** | Her istek için yeni bir `HTMLDocument` ve `MyResourceHandler` örneği oluşturun; örnekleri iş parçacıkları arasında paylaşmaktan kaçının. | +| **Kodlama sorunları** | Kaynak, ASCII dışı karakterler içerdiğinde özellikle UTF‑8 çıktıyı garantilemek için `saveOpts.Encoding = Encoding.UTF8` ayarlayın. | + +## Pro ipucu: aynı işleyiciyi birden çok belge için yeniden kullanın + +Bir toplu işlemde birçok HTML dosyasını işliyorsanız, tek bir `MyResourceHandler` örneğini tutup yalnızca iç arama tablosunu değiştirebilirsiniz. Bu, nesne tahsis yükünü azaltır ve **process html css** aşamasını hızlandırır. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Tam, çalıştırılabilir örnek + +Aşağıda bir konsol uygulamasına yapıştırabileceğiniz tam bir program bulunmaktadır. Bu program **how to render html**, **process html css**, **how to save html**, **convert html to stream** ve **load html document c#**'i tek bir akışta gösterir. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Beklenen çıktı** (kısaltılmıştır): + + + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini öğrenmenize ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmenize yardımcı olmak için adım adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [Aspose.Html ile HTML Kaydetme – Tam C# Kılavuzu](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [Aspose'u C# içinde HTML'yi PNG'ye Render Etmek için Kullanma](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [Aspose'u C# içinde HTML'yi PNG'ye Render Etmek – Adım Adım Kılavuz](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/turkish/net/working-with-html-documents/_index.md b/html/turkish/net/working-with-html-documents/_index.md index 77703dc67..c38920243 100644 --- a/html/turkish/net/working-with-html-documents/_index.md +++ b/html/turkish/net/working-with-html-documents/_index.md @@ -37,13 +37,22 @@ Temelleri kavradığınızda, oluşturma sürecine daha derinlemesine dalacağı Şimdi becerilerinizi bir üst seviyeye taşıyalım. HTML belgelerini düzenlemek web geliştiricileri için yaygın bir görevdir ve Aspose.HTML bu süreci önemli ölçüde basitleştirir. Bu bölümde, belge oluşturma, düzenleme ve biçimlendirmeyi ele alacağız. Web içeriğinizin görünümünü ve işlevselliğini nasıl geliştireceğinizi, onu ilgi çekici ve kullanıcı dostu hale getireceğinizi keşfedeceksiniz. ### [C#'ta HTML Kaydetme – Özel Kaynak İşleyicisi Kullanarak Tam Kılavuz](./how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + ### [CSS ve C# ile Başlığı Kalınlaştırma – Tam Adım Adım Kılavuz](./how-to-bold-heading-with-css-c-complete-step-by-step-guide/) + ### [C# ile HTML Kaydetme – Özel Kaynak İşleyicileri ve ZIP](./how-to-save-html-in-c-custom-resource-handlers-zip/) C# kullanarak HTML dosyalarını özel kaynak işleyicileri ve ZIP arşivleriyle kaydetmeyi öğrenin. ### [Aspose.Html ile HTML Kaydetme – Tam C# Kılavuzu](./how-to-save-html-with-aspose-html-complete-c-guide/) + ### [C#'ta HTML Sıkıştırma – Tam Adım Adım Kılavuz](./how-to-zip-html-in-c-complete-step-by-step-guide/) +### [C# ile Aspose.HTML'de HtmlSaveOptions Kullanımı](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [C# ile Aspose.HTML kullanarak HTML belgesini dosyadan yükleme](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + +C# ile Aspose.HTML kullanarak bir HTML dosyasını nasıl yükleyeceğinizi adım adım öğrenin. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/turkish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/turkish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..706dc6215 --- /dev/null +++ b/html/turkish/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-09-10 +description: Aspose.HTML'i C#'ta kullanarak dosyadan HTML belgesi yüklemeyi öğrenin. + Görüntü renderleme seçenekleri, metin renderleme seçenekleri ve özel bir kaynak + işleyiciyi içerir. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: tr +lastmod: 2026-09-10 +og_description: C#'ta Aspose.HTML kullanarak dosyadan HTML belgesi yükleyin. Bu rehber, + render seçeneklerini, özel bir kaynak işleyicisini ve bugün çalıştırabileceğiniz + tam kodu kapsar. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Aspose.HTML ile dosyadan HTML belgesi yükleme – adım adım C# rehberi +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Aspose.HTML ile C#'ta dosyadan HTML belgesi nasıl yüklenir +url: /tr/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Dosya üzerinden HTML belgesini Aspose.HTML ile C#'ta nasıl yüklenir + +Eğer **dosyadan HTML belgesi yükleme** ve renderını kontrol etme ihtiyacınız varsa, bu öğretici size tamamen çalışır bir çözüm sunar. Görüntü render ayarlarını nasıl yapılandıracağınızı, metin ipuçlamasını (text hinting) nasıl etkinleştireceğinizi ve dış kaynaklar için boş akışlar döndüren özel bir kaynak işleyicisi (resource handler) nasıl sağlayacağınızı göreceksiniz. Kılavuzun sonunda işlenmiş HTML'i bir bellek akışına (memory stream) ya da tercih ettiğiniz başka bir hedefe kaydedebilirsiniz. + +Örnek, .NET için Aspose.HTML kütüphanesini kullanır; bu kütüphane bir tarayıcı motoru olmadan HTML, CSS ve SVG işleme işini basitleştirir. Harici bir araç gerekmez ve kod .NET 6 veya üzeriyle çalışır. Başlamadan önce Aspose.HTML NuGet paketinin yüklü olduğundan emin olun. + +## Önkoşullar + +- .NET 6 SDK (veya Aspose.HTML tarafından desteklenen herhangi bir .NET sürümü) +- Visual Studio 2022 ya da başka bir C# IDE'si +- Aspose.HTML for .NET NuGet paketi (`Install-Package Aspose.HTML`) +- Koddaki referansla ulaşabileceğiniz bir klasörde bulunan `input.html` adlı HTML dosyası + +## Adım 1: HTML belgesini bir dosyadan yükleme + +İlk işlem, kaynak dosyayı okuyacak bir `HTMLDocument` örneği oluşturmaktır. Bu nesne tüm DOM ağacını temsil eder ve sonraki manipülasyonlar için yöntemler sunar. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Neden önemli:** Dosyayı bir `HTMLDocument` içine yüklemek, belgenin yapısına, stillerine ve kaynaklarına tam erişim sağlar; bu da daha sonra render etmenize ya da dönüştürmenize olanak tanır. + +## Adım 2: Görüntü render ayarlarını yapılandırma (Aspose.HTML render) + +Sayfayı daha sonra rasterleştirmeyi planlıyorsanız, görüntü render ayarlarını yapılandırmak görsel kaliteyi artırır. Anti‑aliasing kenarları yumuşatır ve tırtıklı artefaktları azaltır. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**İpucu:** `UseAntialiasing`, rasterleştirilecek PNG veya JPEG gibi vektör grafikler ve metinler için özellikle faydalıdır. + +## Adım 3: Metin ipuçlamasını (text hinting) etkinleştirme (metin render ayarları) + +Metin ipuçlaması, gliflerin piksel ızgaralarına nasıl hizalandığını etkiler; bu da küçük punto metinlerin daha keskin görünmesini sağlar. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Neden önemli:** HTML'yi bir görüntüye dışa aktardığınızda, ipuçlaması bulanık karakterleri azaltır ve platformlar arasında tutarlı tipografi sağlar. + +## Adım 4: Özel bir kaynak işleyicisi oluşturma (custom resource handler) + +HTML içinde fontlar, görseller veya scriptler gibi dış kaynaklar referans alınabilir. Bir `ResourceHandler`, bu kaynakların nasıl elde edileceğini kontrol etmenizi sağlar. Bu örnekte işleyici, her istek için boş bir `MemoryStream` döndürerek dış varlıkları etkili bir şekilde kaldırır. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Ne zaman kullanılmalı:** Bu desen, güvenlik kısıtlamalı ortamlar, birim testleri veya sadece işaretleme (markup) dosyasına dış dosyalar olmadan ihtiyaç duyulduğunda kullanışlıdır. + +## Adım 5: HTML kaydetme seçeneklerini birleştirme (HTML‑den‑görüntü dönüşümü) + +Tüm parçalar—kaynak işleyici, render ayarları ve font stili—bir `HtmlSaveOptions` nesnesine eklenir. Bu nesne Aspose.HTML'e belgeyi nasıl serileştireceğini söyler. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Açıklama:** `WebFontStyle`, eksik olabilecek web fontları için belirli bir stili (ör. **bold**) zorlayabilir. Daha önce yapılandırdığımız `ImageRenderingOptions` ve `TextOptions` burada enjekte edilir, böylece sonraki rasterleştirmelerde etkili olur. + +## Adım 6: Belgeyi bir bellek akışına kaydetme (tam çözüm) + +Son olarak, işlenmiş HTML'i bir `MemoryStream` içine yazın. Buradan akışı bir dosyaya kaydedebilir, ağ üzerinden gönderebilir ya da başka bir API'ye aktarabilirsiniz. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Sonuç:** `output.html` artık `input.html` ile aynı işaretlemeye sahiptir, ancak tüm dış kaynaklar boş akışlarla değiştirilmiş ve render tercihleri kaydetme seçeneklerine yerleştirilmiştir. + +## Tam çalıştırılabilir örnek + +Tüm adımları bir araya getirdiğinizde, kopyalayıp yapıştırıp çalıştırabileceğiniz bağımsız bir program elde edersiniz. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Bu programı çalıştırdığınızda geçerli dizinde `output.html` oluşturulur. Dosyayı bir tarayıcıda açtığınızda orijinal işaretlemenin yüklendiğini, ancak bağlantılı görsellerin, fontların veya scriptlerin bulunmadığını (boş akışlarla değiştirilmiş) göreceksiniz. + +## Yaygın sorular ve uç durumlar + +| Soru | Yanıt | +|----------|--------| +| **Orijinal kaynakları boş akışlar yerine almak istesem ne yapmalıyım?** | `MemoryResourceHandler` yerine diskteki dosyaları okuyan ya da HTTP üzerinden indiren bir işleyici kullanın. | +| **HTML'yi doğrudan PNG veya JPEG'e render edebilir miyim?** | Evet. Aynı `ImageRenderingOptions` ve `TextOptions` ile `ImageRenderer` kullanın, ardından `renderer.Render(page, outputStream, ImageFormat.Png)` çağrısını yapın. | +| **`WebFontStyle.Bold` gerekli mi?** | Hayır. Bu sadece font stilini zorlamak için bir örnek. İhtiyacınız yoksa kaldırabilir ya da `WebFontStyle.Normal` olarak değiştirebilirsiniz. | +| **Bu .NET Core üzerinde çalışır mı?** | Aspose.HTML .NET 5/6/7'yi destekler; aynı kod .NET Core projelerinde de çalışır. | +| **Büyük HTML dosyalarını verimli bir şekilde nasıl işlerim?** | Dosyayı bir `FileStream` yapıcısı ile `HTMLDocument` içine akıtın; böylece tüm dosya belleğe tek seferde yüklenmez. | + +## Sonuç + +Artık Aspose.HTML kullanarak **dosyadan HTML belgesi yükleme**, **görsel render ayarları** ve **metin render ayarları** yapılandırma ve dış varlıkları kontrol etmek için **özel bir kaynak işleyicisi** uygulama konusunda bilgi sahibisiniz. Tam örnek, işlenmiş HTML'i bir bellek akışına kaydetmeyi gösterir; bu akışı ihtiyacınıza göre kalıcı hale getirebilir ya da iletebilirsiniz. + +Sonraki adımda, `HtmlSaveOptions` yerine bir `ImageRenderer` kullanarak **HTML‑den‑görüntü dönüşümünü** keşfedebilir veya **Aspose.HTML render** özellikleri (CSS medya sorguları, SVG desteği, PDF dışa aktarım vb.) ile zengin belge‑işleme boru hatları oluşturabilirsiniz. + +İyi kodlamalar! + +## Sonra Ne Öğrenmelisiniz? + + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan ve ilgili konuları derinlemesine ele alan örnekler içerir. Her kaynak, adım adım açıklamalarla tam çalışan kod örnekleri sunar; böylece API özelliklerini daha iyi kavrayabilir ve projelerinizde alternatif uygulama yaklaşımlarını keşfedebilirsiniz. + +- [Load HTML Using a Remote Server in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Load HTML Using URL in .NET with Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [How to Save HTML in C# – Complete Guide Using a Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/turkish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/turkish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..24cb9d553 --- /dev/null +++ b/html/turkish/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: C#'ta HtmlSaveOptions'ı kullanarak web‑font stillerini kontrol etmeyi + ve Aspose.HTML ile HTML dosyalarını kaydetmeyi öğrenin. Tam kod örneği ve pratik + ipuçları dahil. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: tr +lastmod: 2026-09-10 +og_description: Aspose.HTML ile HTML kaydederken kalın ve italik web‑font stillerini + etkinleştirmek için C#'de HtmlSaveOptions nasıl kullanılır. Tam örneği ve en iyi + uygulama ipuçlarını izleyin. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Aspose.HTML ile C#'ta HtmlSaveOptions Nasıl Kullanılır – Adım Adım Rehber +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Aspose.HTML ile C#'da HtmlSaveOptions Nasıl Kullanılır +url: /tr/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile Aspose.HTML'de HtmlSaveOptions Nasıl Kullanılır + +Aspose.HTML'nin bir HTML belgesini nasıl kaydettiğini kontrol etmeniz gerekiyorsa, **HtmlSaveOptions'ı nasıl kullanacağınızı öğrenmek çok önemlidir**. Bu öğretici, bir belgeyi kaydederken kalın ve italik web‑font stillerini etkinleştirmek için HtmlSaveOptions'ı adım adım nasıl kullanacağınızı gösterir. + +Aspose HTML kütüphanesi, HTML içeriğini yükleme, manipüle etme ve dışa aktarma için zengin bir API sağlar. Bu rehberin sonunda şunları yapabilecek durumdasınız: + +* Mevcut bir HTML dosyasını bir `HTMLDocument` içine yükleyin. +* `HtmlSaveOptions`'ı belirli `WebFontStyle` bayraklarını uygulayacak şekilde yapılandırın. +* Değiştirilmiş belgeyi yeni bir konuma ya da bir akışa kaydedin. +* Diğer font stilleri, özel CSS ve hata yönetimi için çözümü genişletin. + +## Önkoşullar + +Başlamadan önce, aşağıdakilere sahip olduğunuzdan emin olun: + +* .NET 6.0 veya daha yeni bir sürümünün yüklü olması. +* **Aspose.HTML for .NET** için geçerli bir lisans (bu örnek için ücretsiz deneme sürümü de çalışır). +* Kodu derlemek ve çalıştırmak için Visual Studio 2022 (veya herhangi bir C# IDE). + +`Aspose.HTML` dışındaki ek NuGet paketlerine gerek yok. + +## Adım 1: Projeyi kurun ve ad alanlarını içe aktarın + +Yeni bir **Console App** projesi oluşturun ve Aspose.HTML NuGet paketini ekleyin: + +```bash +dotnet add package Aspose.HTML +``` + +Ardından, `Program.cs` dosyasının en üstüne gerekli ad alanlarını içe aktarın: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Bu ad alanları, öğretici boyunca kullanacağınız `HTMLDocument`, `HtmlSaveOptions` ve `WebFontStyle` türlerini ortaya çıkarır. + +## Adım 2: Kaynak HTML belgesini yükleyin + +İlk işlem, işlemek istediğiniz HTML'i okumaktır. `"YOUR_DIRECTORY/input.html"` ifadesini dosyanızın gerçek yolu ile değiştirin. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` işaretlemeyi ayrıştırır, bir DOM ağacı oluşturur ve manipülasyona hazır hâle getirir. Dosya mevcut değilse bir istisna fırlatılır, bu yüzden üretim kodunda bu çağrıyı bir try‑catch bloğuna sarmak isteyebilirsiniz. + +## Adım 3: HtmlSaveOptions'ı oluşturun ve yapılandırın + +`HtmlSaveOptions` kaydetme sürecini ince ayar yapmanızı sağlar. Kalın ve italik web‑font stillerini etkinleştirmek için ilgili `WebFontStyle` bayraklarını bit düzeyinde OR operatörü (`|`) ile birleştirin. + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Neden WebFontStyle yapılandırılır? + +Bir HTML belgesini dışa aktardığınızda, Aspose.HTML orijinal stil ile eşleşen web fontlarını gömebilir. `WebFontStyle`'ı ayarlayarak dışa aktarıcıya hangi font varyantlarının dahil edileceğini söylersiniz. Bu, yalnızca belirli stillere ihtiyacınız olduğunda son dosya boyutunu azaltır ve oluşturulan çıktının kaynağa eşleşmesini garanti eder. + +#### Yaygın varyasyonlar + +| İstenen stil | Karşılık gelen `WebFontStyle` bayrağı | +|--------------|--------------------------------------| +| Normal (regular) | `WebFontStyle.Regular` | +| Bold | `WebFontStyle.Bold` | +| Italic | `WebFontStyle.Italic` | +| Bold + Italic | `WebFontStyle.Bold | WebFontStyle.Italic` | +| All variants | `WebFontStyle.All` | + +Senaryonuza uyan herhangi bir kombinasyonu birleştirebilirsiniz. + +## Adım 4: Belgeyi yapılandırılmış seçeneklerle kaydedin + +Şimdi belgeyi yeni bir dosyaya yazın. `Save` yöntemi hedef yolu ve hazırladığınız `HtmlSaveOptions` örneğini kabul eder. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Eğer bir bellek akışına (örneğin dosyayı HTTP üzerinden göndermek için) yazmanız gerekiyorsa, bir `Stream` nesnesini kabul eden aşırı yüklemeyi kullanın: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Adım 5: Sonucu doğrulayın + +`output.html` dosyasını bir tarayıcıda açın ya da bir metin düzenleyiciyle inceleyin. ` + + +
+ +"; +``` + +HTML định nghĩa một hình vector đơn giản, sẽ hưởng lợi từ khử răng cưa khi raster hoá. + +## Bước 2: Khởi tạo engine render + +Aspose.HTML sử dụng một `HtmlRenderer` kết hợp với `ImageRenderingOptions`. Đây là nơi bạn **cách bật khử răng cưa** cho bitmap cuối cùng. + +```csharp +// Load the HTML into a Document object +using var document = new HTMLDocument(htmlContent, "."); + +// Prepare image rendering options +var imageOptions = new ImageRenderingOptions +{ + // Primary setting for smooth edges + UseAntialiasing = true, + + // Optional: increase DPI for higher pixel density + // This improves perceived quality on high‑resolution screens + DpiX = 300, + DpiY = 300, + + // Choose PNG for lossless output + ImageFormat = ImageFormat.Png +}; +``` + +**Tại sao `UseAntialiasing = true` quan trọng**: Engine render vẽ các hình vector, văn bản và gradient với độ chính xác sub‑pixel. Bật khử răng cưa yêu cầu rasterizer pha trộn các pixel biên với các pixel lân cận, loại bỏ các đường răng cưa xuất hiện khi `UseAntialiasing` để mặc định `false`. Đây là cốt lõi của **render ảnh chất lượng cao**. + +## Bước 3: Render HTML thành ảnh + +Sau khi cấu hình các tùy chọn, gọi phương thức `RenderToImage`. Phương thức trả về một đối tượng `Image` mà bạn có thể lưu ra đĩa hoặc stream trực tiếp tới phản hồi. + +```csharp +// Render the document to an image using the options above +using var image = document.RenderToImage(imageOptions); + +// Save the image to a file +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); +image.Save(outputPath); +``` + +Sau khi thực thi, `output.png` sẽ chứa một vòng tròn mượt mà, đã được khử răng cưa. Mở file trong bất kỳ trình xem ảnh nào để kiểm tra kết quả. + +![cách bật khử răng cưa trong việc render Aspose.HTML](/images/antialiasing-example.png){alt="cách bật khử răng cưa trong việc render Aspose.HTML"} + +## Bước 4: Xác minh đầu ra chất lượng cao (cách render ảnh html) + +Bạn có thể xác nhận chương trình các kích thước ảnh và DPI để đảm bảo việc render đáp ứng mong đợi. + +```csharp +using System.Drawing; + +// Load the saved PNG for inspection +using var bitmap = new Bitmap(outputPath); +Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); +Console.WriteLine($"Horizontal DPI: {bitmap.HorizontalResolution}, Vertical DPI: {bitmap.VerticalResolution}"); +``` + +Kết quả console điển hình: + +``` +Width: 240px, Height: 240px +Horizontal DPI: 300, Vertical DPI: 300 +``` + +DPI tăng lên kết hợp với khử răng cưa tạo ra kết quả sạch sẽ ngay cả khi ảnh được phóng to. Điều này minh họa **cách render ảnh html** với chất lượng chuyên nghiệp. + +## Các biến thể thường gặp và trường hợp đặc biệt + +| Tình huống | Điều chỉnh đề xuất | +|-----------|-------------------| +| Render các trang rất lớn (ví dụ: ứng dụng web toàn màn hình) | Tăng `ImageRenderingOptions.Width` / `Height` hoặc đặt `Scale` để kiểm soát việc sử dụng bộ nhớ. | +| Cần nền trong suốt | Đặt `imageOptions.BackgroundColor = Color.Transparent;` | +| Nhắm tới JPEG để giảm kích thước file | Thay `ImageFormat` thành `ImageFormat.Jpeg` và điều chỉnh `Quality` (0‑100). | +| Chạy trong container Linux không có GUI | Aspose.HTML hoàn toàn headless; không cần phụ thuộc thêm. | +| Bạn phải tắt khử răng cưa cho kiểm thử UI pixel‑perfect | Đặt `UseAntialiasing = false;` – các cạnh sẽ sắc nét nhưng có thể xuất hiện răng cưa. | + +### Mẹo chuyên nghiệp + +Khi tạo một loạt ảnh, hãy tái sử dụng một đối tượng `HTMLDocument` duy nhất và chỉ thay đổi thuộc tính `Content` giữa các lần render. Điều này giảm tải việc phân tích cùng một HTML lặp lại và cải thiện thông lượng. + +## Danh sách mã nguồn đầy đủ + +Dưới đây là chương trình hoàn chỉnh mà bạn có thể sao chép vào một dự án console‑app mới và chạy ngay. + +```csharp +using System; +using System.IO; +using System.Drawing; +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +class Program +{ + static void Main() + { + // 1️⃣ HTML source – a simple red circle + const string htmlContent = @" + + + + + + +
+ +"; + + // 2️⃣ Load HTML into a Document object + using var document = new HTMLDocument(htmlContent, "."); + + // 3️⃣ Configure high quality image rendering + var imageOptions = new ImageRenderingOptions + { + UseAntialiasing = true, // ✅ how to enable antialiasing + DpiX = 300, + DpiY = 300, + ImageFormat = ImageFormat.Png + }; + + // 4️⃣ Render to an image + using var image = document.RenderToImage(imageOptions); + + // 5️⃣ Save the result + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.png"); + image.Save(outputPath); + Console.WriteLine($"Image saved to {outputPath}"); + + // 6️⃣ Verify dimensions and DPI (how to render html image) + using var bitmap = new Bitmap(outputPath); + Console.WriteLine($"Width: {bitmap.Width}px, Height: {bitmap.Height}px"); + Console.Write + + +## Bạn Nên Học Gì Tiếp Theo? + + +Các hướng dẫn sau đây đề cập đến các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoàn chỉnh với giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Cách render html thành ảnh với C# – Hướng Dẫn Toàn Diện](/html/english/net/rendering-html-documents/how-to-render-html-to-an-image-with-c-complete-guide/) +- [Tutorial HTML sang Image – Render HTML thành PNG trong C#](/html/english/net/generate-jpg-and-png-images/html-to-image-tutorial-render-html-to-png-in-c/) +- [Cách Sử Dụng Aspose Để Render HTML thành PNG – Hướng Dẫn Từng Bước](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/vietnamese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md b/html/vietnamese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md new file mode 100644 index 000000000..aefe50d5a --- /dev/null +++ b/html/vietnamese/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/_index.md @@ -0,0 +1,297 @@ +--- +category: general +date: 2026-09-10 +description: Cải thiện độ rõ ràng của văn bản khi hiển thị HTML bằng Aspose.HTML bằng + cách bật tính năng hinting. Hướng dẫn này chỉ cách bật hinting và tại sao nó quan + trọng. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- improve text clarity +- how to enable hinting +- Aspose.HTML rendering +- text hinting C# +- high‑DPI text rendering +language: vi +lastmod: 2026-09-10 +og_description: Cải thiện độ rõ ràng của văn bản trong Aspose.HTML bằng cách học cách + bật hinting. Thực hiện theo hướng dẫn từng bước để có văn bản rõ ràng hơn trên mọi + nền tảng. +og_image_alt: Screenshot showing sharper text after hinting is enabled to improve + text clarity +og_title: Cải thiện độ rõ nét của văn bản trong Aspose.HTML – bật hinting để hiển + thị sắc nét hơn +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + headline: How to improve text clarity in Aspose.HTML with hinting + type: TechArticle +- description: Improve text clarity when rendering HTML with Aspose.HTML by enabling + hinting. This guide shows how to enable hinting and why it matters. + name: How to improve text clarity in Aspose.HTML with hinting + steps: + - name: 'Pro tip: Combine hinting with anti‑aliasing' + text: 'If you also want smoother edges, you can enable anti‑aliasing alongside + hinting:' + - name: Rendering to PDF instead of PNG + text: 'If your target is a PDF, replace the `ImageDevice` with a `PdfDevice`. + The same `TextOptions` object works without modification:' + - name: High‑DPI displays + text: On displays with scaling factors (e.g., 150 % or 200 %), you might want + to increase the device size proportionally to retain visual quality. Hinting + still applies, and the result stays sharp. + - name: Linux or macOS environments + text: On Linux, the default rendering engine may fall back to a bitmap font renderer + that ignores hinting unless you enable it explicitly. The `UseHinting = true` + flag forces the engine to apply TrueType hinting, eliminating the typical “blurry” + look on those platforms. + - name: Fonts without hinting tables + text: Some modern OpenType fonts omit hinting data. In those cases, Aspose.HTML + falls back to auto‑hinting, which still improves clarity compared to no hinting + at all. + type: HowTo +tags: +- Aspose.HTML +- C# +- Rendering +- Text clarity +title: Cách cải thiện độ rõ nét của văn bản trong Aspose.HTML bằng hinting +url: /vi/net/rendering-html-documents/how-to-improve-text-clarity-in-aspose-html-with-hinting/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách cải thiện độ rõ nét của văn bản trong Aspose.HTML bằng hinting + +Nếu bạn cần cải thiện độ rõ nét của văn bản khi render HTML bằng Aspose.HTML, hướng dẫn này sẽ cung cấp cho bạn một giải pháp hoàn chỉnh. Bằng cách bật hinting, bạn sẽ có các glyph sắc nét hơn, đặc biệt trên các nền tảng không phải Windows, nơi việc render mặc định có thể trông mờ. + +Trong tutorial này, bạn sẽ học cách bật hinting, tại sao nó quan trọng đối với độ rõ nét của văn bản, và cách tích hợp thiết lập này vào quy trình làm việc tiêu chuẩn của Aspose.HTML. Không cần tài liệu bên ngoài — mọi thứ bạn cần đều có trong các bước dưới đây. + +## Yêu cầu trước + +Trước khi bắt đầu, hãy chắc chắn rằng bạn có: + +* .NET 6.0 hoặc mới hơn (mã cũng hoạt động với .NET Framework 4.7+) +* Bản sao có giấy phép của **Aspose.HTML for .NET** (bản dùng thử miễn phí đủ để thử nghiệm) +* Kiến thức cơ bản về C# và Visual Studio hoặc bất kỳ IDE nào bạn ưa thích + +Các yêu cầu này là tối thiểu; cùng một cách tiếp cận cũng hoạt động trong ứng dụng console, dịch vụ ASP.NET Core, hoặc ứng dụng desktop. + +## Tại sao bật hinting lại cải thiện độ rõ nét của văn bản + +Hinting là quá trình điều chỉnh đường viền của mỗi glyph để căn chỉnh với lưới pixel của thiết bị hiển thị. Nếu không có hinting, đặc biệt trên màn hình độ phân giải thấp hoặc DPI cao, các ký tự có thể trông mờ hoặc không đồng đều. Bật hinting yêu cầu engine render tự động áp dụng các điều chỉnh này, mang lại: + +* Độ dày nét đồng nhất trên các ký tự +* Độ đọc tốt hơn trên Linux, macOS và các phiên bản Windows cũ +* Giao diện chuyên nghiệp cho PDF, ảnh chụp màn hình hoặc bản preview trên màn hình + +Aspose.HTML cung cấp hành vi này thông qua thuộc tính **TextOptions.UseHinting**, mặc định là `false` để duy trì tính tương thích ngược. + +## Bước 1: Tạo một thể hiện `TextOptions` + +Bước đầu tiên là khởi tạo lớp **TextOptions**. Đối tượng này nhóm tất cả các thiết lập liên quan tới văn bản, giúp bạn dễ dàng truyền chúng vào pipeline render. + +```csharp +using Aspose.Html.Drawing; + +// Create a TextOptions instance to control text rendering +TextOptions textOptions = new TextOptions(); +``` + +Việc tạo đối tượng không thay đổi quá trình render ngay lập tức; nó chỉ chuẩn bị một container cho các tùy chọn bạn sẽ thiết lập sau. + +## Bước 2: Bật hinting để cải thiện độ rõ nét của văn bản + +Đặt thuộc tính **UseHinting** thành `true`. Dòng lệnh duy nhất này kích hoạt thuật toán hinting cho mọi đoạn văn bản được render với các tùy chọn đã cấu hình. + +```csharp +// Enable hinting for clearer text, especially on non‑Windows platforms +textOptions.UseHinting = true; +``` + +Khi `UseHinting` là `true`, Aspose.HTML tự động áp dụng các điều chỉnh sub‑pixel cho mỗi glyph. Hiệu ứng này đặc biệt rõ rệt với các phông chữ có chi tiết mịn, chẳng hạn như serif hoặc văn bản kích thước nhỏ. + +### Mẹo chuyên nghiệp: Kết hợp hinting với anti‑aliasing + +Nếu bạn cũng muốn các cạnh mượt hơn, có thể bật anti‑aliasing cùng lúc với hinting: + +```csharp +textOptions.UseAntiAliasing = true; // optional but recommended +``` + +Cả hai thiết lập cùng nhau mang lại độ trung thực hình ảnh tốt nhất trên một loạt thiết bị. + +## Bước 3: Gắn `TextOptions` vào quá trình render + +Bạn cần truyền `TextOptions` đã cấu hình cho **HtmlRenderer** (hoặc bất kỳ lớp render nào bạn đang sử dụng). Dưới đây là một ví dụ tối thiểu tải một chuỗi HTML, áp dụng các tùy chọn, và ghi kết quả ra file PNG. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering.Image; + +// Sample HTML content +string html = "

Hello, world!

This text benefits from hinting.

"; + +// Load HTML into a Document object +using (var document = new HTMLDocument(html)) +{ + // Create an ImageDevice with default size + using (var device = new ImageDevice(800, 600)) + { + // Create a renderer and assign the TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; // <-- attach options here + + // Render the document + renderer.Render(document); + renderer.Dispose(); + + // Save the rendered image + device.Save("output.png"); + } +} +``` + +**Giải thích các dòng quan trọng** + +* `HTMLDocument` phân tích cú pháp HTML. +* `ImageDevice` xác định kích thước đầu ra (800 × 600 pixel trong ví dụ này). +* `HtmlRenderer` thực hiện việc render; gán `textOptions` cho `renderer.Options.TextOptions` đảm bảo hinting được áp dụng. +* `device.Save("output.png")` ghi ảnh cuối cùng ra đĩa. + +Chạy đoạn mã này sẽ tạo ra `output.png` trong đó tiêu đề và đoạn văn xuất hiện sắc nét, ngay cả trên màn hình 96 dpi. + +## Bước 4: Kiểm tra kết quả + +Mở ảnh đã tạo bằng bất kỳ trình xem nào. So sánh với ảnh được render **không** có hinting (đặt `UseHinting = false`). Bạn sẽ nhận thấy: + +* Các cạnh ký tự “H”, “e”, “l”, “o” sắc nét hơn +* Độ dày nét đồng đều hơn trong toàn bộ đoạn văn +* Giảm hiện tượng ghosting trên các đường chéo của ký tự + +Nếu sự khác biệt quá nhẹ trên màn hình của bạn, hãy phóng to hoặc in ảnh; cải thiện sẽ rõ ràng hơn ở mức phóng đại cao. + +## Các biến thể phổ biến và trường hợp đặc biệt + +### Render ra PDF thay vì PNG + +Nếu mục tiêu là PDF, thay `ImageDevice` bằng `PdfDevice`. Cùng một đối tượng `TextOptions` hoạt động mà không cần thay đổi: + +```csharp +using Aspose.Html.Rendering.Pdf; + +// ... + +using (var pdfDevice = new PdfDevice("output.pdf")) +{ + var renderer = new HtmlRenderer(pdfDevice); + renderer.Options.TextOptions = textOptions; + renderer.Render(document); +} +``` + +### Màn hình DPI cao + +Trên các màn hình có hệ số phóng đại (ví dụ 150 % hoặc 200 %), bạn có thể muốn tăng kích thước device tương ứng để duy trì chất lượng hình ảnh. Hinting vẫn được áp dụng và kết quả vẫn giữ độ sắc nét. + +### Môi trường Linux hoặc macOS + +Trên Linux, engine render mặc định có thể quay lại sử dụng renderer phông bitmap không quan tâm tới hinting trừ khi bạn bật nó một cách rõ ràng. Cờ `UseHinting = true` buộc engine áp dụng hinting TrueType, loại bỏ hiện tượng “mờ” thường gặp trên các nền tảng này. + +### Phông chữ không có bảng hinting + +Một số phông OpenType hiện đại không chứa dữ liệu hinting. Trong những trường hợp này, Aspose.HTML sẽ tự động thực hiện auto‑hinting, vẫn cải thiện độ rõ nét so với việc không có hinting nào cả. + +## Bước 5: Các thực tiễn tốt nhất cho mã sản xuất + +1. **Tạo một thể hiện `TextOptions` duy nhất** và tái sử dụng nó cho các lần render. Điều này giảm tải việc cấp phát đối tượng. +2. **Kết hợp hinting với anti‑aliasing** (`UseAntiAliasing = true`) để có đầu ra mượt nhất. +3. **Kiểm thử trên các nền tảng mục tiêu** (Windows, Linux, macOS) vì sự khác biệt về hình ảnh có thể thay đổi. +4. **Ghi lại cấu hình render** trong log sản xuất; giúp khắc phục các hiện tượng hình ảnh không mong muốn. +5. **Giữ Aspose.HTML luôn cập nhật**. Các phiên bản mới có thể bổ sung các cải tiến render văn bản. + +## Ví dụ hoàn chỉnh + +Dưới đây là một ứng dụng console tự chứa, minh họa toàn bộ những gì đã thảo luận. Sao chép mã vào một dự án console .NET mới, thêm gói NuGet Aspose.HTML, và chạy nó. + +```csharp +// Program.cs +using System; +using Aspose.Html; +using Aspose.Html.Drawing; +using Aspose.Html.Rendering.Image; + +namespace TextClarityDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create TextOptions and enable hinting + TextOptions textOptions = new TextOptions + { + UseHinting = true, + UseAntiAliasing = true // optional but recommended + }; + + // 2️⃣ Sample HTML content + string html = @" + + + +

Hinting in action

+

Notice how the letters are sharper.

+ + "; + + // 3️⃣ Load the HTML document + using (var document = new HTMLDocument(html)) + { + // 4️⃣ Set up an ImageDevice for PNG output + using (var device = new ImageDevice(800, 600)) + { + // 5️⃣ Create the renderer and assign TextOptions + var renderer = new HtmlRenderer(device); + renderer.Options.TextOptions = textOptions; + + // 6️⃣ Render and save + renderer.Render(document); + device.Save("hinted_output.png"); + + Console.WriteLine("Image saved as hinted_output.png"); + } + } + } + } +} +``` + +**Kết quả mong đợi** + +Chạy chương trình sẽ tạo `hinted_output.png`. Tiêu đề “Hinting in action” và đoạn văn bản sẽ xuất hiện sắc nét, với độ dày nét đồng đều và không có cạnh mờ. Nếu bạn bình luận `UseHinting = true`, cùng một ảnh sẽ hiển thị các ký tự hơi mờ, minh họa lợi ích của thiết lập này. + +## Kết luận + +Bây giờ bạn đã biết cách cải thiện độ rõ nét của văn bản trong Aspose.HTML bằng cách bật hinting. Quy trình bao gồm tạo đối tượng `TextOptions`, đặt `UseHinting` (và tùy chọn `UseAntiAliasing`), và gắn các tùy chọn này vào renderer. Cách tiếp cận này hoạt động cho PNG, JPEG, PDF và các định dạng đầu ra khác, mang lại chất lượng hình ảnh nhất quán trên Windows, Linux và macOS. + +Tiếp theo, bạn có thể khám phá các chủ đề liên quan như **cách bật hinting cho phông chữ tùy chỉnh**, **tối ưu hiệu năng render**, hoặc **sử dụng CSS để kiểm soát giao diện văn bản** trong Aspose.HTML. Thử nghiệm với các phông chữ và cài đặt DPI khác nhau để xem hinting thích nghi như thế nào với mỗi kịch bản. + +Chúc lập trình vui vẻ, và tận hưởng văn bản sắc nét trong mọi render của Aspose.HTML! + +## Bạn nên học gì tiếp theo? + +Các tutorial sau đây đề cập đến các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật đã trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm mã mẫu đầy đủ với các giải thích từng bước, giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [How to Render HTML to PNG with Aspose – Complete Guide](/html/english/net/rendering-html-documents/how-to-render-html-to-png-with-aspose-complete-guide/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) +- [Create HTML Document with Styled Text and Export to PDF – Full Guide](/html/english/net/html-extensions-and-conversions/create-html-document-with-styled-text-and-export-to-pdf-full/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/vietnamese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md b/html/vietnamese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md new file mode 100644 index 000000000..ef8e32f10 --- /dev/null +++ b/html/vietnamese/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/_index.md @@ -0,0 +1,303 @@ +--- +category: general +date: 2026-09-10 +description: Cách hiển thị HTML trong C# bằng Aspose.Html. Tìm hiểu cách xử lý HTML + CSS, lưu HTML, chuyển đổi HTML sang stream và tải tài liệu HTML trong .NET. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to render html +- process html css +- how to save html +- convert html to stream +- load html document c# +language: vi +lastmod: 2026-09-10 +og_description: Cách render HTML trong C# với Aspose.Html. Hướng dẫn này chỉ cho bạn + cách xử lý HTML CSS, lưu HTML, chuyển đổi HTML sang stream và tải tài liệu HTML + một cách hiệu quả. +og_image_alt: Diagram showing how to render HTML with Aspose.Html in C# +og_title: Kết xuất HTML trong C# với Aspose.Html – hướng dẫn từng bước +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + headline: How to render HTML in C# with Aspose.Html – full guide + type: TechArticle +- description: How to render HTML in C# using Aspose.Html. Learn to process HTML CSS, + save HTML, convert HTML to stream, and load HTML document in .NET. + name: How to render HTML in C# with Aspose.Html – full guide + steps: + - name: Load the HTML document in C# + text: The first operation is to create an `HTMLDocument` instance that represents + the source markup. This is the core of **how to render html** with Aspose.Html. + - name: Create a custom resource handler to **process html css** + text: When the renderer encounters external resources (images, CSS files, fonts), + it asks a `ResourceHandler` for a stream. By providing a custom handler you + gain full control over how each resource is fetched, transformed, or stubbed. + - name: Configure `HtmlSaveOptions` to use the custom handler + text: '`HtmlSaveOptions` tells the renderer how to write the output. Assign the + `ResourceHandler` you just created so that the renderer calls it for every external + reference.' + - name: Save the document and **convert html to stream** + text: Now you can render the document and capture the result in a `MemoryStream`. + This is the core of **how to save html** when you want the output in memory + rather than a physical file. + type: HowTo +tags: +- Aspose.Html +- C# +- HTML rendering +title: Cách render HTML trong C# với Aspose.Html – hướng dẫn đầy đủ +url: /vi/net/rendering-html-documents/how-to-render-html-in-c-with-aspose-html-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách render HTML trong C# với Aspose.Html – hướng dẫn đầy đủ + +Nếu bạn cần **cách render html** trong một ứng dụng .NET, hướng dẫn này sẽ cho bạn thấy quy trình hoàn chỉnh. Bạn sẽ thấy cách xử lý HTML CSS, cách lưu HTML, chuyển HTML sang stream, và tải một tài liệu HTML trong C# bằng thư viện Aspose.Html. + +Render HTML trong môi trường server‑side thường đòi hỏi hơn chỉ việc tải một tệp—bạn còn phải xử lý các tài nguyên liên kết như hình ảnh và stylesheet. Hướng dẫn này sẽ dẫn bạn qua từng bước, từ tải tài liệu đến tùy chỉnh việc xử lý tài nguyên và cuối cùng trích xuất kết quả đã render dưới dạng memory stream. + +Khi kết thúc bài viết, bạn sẽ có thể: + +* Tải một tài liệu HTML từ đĩa hoặc URL (`load html document c#`). +* Cung cấp một `ResourceHandler` tùy chỉnh để **process html css** ngay trong quá trình. +* Lưu HTML đã render và **convert html to stream** để xử lý tiếp. +* Lưu kết quả bằng các kỹ thuật **how to save html** hoạt động trong bất kỳ môi trường .NET nào. + +## Prerequisites + +Trước khi bắt đầu, hãy chắc chắn rằng bạn đã có: + +* .NET 6.0 SDK hoặc phiên bản mới hơn được cài đặt. +* Visual Studio 2022 (hoặc bất kỳ IDE nào hỗ trợ .NET 6). +* Tham chiếu NuGet tới **Aspose.Html** (`dotnet add package Aspose.Html`). +* Một tệp `input.html` được đặt trong thư mục đã biết (ví dụ sử dụng `YOUR_DIRECTORY/input.html`). + +Không cần thư viện bên thứ ba nào khác. + +## How to render HTML – step‑by‑step guide + +### Step 1: Load the HTML document in C# + +Hoạt động đầu tiên là tạo một thể hiện `HTMLDocument` đại diện cho markup nguồn. Đây là lõi của **how to render html** với Aspose.Html. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System.IO; + +// Replace with the actual path to your HTML file +string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + +// Load the HTML document – this is the “load html document c#” step +HTMLDocument doc = new HTMLDocument(htmlPath); +``` + +*Lý do quan trọng:* Việc tải tài liệu sẽ phân tích markup và xây dựng một DOM nội bộ, mà renderer sẽ dùng sau này để áp dụng CSS và giải quyết các tài nguyên. + +### Step 2: Create a custom resource handler to **process html css** + +Khi renderer gặp các tài nguyên bên ngoài (hình ảnh, tệp CSS, phông chữ), nó sẽ yêu cầu một `ResourceHandler` trả về stream. Bằng cách cung cấp một handler tùy chỉnh, bạn có toàn quyền kiểm soát cách mỗi tài nguyên được lấy, chuyển đổi, hoặc thay thế. + +```csharp +// Custom handler that supplies a stream for every requested resource +class MyResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) + { + // Example: log the requested URI for debugging + System.Console.WriteLine($"Requested resource: {info.Uri}"); + + // If you have a physical file, you could open it here: + // return File.OpenRead(Path.Combine("assets", Path.GetFileName(info.Uri))); + + // For this tutorial we return an empty stream to keep the example simple + return new MemoryStream(); + } +} + +// Instantiate the handler +MyResourceHandler handler = new MyResourceHandler(); +``` + +*Lý do quan trọng:* Handler là nơi bạn thực hiện logic **process html css**—ví dụ, nhúng CSS inline, thay thế hình ảnh bằng placeholder, hoặc áp dụng bộ lọc bảo mật. + +### Step 3: Configure `HtmlSaveOptions` to use the custom handler + +`HtmlSaveOptions` chỉ cho renderer cách ghi đầu ra. Gán `ResourceHandler` mà bạn vừa tạo để renderer gọi nó cho mọi tham chiếu bên ngoài. + +```csharp +HtmlSaveOptions saveOpts = new HtmlSaveOptions +{ + // Attach the custom resource handler + ResourceHandler = handler, + + // Optional: embed CSS directly into the output HTML + EmbedCss = true, + + // Optional: embed images as base‑64 data URIs + EmbedImages = true +}; +``` + +Cài đặt `EmbedCss` và `EmbedImages` hữu ích khi bạn sau này **convert html to stream** và cần một kết quả tự chứa. + +### Step 4: Save the document and **convert html to stream** + +Bây giờ bạn có thể render tài liệu và nắm bắt kết quả trong một `MemoryStream`. Đây là lõi của **how to save html** khi bạn muốn đầu ra ở dạng bộ nhớ thay vì tệp vật lý. + +```csharp +using (MemoryStream outStream = new MemoryStream()) +{ + // Save the HTML document (including embedded resources) into the stream + doc.Save(outStream, saveOpts); + + // Reset the stream position so it can be read from the beginning + outStream.Position = 0; + + // For demonstration, write the stream contents to the console as a string + using (StreamReader reader = new StreamReader(outStream)) + { + string renderedHtml = reader.ReadToEnd(); + System.Console.WriteLine("=== Rendered HTML ==="); + System.Console.WriteLine(renderedHtml); + } + + // At this point you have **convert html to stream** output ready for: + // * Sending as an HTTP response + // * Storing in a database + // * Passing to another API +} +``` + +*Lý do quan trọng:* `MemoryStream` cung cấp cho bạn một biểu diễn nhị phân linh hoạt của HTML đã render, bạn có thể lưu, truyền hoặc thao tác thêm mà không cần chạm tới hệ thống tệp. + +## Handling common edge cases + +| Situation | Recommended approach | +|-----------|----------------------| +| **Missing CSS or image files** | Trong `MyResourceHandler.HandleResource`, kiểm tra `File.Exists` trước khi mở. Trả về một `MemoryStream` rỗng hoặc hình placeholder nếu tệp không tồn tại. | +| **Large HTML files (>10 MB)** | Tăng kích thước buffer mặc định của `MemoryStream` (`new MemoryStream(capacity)`) để tránh việc tái cấp phát thường xuyên. | +| **Relative URLs with `..` segments** | Sử dụng `new Uri(baseUri, info.Uri)` để giải quyết đường dẫn đầy đủ trước khi truy cập hệ thống tệp. | +| **Thread‑safety in ASP.NET** | Tạo một `HTMLDocument` và `MyResourceHandler` mới cho mỗi yêu cầu; tránh chia sẻ các thể hiện giữa các luồng. | +| **Encoding issues** | Đặt `saveOpts.Encoding = Encoding.UTF8` để đảm bảo đầu ra UTF‑8, đặc biệt khi nguồn chứa ký tự không phải ASCII. | + +## Pro tip: reuse the same handler for multiple documents + +Nếu bạn xử lý nhiều tệp HTML trong một batch, có thể giữ một thể hiện `MyResourceHandler` duy nhất và chỉ thay đổi bảng tra cứu nội bộ của nó. Điều này giảm chi phí cấp phát đối tượng và tăng tốc giai đoạn **process html css**. + +```csharp +class CachedResourceHandler : ResourceHandler +{ + private readonly Dictionary _cache = new(); + + public void AddToCache(string uri, byte[] data) => _cache[uri] = data; + + public override Stream HandleResource(ResourceInfo info) + { + if (_cache.TryGetValue(info.Uri, out var data)) + return new MemoryStream(data); + return new MemoryStream(); // fallback + } +} +``` + +## Full, runnable example + +Dưới đây là một chương trình hoàn chỉnh bạn có thể dán vào một ứng dụng console. Nó minh họa **how to render html**, **process html css**, **how to save html**, **convert html to stream**, và **load html document c#**—tất cả trong một luồng. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using System; +using System.Collections.Generic; +using System.IO; + +namespace HtmlRenderDemo +{ + // Custom resource handler (process html css, images, etc.) + class MyResourceHandler : ResourceHandler + { + public override Stream HandleResource(ResourceInfo info) + { + Console.WriteLine($"Requested: {info.Uri} (type: {info.MimeType})"); + + // Example: serve a simple CSS file from memory + if (info.Uri.EndsWith(".css", StringComparison.OrdinalIgnoreCase)) + { + string css = "body { font-family: Arial, sans-serif; background:#f9f9f9; }"; + return new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)); + } + + // Return an empty stream for everything else (placeholder) + return new MemoryStream(); + } + } + + class Program + { + static void Main() + { + // 1️⃣ Load the HTML document (load html document c#) + string htmlPath = Path.Combine("YOUR_DIRECTORY", "input.html"); + HTMLDocument doc = new HTMLDocument(htmlPath); + + // 2️⃣ Attach custom handler (process html css) + var handler = new MyResourceHandler(); + + // 3️⃣ Configure save options + HtmlSaveOptions saveOpts = new HtmlSaveOptions + { + ResourceHandler = handler, + EmbedCss = true, + EmbedImages = true, + Encoding = System.Text.Encoding.UTF8 + }; + + // 4️⃣ Render and convert html to stream (how to save html) + using (MemoryStream outStream = new MemoryStream()) + { + doc.Save(outStream, saveOpts); + outStream.Position = 0; // rewind + + // Verify the output – write first 500 chars to console + using (var reader = new StreamReader(outStream)) + { + string result = reader.ReadToEnd(); + Console.WriteLine("\n=== Rendered HTML (first 500 chars) ==="); + Console.WriteLine(result.Substring(0, Math.Min(500, result.Length))); + } + + // The stream now contains the full rendered HTML. + // You could return it from a Web API, store it, etc. + } + + Console.WriteLine("\nRendering completed successfully."); + } + } +} +``` + +**Expected output** (được rút gọn để ngắn gọn): + + + +## What Should You Learn Next? + +Các hướng dẫn sau đây đề cập đến các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật đã được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoàn chỉnh với giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [How to Save HTML with Aspose.Html – Complete C# Guide](/html/english/net/working-with-html-documents/how-to-save-html-with-aspose-html-complete-c-guide/) +- [How to Use Aspose to Render HTML to PNG in C#](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-in-c/) +- [How to Use Aspose to Render HTML to PNG – Step‑by‑Step Guide](/html/english/net/rendering-html-documents/how-to-use-aspose-to-render-html-to-png-step-by-step-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/vietnamese/net/working-with-html-documents/_index.md b/html/vietnamese/net/working-with-html-documents/_index.md index d589d0172..b40cef594 100644 --- a/html/vietnamese/net/working-with-html-documents/_index.md +++ b/html/vietnamese/net/working-with-html-documents/_index.md @@ -44,6 +44,10 @@ Hướng dẫn chi tiết cách sử dụng CSS và C# để làm tiêu đề in Hướng dẫn chi tiết cách nén tài liệu HTML trong C# bằng Aspose.HTML, bao gồm các bước và ví dụ thực tế. +### [Cách sử dụng HtmlSaveOptions trong C# với Aspose.HTML](./how-to-use-htmlsaveoptions-in-c-with-aspose-html/) + +### [Cách tải tài liệu HTML từ tệp với Aspose.HTML trong C#](./how-to-load-html-document-from-file-with-aspose-html-in-c/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/vietnamese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md b/html/vietnamese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md new file mode 100644 index 000000000..3f12e71f6 --- /dev/null +++ b/html/vietnamese/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-09-10 +description: Học cách tải tài liệu HTML từ tệp bằng Aspose.HTML trong C#. Bao gồm + các tùy chọn hiển thị hình ảnh, các tùy chọn hiển thị văn bản và một trình xử lý + tài nguyên tùy chỉnh. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- load html document from file +- Aspose.HTML rendering +- HTML to image conversion +- custom resource handler +- image rendering options +- text rendering options +language: vi +lastmod: 2026-09-10 +og_description: Tải tài liệu HTML từ tệp bằng Aspose.HTML trong C#. Hướng dẫn này + bao gồm các tùy chọn render, một trình xử lý tài nguyên tùy chỉnh và mã hoàn chỉnh + mà bạn có thể chạy ngay hôm nay. +og_image_alt: Code editor displaying how to load HTML document from file with Aspose.HTML +og_title: Tải tài liệu HTML từ tệp với Aspose.HTML – hướng dẫn C# từng bước +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn to load HTML document from file using Aspose.HTML in C#. Includes + image rendering options, text rendering options, and a custom resource handler. + headline: How to load HTML document from file with Aspose.HTML in C# + type: TechArticle +tags: +- Aspose.HTML +- C# +- HTML rendering +title: Cách tải tài liệu HTML từ tệp bằng Aspose.HTML trong C# +url: /vi/net/working-with-html-documents/how-to-load-html-document-from-file-with-aspose-html-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách tải tài liệu HTML từ tệp bằng Aspose.HTML trong C# + +Nếu bạn cần **load HTML document from file** và kiểm soát việc render, hướng dẫn này sẽ cho bạn một giải pháp hoàn chỉnh, sẵn sàng chạy. Bạn sẽ thấy cách cấu hình render hình ảnh, bật text hinting, và cung cấp một custom resource handler trả về các stream rỗng cho các tài nguyên bên ngoài. Khi kết thúc hướng dẫn, bạn có thể lưu HTML đã xử lý vào một memory stream hoặc bất kỳ đích nào khác mà bạn muốn. + +Ví dụ sử dụng Aspose.HTML for .NET, một thư viện giúp đơn giản hoá việc xử lý HTML, CSS và SVG mà không cần engine trình duyệt. Không cần công cụ bên ngoài, và mã hoạt động với .NET 6 hoặc phiên bản mới hơn. Đảm bảo bạn đã cài đặt gói NuGet Aspose.HTML trước khi bắt đầu. + +## Yêu cầu trước + +- .NET 6 SDK (hoặc bất kỳ phiên bản .NET nào được Aspose.HTML hỗ trợ) +- Visual Studio 2022 hoặc một IDE C# khác +- Gói NuGet Aspose.HTML for .NET (`Install-Package Aspose.HTML`) +- Một tệp HTML có tên `input.html` đặt trong thư mục mà bạn có thể tham chiếu từ mã + +## Bước 1: Tải tài liệu HTML từ tệp + +Hoạt động đầu tiên là tạo một thể hiện `HTMLDocument` để đọc tệp nguồn. Đối tượng này đại diện cho toàn bộ cây DOM và cung cấp các phương thức để thao tác tiếp theo. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +// Load the HTML document from a file +var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Tại sao điều này quan trọng:** Việc tải tệp vào một `HTMLDocument` cho phép bạn truy cập đầy đủ vào cấu trúc, kiểu dáng và tài nguyên của tài liệu, mà bạn có thể render hoặc chuyển đổi sau này. + +## Bước 2: Thiết lập tùy chọn render hình ảnh (render Aspose.HTML) + +Nếu bạn dự định raster hoá trang sau này, việc cấu hình render hình ảnh sẽ cải thiện chất lượng hình ảnh. Antialiasing làm mịn các cạnh và giảm các hiện tượng răng cưa. + +```csharp +// Configure image rendering options +var imageOptions = new ImageRenderingOptions +{ + UseAntialiasing = true // Enables smoother graphics +}; +``` + +**Mẹo:** `UseAntialiasing` đặc biệt hữu ích cho đồ họa vector và văn bản sẽ được raster hoá thành PNG hoặc JPEG. + +## Bước 3: Bật text hinting (tùy chọn render văn bản) + +Text hinting ảnh hưởng đến cách các glyph được căn chỉnh vào lưới pixel, giúp các phông chữ kích thước nhỏ trông sắc nét hơn. + +```csharp +// Configure text rendering options +var textOptions = new TextOptions +{ + UseHinting = true // Improves readability of rendered text +}; +``` + +**Tại sao nó quan trọng:** Khi bạn xuất HTML sang hình ảnh, hinting giảm hiện tượng ký tự mờ và đảm bảo kiểu chữ nhất quán trên các nền tảng. + +## Bước 4: Tạo custom resource handler + +Các tài nguyên bên ngoài như phông chữ, hình ảnh hoặc script có thể được tham chiếu trong HTML. Một `ResourceHandler` cho phép bạn kiểm soát cách các tài nguyên này được lấy. Trong ví dụ này, handler trả về một `MemoryStream` rỗng cho mọi yêu cầu, thực tế loại bỏ các tài nguyên bên ngoài. + +```csharp +// Custom resource handler that supplies empty streams +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} + +// Instantiate the handler +var resourceHandler = new MemoryResourceHandler(); +``` + +**Khi nào nên dùng:** Mẫu này hữu ích cho môi trường có hạn chế bảo mật, kiểm thử đơn vị, hoặc khi bạn chỉ cần markup mà không có các tệp bên ngoài. + +## Bước 5: Tập hợp HTML save options (chuyển đổi HTML sang hình ảnh) + +Tất cả các thành phần—resource handler, cài đặt render và kiểu phông chữ—được gắn vào một đối tượng `HtmlSaveOptions`. Đối tượng này chỉ cho Aspose.HTML cách serialize tài liệu. + +```csharp +var saveOptions = new HtmlSaveOptions +{ + ResourceHandler = resourceHandler, // Use the custom handler + WebFontStyle = WebFontStyle.Bold, // Example of a font style override + ImageRenderingOptions = imageOptions, + TextOptions = textOptions +}; +``` + +**Giải thích:** `WebFontStyle` có thể buộc một kiểu cụ thể (ví dụ, bold) cho các web font có thể thiếu. `ImageRenderingOptions` và `TextOptions` chúng ta đã cấu hình trước đó được chèn vào đây, đảm bảo chúng ảnh hưởng đến bất kỳ quá trình raster hoá nào sau này. + +## Bước 6: Lưu tài liệu vào memory stream (giải pháp hoàn chỉnh) + +Cuối cùng, ghi HTML đã xử lý vào một `MemoryStream`. Từ đây bạn có thể ghi stream ra tệp, gửi qua mạng, hoặc truyền cho một API khác. + +```csharp +using (var outputStream = new MemoryStream()) +{ + // Save the HTML with all configured options + htmlDoc.Save(outputStream, saveOptions); + + // At this point outputStream contains the HTML markup, + // its (empty) resources, and the applied rendering settings. + // Example: write the stream to a file for verification + File.WriteAllBytes("output.html", outputStream.ToArray()); +} +``` + +**Kết quả:** `output.html` hiện chứa cùng markup như `input.html` nhưng tất cả tài nguyên bên ngoài đã được thay thế bằng các stream rỗng, và các tùy chọn render đã được tích hợp vào các tùy chọn lưu. + +## Ví dụ đầy đủ có thể chạy + +Kết hợp tất cả các bước lại với nhau sẽ cho bạn một chương trình tự chứa mà bạn có thể sao chép, dán và chạy. + +```csharp +using Aspose.Html; +using Aspose.Html.Rendering; +using Aspose.Html.Rendering.Image; +using Aspose.Html.Drawing; +using System.IO; + +class Program +{ + static void Main() + { + // Step 1: Load the HTML document from a file + var htmlDoc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Image rendering options + var imageOptions = new ImageRenderingOptions { UseAntialiasing = true }; + + // Step 3: Text rendering options + var textOptions = new TextOptions { UseHinting = true }; + + // Step 4: Custom resource handler + var resourceHandler = new MemoryResourceHandler(); + + // Step 5: Save options with all settings + var saveOptions = new HtmlSaveOptions + { + ResourceHandler = resourceHandler, + WebFontStyle = WebFontStyle.Bold, + ImageRenderingOptions = imageOptions, + TextOptions = textOptions + }; + + // Step 6: Save to a memory stream and write to disk + using (var outputStream = new MemoryStream()) + { + htmlDoc.Save(outputStream, saveOptions); + File.WriteAllBytes("output.html", outputStream.ToArray()); + } + } +} + +// Custom handler that returns empty streams for any resource request +class MemoryResourceHandler : ResourceHandler +{ + public override Stream HandleResource(ResourceInfo info) => new MemoryStream(); +} +``` + +Chạy chương trình này sẽ tạo ra `output.html` trong thư mục hiện tại. Mở tệp trong trình duyệt để xác nhận rằng markup gốc được tải, nhưng bất kỳ hình ảnh, phông chữ hoặc script nào được liên kết đều không có (chúng đã được thay thế bằng các stream rỗng). + +## Các câu hỏi thường gặp và trường hợp đặc biệt + +| Câu hỏi | Trả lời | +|----------|--------| +| **Nếu tôi cần các tài nguyên gốc thay vì các stream rỗng thì sao?** | Thay `MemoryResourceHandler` bằng một handler đọc tệp từ đĩa hoặc tải chúng qua HTTP. | +| **Tôi có thể render HTML trực tiếp thành PNG hoặc JPEG không?** | Có. Sử dụng `ImageRenderer` với cùng `ImageRenderingOptions` và `TextOptions` đã cấu hình, sau đó gọi `renderer.Render(page, outputStream, ImageFormat.Png)`. | +| **Có cần `WebFontStyle.Bold` không?** | Không. Nó chỉ là ví dụ về việc ghi đè kiểu phông chữ. Bỏ qua hoặc đổi thành `WebFontStyle.Normal` nếu bạn không cần kiểu bắt buộc. | +| **Điều này có hoạt động trên .NET Core không?** | Aspose.HTML hỗ trợ .NET 5/6/7, vì vậy cùng mã có thể chạy trên các dự án .NET Core. | +| **Làm thế nào để xử lý các tệp HTML lớn một cách hiệu quả?** | Stream tệp vào `HTMLDocument` bằng constructor `FileStream` để tránh tải toàn bộ tệp vào bộ nhớ cùng một lúc. | + +## Kết luận + +Bạn đã biết cách **load HTML document from file** bằng Aspose.HTML, cấu hình **image rendering options** và **text rendering options**, và áp dụng **custom resource handler** để kiểm soát các tài nguyên bên ngoài. Ví dụ đầy đủ minh họa việc lưu HTML đã xử lý vào một memory stream, mà bạn có thể lưu trữ hoặc truyền đi tùy nhu cầu. + +Tiếp theo, bạn có thể khám phá **HTML to image conversion** bằng cách thay `HtmlSaveOptions` bằng một `ImageRenderer`, hoặc thử nghiệm các tính năng **Aspose.HTML rendering** như CSS media queries, hỗ trợ SVG và xuất PDF. Những mở rộng này cho phép bạn xây dựng các pipeline xử lý tài liệu phong phú hoàn toàn bằng C#. + +Chúc lập trình vui vẻ! + +## Bạn nên học gì tiếp theo? + +Các hướng dẫn sau đây bao gồm các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật được trình bày trong hướng dẫn này. Mỗi tài nguyên đều có các ví dụ mã hoạt động đầy đủ với các giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Tải HTML bằng máy chủ từ xa trong .NET với Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-remote-server/) +- [Tải HTML bằng URL trong .NET với Aspose.HTML](/html/english/net/html-document-manipulation/load-html-using-url/) +- [Cách lưu HTML trong C# – Hướng dẫn đầy đủ sử dụng Custom Resource Handler](/html/english/net/working-with-html-documents/how-to-save-html-in-c-complete-guide-using-a-custom-resource/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/vietnamese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md b/html/vietnamese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md new file mode 100644 index 000000000..0df19aa2c --- /dev/null +++ b/html/vietnamese/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-09-10 +description: Tìm hiểu cách sử dụng HtmlSaveOptions trong C# để kiểm soát kiểu chữ + web‑font và lưu các tệp HTML với Aspose.HTML. Bao gồm ví dụ mã đầy đủ và các mẹo + thực tế. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to use htmlsaveoptions +- Aspose HTML library +- WebFontStyle flags +- HTMLDocument conversion +- C# save HTML +- Aspose.Html SaveOptions +language: vi +lastmod: 2026-09-10 +og_description: Cách sử dụng HtmlSaveOptions trong C# để bật các kiểu chữ đậm và nghiêng + của web‑font khi lưu HTML bằng Aspose.HTML. Theo dõi ví dụ đầy đủ và các mẹo thực + hành tốt nhất. +og_image_alt: Screenshot showing how to use HtmlSaveOptions to save an HTML file in + C# +og_title: Cách sử dụng HtmlSaveOptions trong C# với Aspose.HTML – hướng dẫn từng bước +schemas: +- author: Aspose + dateModified: '2026-09-10' + description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + headline: How to use HtmlSaveOptions in C# with Aspose.HTML + type: TechArticle +- description: Learn how to use HtmlSaveOptions in C# to control web‑font styles and + save HTML files with Aspose.HTML. Full code example and practical tips included. + name: How to use HtmlSaveOptions in C# with Aspose.HTML + steps: + - name: Why configure WebFontStyle? + text: 'When you export an HTML document, Aspose.HTML can embed web fonts that + match the original styling. By setting `WebFontStyle`, you tell the exporter + which font variants to include. This reduces the final file size when you only + need specific styles and guarantees that the rendered output matches the ' + - name: 5.1 Controlling CSS embedding + text: 'You can decide whether to embed CSS inline, keep external links, or embed + everything:' + - name: 5.2 Saving to a specific encoding + text: '```csharp saveOptions.Encoding = Encoding.UTF8; ```' + - name: 5.3 Handling large documents + text: 'For very large HTML files, consider streaming the output to avoid high + memory consumption:' + - name: 5.4 Error handling best practice + text: 'Wrap the entire workflow in a try‑catch block and log the exception details. + This ensures that any I/O or parsing errors are captured:' + - name: Expected console output + text: '``` HTML saved successfully to ''YOUR_DIRECTORY/output.html''. ```' + type: HowTo +tags: +- Aspose.HTML +- C# +- HTML processing +title: Cách sử dụng HtmlSaveOptions trong C# với Aspose.HTML +url: /vi/net/working-with-html-documents/how-to-use-htmlsaveoptions-in-c-with-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách sử dụng HtmlSaveOptions trong C# với Aspose.HTML + +Nếu bạn cần kiểm soát cách Aspose.HTML lưu một tài liệu HTML, **việc học cách sử dụng HtmlSaveOptions là rất quan trọng**. Hướng dẫn này sẽ chỉ cho bạn từng bước cách sử dụng HtmlSaveOptions để bật các kiểu phông chữ web in đậm và nghiêng khi lưu tài liệu. + +Thư viện Aspose HTML cung cấp một API phong phú để tải, thao tác và xuất nội dung HTML. Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể: + +* Tải một tệp HTML hiện có vào `HTMLDocument`. +* Cấu hình `HtmlSaveOptions` để áp dụng các cờ `WebFontStyle` cụ thể. +* Lưu tài liệu đã chỉnh sửa vào một vị trí mới hoặc một luồng. +* Mở rộng giải pháp cho các kiểu phông chữ khác, CSS tùy chỉnh và xử lý lỗi. + +## Yêu cầu trước + +Trước khi bắt đầu, hãy chắc chắn rằng bạn có: + +* .NET 6.0 trở lên đã được cài đặt. +* Giấy phép hợp lệ cho **Aspose.HTML for .NET** (bản dùng thử miễn phí cũng hoạt động cho ví dụ này). +* Visual Studio 2022 (hoặc bất kỳ IDE C# nào) để biên dịch và chạy mã. + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.HTML`. + +## Bước 1: Thiết lập dự án và nhập không gian tên + +Tạo một dự án **Console App** mới và thêm gói NuGet Aspose.HTML: + +```bash +dotnet add package Aspose.HTML +``` + +Sau đó, ở đầu file `Program.cs`, nhập các không gian tên cần thiết: + +```csharp +using Aspose.Html; +using Aspose.Html.Drawing; +``` + +Các không gian tên này cung cấp các kiểu `HTMLDocument`, `HtmlSaveOptions` và `WebFontStyle` mà bạn sẽ sử dụng trong suốt hướng dẫn. + +## Bước 2: Tải tài liệu HTML nguồn + +Hoạt động đầu tiên là đọc HTML bạn muốn xử lý. Thay thế `"YOUR_DIRECTORY/input.html"` bằng đường dẫn thực tế tới tệp của bạn. + +```csharp +// Load the source HTML document from disk +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +`HTMLDocument` phân tích cú pháp markup, xây dựng cây DOM và chuẩn bị cho việc thao tác. Nếu tệp không tồn tại, một ngoại lệ sẽ được ném, vì vậy bạn có thể muốn bọc lời gọi này trong khối try‑catch cho mã sản xuất. + +## Bước 3: Tạo và cấu hình HtmlSaveOptions + +`HtmlSaveOptions` cho phép bạn tinh chỉnh quá trình lưu. Để bật các kiểu phông chữ web in đậm và nghiêng, kết hợp các cờ `WebFontStyle` tương ứng bằng toán tử OR bitwise (`|`). + +```csharp +// Create a new HtmlSaveOptions instance +HtmlSaveOptions saveOptions = new HtmlSaveOptions(); + +// Enable bold and italic web‑font styles (equivalent to the old FontStyle flags) +saveOptions.WebFontStyle = WebFontStyle.Bold | WebFontStyle.Italic; +``` + +### Tại sao cần cấu hình WebFontStyle? + +Khi bạn xuất một tài liệu HTML, Aspose.HTML có thể nhúng các phông chữ web phù hợp với kiểu dáng gốc. Bằng cách thiết lập `WebFontStyle`, bạn cho trình xuất biết những biến thể phông chữ nào cần bao gồm. Điều này giảm kích thước tệp cuối cùng khi bạn chỉ cần các kiểu cụ thể và đảm bảo rằng kết quả hiển thị khớp với nguồn. + +#### Các biến thể thường gặp + +| Kiểu mong muốn | Cờ `WebFontStyle` tương ứng | +|----------------|-----------------------------| +| Bình thường (regular) | `WebFontStyle.Regular` | +| In đậm | `WebFontStyle.Bold` | +| Nghiêng | `WebFontStyle.Italic` | +| In đậm + Nghiêng | `WebFontStyle.Bold | WebFontStyle.Italic` | +| Tất cả các biến thể | `WebFontStyle.All` | + +Bạn có thể kết hợp bất kỳ tổ hợp nào phù hợp với kịch bản của mình. + +## Bước 4: Lưu tài liệu với các tùy chọn đã cấu hình + +Bây giờ ghi tài liệu vào một tệp mới. Phương thức `Save` nhận đường dẫn đích và thể hiện `HtmlSaveOptions` mà bạn đã chuẩn bị. + +```csharp +// Save the processed HTML using the configured options +document.Save("YOUR_DIRECTORY/output.html", saveOptions); +``` + +Nếu bạn cần ghi vào một memory stream (ví dụ, để gửi tệp qua HTTP), hãy sử dụng overload chấp nhận đối tượng `Stream`: + +```csharp +using (var stream = new MemoryStream()) +{ + document.Save(stream, saveOptions); + // Reset the position to read the content later + stream.Position = 0; + // Example: return the stream from a Web API endpoint +} +``` + +## Bước 5: Xác minh kết quả + +Mở `output.html` trong trình duyệt hoặc kiểm tra tệp bằng trình soạn thảo văn bản. Bạn sẽ thấy khối `