From eb66a9027fdcd613d2026bd0c8fac458eb918ef6 Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Fri, 14 Aug 2026 18:46:11 +0000 Subject: [PATCH] Add 6 pdf net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: annotations, conversion-export, programming-with-forms, programming-with-operators, programming-with-security-and-signatures, programming-with-stamps-and-watermarks Source: AI Search API Tutorials: - How to set bates numbering options in C# – complete guide - draw rectangle on pdf – step‑by‑step C# guide - Create signature options in C# – full guide to digital signing - Create pdf form field in C# – step‑by‑step guide - Create empty PDF dictionary in C# with Aspose.Pdf - Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# Auto-generated by Professionalize.Tutorials Agent --- pdf/arabic/net/annotations/_index.md | 1 + .../_index.md | 248 +++ pdf/arabic/net/conversion-export/_index.md | 3 + .../_index.md | 231 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 275 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 3 +- .../_index.md | 310 ++++ .../_index.md | 1 + .../_index.md | 252 +++ pdf/chinese/net/annotations/_index.md | 1 + .../_index.md | 250 +++ pdf/chinese/net/conversion-export/_index.md | 3 + .../_index.md | 275 ++++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 275 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 272 ++++ .../_index.md | 1 + .../_index.md | 330 ++++ .../_index.md | 1 + .../_index.md | 251 +++ pdf/czech/net/annotations/_index.md | 1 + .../_index.md | 251 +++ pdf/czech/net/conversion-export/_index.md | 3 + .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 278 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 251 +++ pdf/dutch/net/annotations/_index.md | 1 + .../_index.md | 254 +++ pdf/dutch/net/conversion-export/_index.md | 3 + .../_index.md | 232 +++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 276 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 272 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 256 +++ pdf/english/net/annotations/_index.md | 3 +- .../_index.md | 255 +++ .../og-image.png | Bin 0 -> 45537 bytes pdf/english/net/conversion-export/_index.md | 3 + .../_index.md | 278 ++++ .../og-image.png | Bin 0 -> 49904 bytes .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../og-image.png | Bin 0 -> 44404 bytes .../net/programming-with-operators/_index.md | 3 +- .../_index.md | 275 ++++ .../og-image.png | Bin 0 -> 51464 bytes .../_index.md | 1 + .../_index.md | 313 ++++ .../og-image.png | Bin 0 -> 44438 bytes .../_index.md | 1 + .../_index.md | 255 +++ .../og-image.png | Bin 0 -> 48644 bytes pdf/french/net/annotations/_index.md | 1 + .../_index.md | 254 +++ pdf/french/net/conversion-export/_index.md | 3 + .../_index.md | 235 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 313 ++++ .../_index.md | 1 + .../_index.md | 253 +++ pdf/german/net/annotations/_index.md | 1 + .../_index.md | 254 +++ pdf/german/net/conversion-export/_index.md | 3 +- .../_index.md | 279 ++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 280 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 275 ++++ .../_index.md | 1 + .../_index.md | 314 ++++ .../_index.md | 1 + .../_index.md | 256 +++ pdf/greek/net/annotations/_index.md | 1 + .../_index.md | 252 +++ pdf/greek/net/conversion-export/_index.md | 11 +- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 331 ++++ .../_index.md | 1 + .../_index.md | 254 +++ pdf/hindi/net/annotations/_index.md | 1 + .../_index.md | 253 +++ pdf/hindi/net/conversion-export/_index.md | 1375 ++++++++++++++++- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 277 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 251 +++ pdf/hongkong/net/annotations/_index.md | 1 + .../_index.md | 250 +++ pdf/hongkong/net/conversion-export/_index.md | 2 + .../_index.md | 230 +++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 275 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 272 ++++ .../_index.md | 3 +- .../_index.md | 306 ++++ .../_index.md | 1 + .../_index.md | 248 +++ pdf/hungarian/net/annotations/_index.md | 1 + .../_index.md | 249 +++ pdf/hungarian/net/conversion-export/_index.md | 3 + .../_index.md | 281 ++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 275 ++++ .../_index.md | 1 + .../_index.md | 313 ++++ .../_index.md | 1 + .../_index.md | 253 +++ pdf/indonesian/net/annotations/_index.md | 1 + .../_index.md | 254 +++ .../net/conversion-export/_index.md | 5 +- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 271 ++++ .../_index.md | 1 + .../_index.md | 313 ++++ .../_index.md | 3 +- .../_index.md | 252 +++ pdf/italian/net/annotations/_index.md | 1 + .../_index.md | 251 +++ pdf/italian/net/conversion-export/_index.md | 3 + .../_index.md | 233 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 3 +- .../_index.md | 254 +++ pdf/japanese/net/annotations/_index.md | 1 + .../_index.md | 250 +++ pdf/japanese/net/conversion-export/_index.md | 3 + .../_index.md | 289 ++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 273 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 308 ++++ .../_index.md | 1 + .../_index.md | 250 +++ pdf/korean/net/annotations/_index.md | 1 + .../_index.md | 250 +++ pdf/korean/net/conversion-export/_index.md | 2 + .../_index.md | 231 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 277 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 310 ++++ .../_index.md | 1 + .../_index.md | 252 +++ pdf/polish/net/annotations/_index.md | 3 +- .../_index.md | 251 +++ pdf/polish/net/conversion-export/_index.md | 3 + .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 276 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 3 +- .../_index.md | 251 +++ pdf/portuguese/net/annotations/_index.md | 1 + .../_index.md | 254 +++ .../net/conversion-export/_index.md | 5 +- .../_index.md | 233 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 279 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 254 +++ pdf/russian/net/annotations/_index.md | 3 +- .../_index.md | 251 +++ pdf/russian/net/conversion-export/_index.md | 6 +- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 276 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 272 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 252 +++ pdf/spanish/net/annotations/_index.md | 3 +- .../_index.md | 256 +++ pdf/spanish/net/conversion-export/_index.md | 5 +- .../_index.md | 279 ++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 277 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 250 +++ pdf/swedish/net/annotations/_index.md | 1 + .../_index.md | 251 +++ pdf/swedish/net/conversion-export/_index.md | 5 +- .../_index.md | 278 ++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 278 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 312 ++++ .../_index.md | 1 + .../_index.md | 254 +++ pdf/thai/net/annotations/_index.md | 1 + .../_index.md | 252 +++ pdf/thai/net/conversion-export/_index.md | 3 + .../_index.md | 277 ++++ pdf/thai/net/programming-with-forms/_index.md | 1 + .../_index.md | 277 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 273 ++++ .../_index.md | 1 + .../_index.md | 310 ++++ .../_index.md | 10 +- .../_index.md | 252 +++ pdf/turkish/net/annotations/_index.md | 27 +- .../_index.md | 252 +++ pdf/turkish/net/conversion-export/_index.md | 4 +- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 5 +- .../_index.md | 276 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 271 ++++ .../_index.md | 3 +- .../_index.md | 314 ++++ .../_index.md | 1 + .../_index.md | 255 +++ pdf/vietnamese/net/annotations/_index.md | 1 + .../_index.md | 255 +++ .../net/conversion-export/_index.md | 5 +- .../_index.md | 234 +++ .../net/programming-with-forms/_index.md | 55 +- .../_index.md | 275 ++++ .../net/programming-with-operators/_index.md | 1 + .../_index.md | 274 ++++ .../_index.md | 1 + .../_index.md | 310 ++++ .../_index.md | 1 + .../_index.md | 255 +++ 282 files changed, 38816 insertions(+), 83 deletions(-) create mode 100644 pdf/arabic/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/arabic/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/arabic/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/arabic/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/arabic/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/arabic/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/chinese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/chinese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/chinese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/chinese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/chinese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/chinese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/czech/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/czech/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/czech/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/czech/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/czech/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/czech/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/dutch/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/dutch/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/dutch/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/dutch/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/dutch/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/dutch/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/og-image.png create mode 100644 pdf/english/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/english/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/og-image.png create mode 100644 pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/og-image.png create mode 100644 pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/og-image.png create mode 100644 pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/og-image.png create mode 100644 pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/og-image.png create mode 100644 pdf/french/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/french/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/french/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/french/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/french/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/french/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/german/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/german/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/german/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/german/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/german/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/german/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/greek/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/greek/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/greek/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/greek/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/greek/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/greek/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/hindi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/hindi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/hindi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/hindi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hindi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/hindi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/hongkong/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/hongkong/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/hongkong/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/hongkong/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hongkong/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/hongkong/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/hungarian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/hungarian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/hungarian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/hungarian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hungarian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/hungarian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/indonesian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/indonesian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/indonesian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/indonesian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/indonesian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/indonesian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/italian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/italian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/italian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/italian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/italian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/italian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/japanese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/japanese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/japanese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/japanese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/japanese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/japanese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/korean/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/korean/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/korean/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/korean/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/korean/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/korean/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/polish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/polish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/polish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/polish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/polish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/polish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/portuguese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/portuguese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/portuguese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/portuguese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/portuguese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/portuguese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/russian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/russian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/russian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/russian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/russian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/russian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/spanish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/spanish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/spanish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/spanish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/spanish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/spanish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/swedish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/swedish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/swedish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/swedish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/swedish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/swedish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/thai/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/thai/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/thai/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/thai/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/thai/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/thai/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/turkish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/turkish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/turkish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/turkish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/turkish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/turkish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md create mode 100644 pdf/vietnamese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md create mode 100644 pdf/vietnamese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md create mode 100644 pdf/vietnamese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md create mode 100644 pdf/vietnamese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/vietnamese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md create mode 100644 pdf/vietnamese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md diff --git a/pdf/arabic/net/annotations/_index.md b/pdf/arabic/net/annotations/_index.md index b78d04e564..6bd77d2af2 100644 --- a/pdf/arabic/net/annotations/_index.md +++ b/pdf/arabic/net/annotations/_index.md @@ -35,6 +35,7 @@ | [تعيين تنسيق التعليقات التوضيحية للنص مجانًا](./setfreetextannotationformatting/) |تعرف على كيفية تعيين تنسيق التعليقات التوضيحية للنص مجانًا في مستندات PDF باستخدام Aspose.PDF لـ .NET من خلال هذا الدليل خطوة بخطوة. | | [شطب الكلمات](./strikeoutwords/) تعلّم كيفية شطب الكلمات في ملف PDF باستخدام Aspose.PDF لـ .NET من خلال هذا الدليل الشامل خطوة بخطوة. حسّن مهاراتك في تحرير المستندات. | [تحديث التعليقات التوضيحية المجانية لنصوص PDF](./updatefreetextannotation/) |تعرف على كيفية تحديث التعليقات النصية المجانية في مستندات PDF باستخدام Aspose.PDF لـ .NET باستخدام هذا الدليل خطوة بخطوة. | +| [رسم مستطيل على ملف PDF – دليل خطوة بخطوة بلغة C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | تعلم كيفية رسم مستطيل على مستند PDF باستخدام Aspose.PDF لـ .NET مع مثال كامل بلغة C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/arabic/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..d9fe644a7e --- /dev/null +++ b/pdf/arabic/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-14 +description: ارسم مستطيلًا على ملف PDF بسرعة باستخدام C#. تعلّم كيفية تحديد أبعاد + المستطيل وإضافة أشكال إلى صفحة PDF في بضع أسطر فقط. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: ar +lastmod: 2026-08-14 +og_description: ارسم مستطيلًا على ملف PDF باستخدام C# في ثوانٍ. يوضح هذا الدليل كيفية + تحديد أبعاد المستطيل، إضافة شكل، والتحقق من حدود الصفحة لضمان رسومات PDF موثوقة. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: رسم مستطيل على PDF – دليل C# الكامل +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: رسم مستطيل على ملف PDF – دليل خطوة بخطوة بلغة C# +url: /ar/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# رسم مستطيل على pdf – دليل C# كامل + +إذا كنت بحاجة إلى **draw rectangle on pdf** باستخدام C#، فإن هذا الدليل يوضح لك حلاً مختصراً وجاهزاً للإنتاج. سترى بالضبط **how to define rectangle dimensions**، وتتحقق من أن الشكل يتناسب، وتضيفه إلى صفحة باستدعاء طريقة واحدة. + +يغطي الدليل كل شيء من إنشاء مستند PDF إلى عرض المستطيل، بحيث يمكنك نسخ‑لصق الشيفرة في مشروعك ورؤية النتائج فوراً. لا تحتاج إلى وثائق خارجية—فقط الخطوات أدناه. + +## المتطلبات المسبقة + +* .NET 6.0 أو أحدث (الكود يعمل أيضاً مع .NET Framework 4.7+) +* حزمة NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* فهم أساسي لصياغة C# +* بيئة تطوير متكاملة مثل Visual Studio أو VS Code + +> **نصيحة احترافية:** استخدم ترخيص التقييم المجاني لـ Aspose.PDF للتجارب السريعة؛ يضيف علامة مائية صغيرة لكنه يتيح لك اختبار جميع الميزات. + +## كيفية رسم مستطيل على PDF باستخدام C# + +جوهر المهمة هو إنشاء `RectangleShape`، وتحديد حجمه وحدوده، وإرفاقه بـ `Page`. يحتوي عنوان H2 التالي على الكلمة المفتاحية الأساسية، مما يلبي متطلبات تحسين محركات البحث. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### شرح كل خطوة + +| الخطوة | لماذا يهم | +|--------|-----------| +| **1️⃣ إنشاء مستند PDF جديد** | يهيئ الحاوية التي ستحتوي على الصفحات والرسومات. | +| **2️⃣ إضافة صفحة فارغة** | تحتاج إلى كائن `Page` لأن الأشكال تُرفق بصفحة، وليس مباشرة بالمستند. | +| **3️⃣ تحديد حدود المستطيل** | هنا حيث **how to define rectangle dimensions**. يأخذ مُنشئ `Rectangle` القيم `x` و `y` و `width` و `height` بالنقاط (1 pt = 1/72 in). | +| **4️⃣ إنشاء شكل المستطيل** | `RectangleShape` هي الفئة في Aspose التي تُرسم مستطيلًا. تحديد `StrokeColor` يحدد الحدود؛ يمكنك أيضًا تعيين `FillColor` لتعبئة صلبة. | +| **5️⃣ التحقق من حدود الصفحة** | `CheckShapeBoundary` يطرح استثناءً إذا تجاوز المستطيل حجم الصفحة، مما يمنع ملفات PDF غير صالحة. | +| **6️⃣ إضافة الشكل إلى الصفحة** | يصبح الشكل جزءًا من تدفق محتوى الصفحة. | +| **7️⃣ حفظ PDF** | يحفظ المستند إلى ملف يمكنك فتحه بأي عارض PDF. | + +يحتوي ملف `RectangleDemo.pdf` الناتج على مستطيل أسود موضعه في الزاوية العلوية اليسرى للصفحة، بعرض 500 pt وارتفاع 700 pt بالضبط. + +![مثال على رسم مستطيل على pdf](https://example.com/rectangle-demo.png "مثال على رسم مستطيل على pdf") + +*نص بديل للصورة: مثال على رسم مستطيل على pdf يُظهر مستطيلًا أسود في الزاوية العلوية اليسرى لصفحة PDF.* + +## كيفية تعريف أبعاد المستطيل لأحجام صفحات مختلفة + +المقتطف أعلاه يستخدم قيمًا ثابتة (`500 x 700`). في التطبيقات الحقيقية غالبًا ما تحتاج إلى أن يتكيف المستطيل مع عرض وارتفاع الصفحة. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**نقاط رئيسية:** + +* استخدم `page.PageInfo.Width` و `Height` لقراءة حجم الصفحة الفعلي. +* الضرب في عامل (مثال: `0.8f`) يتيح لك التعبير عن الأبعاد كنسبة مئوية من الصفحة. +* يتم تحقيق التوسيط بطرح حجم المستطيل من حجم الصفحة وتقسيم المتبقي على اثنين. + +## الأخطاء الشائعة وكيفية تجنبها + +| المشكلة | سبب حدوثها | الحل | +|----------|------------|------| +| يمتد المستطيل خارج الصفحة | أبعاد ثابتة أكبر من حجم الصفحة. | استدعِ `page.CheckShapeBoundary` **قبل** إضافة الشكل؛ عدّل الأبعاد إذا تم طرح استثناء. | +| الحد غير مرئي | `StrokeColor` ترك على القيمة الافتراضية (`Color.Empty`). | حدد `StrokeColor` صراحةً (مثال: `Color.Black`). | +| المستطيل يظهر خارج الشاشة | الإحداثيات تبدأ من الزاوية السفلية اليسرى في مساحة PDF؛ استخدام إحداثيات نمط الشاشة (الزاوية العليا اليسرى) يسبب انعكاسًا. | تذكر أن الأصل `(0,0)` هو الزاوية السفلية اليسرى. عدّل `y` وفقًا لذلك أو استخدم `pageHeight - desiredY`. | +| سُمك الخط غير متوقع | عرض الخط الافتراضي قد يكون رقيقًا جدًا للطباعة. | عيّن `rectangleShape.LineWidth = 2;` لزيادة السُمك. | + +## توسيع المثال + +بمجرد أن تتمكن من **draw rectangle on pdf**، يمكنك بسهولة إضافة أشكال أخرى: + +* **EllipseShape** – للدوائر أو البيضيات. +* **PolygonShape** – للمضلعات المخصصة. +* **TextFragment** – لتسمية المستطيلات الخاصة بك. + +جميع الأشكال تتبع نفس سير العمل: تحديد الحدود، تكوين المظهر، التحقق من الحدود، ثم الإضافة إلى الصفحة. + +## برنامج كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل الذي يجمع بين المستطيل الأساسي ومثال التحجيم الديناميكي. انسخه في مشروع وحدة تحكم جديد، استعد حزمة NuGet `Aspose.PDF`، وشغّله. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**الناتج المتوقع:** +افتح `CombinedRectangles.pdf`. سترى مستطيلًا أسودًا مثبتًا في الزاوية السفلية اليسرى ومستطيلًا أزرقًا داكنًا مركزيًا مع تعبئة صفراء فاتحة. كلا المستطيلين يحترمان هوامش الصفحة. + +## الخاتمة + +أنت الآن تعرف كيف **draw rectangle on pdf** باستخدام C# وبشكل دقيق **how to define rectangle dimensions** لكل من التخطيطات الثابتة والاستجابية. يستخدم النهج `RectangleShape` من Aspose.PDF، والتحقق من الحدود، وحسابات بسيطة للتكيف مع أي حجم صفحة. + +بعد ذلك، قد ترغب في استكشاف: + +* إضافة **fill colors** و **line styles** (متقطعة، منقطة) – الكلمة الثانوية: how to define rectangle dimensions with style. +* دمج أشكال متعددة في `Page` واحدة لإنشاء مخططات أو نماذج. +* تصدير PDF إلى تدفق (stream) لواجهات برمجة التطبيقات الويب بدلاً من حفظه على القرص. + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مصدر يتضمن أمثلة شيفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية تخصيص ملفات PDF باستخدام Aspose.PDF for .NET: تعيين هوامش الصفحة ورسم الخطوط](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [كيفية إضافة طوابع صفحات في ملفات PDF باستخدام Aspose.PDF for .NET: دليل كامل](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [كيفية إضافة طوابع أرقام الصفحات في ملفات PDF باستخدام Aspose.PDF for .NET | العلامات المائية والخلفيات](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/conversion-export/_index.md b/pdf/arabic/net/conversion-export/_index.md index 0b180cc5d8..724d840a92 100644 --- a/pdf/arabic/net/conversion-export/_index.md +++ b/pdf/arabic/net/conversion-export/_index.md @@ -230,6 +230,9 @@ ### [كيفية حفظ ملف PDF باستخدام Aspose – دليل خطوة بخطوة](./how-to-save-pdf-with-aspose-step-by-step-guide/) دليل شامل يوضح كيفية حفظ ملفات PDF باستخدام Aspose خطوة بخطوة باستخدام C#. +### [حفظ ملف PDF كـ HTML وتحويله إلى PDF/X‑4 باستخدام Aspose.PDF في C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +تعلم كيفية حفظ PDF كملف HTML ثم تحويله إلى صيغة PDF/X‑4 باستخدام Aspose.PDF في C#. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/arabic/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..511557c127 --- /dev/null +++ b/pdf/arabic/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-08-14 +description: احفظ ملف PDF كـ HTML وحوّل PDF إلى PDF/X‑4 باستخدام Aspose.PDF للغة C#. + يوضح الكود خطوة بخطوة تصدير HTML، قائمة التوقيعات، وتحرير حالة الرسومات. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: ar +lastmod: 2026-08-14 +og_description: احفظ ملف PDF كملف HTML وحوّل PDF إلى PDF/X‑4 باستخدام Aspose.PDF للغة + C#. اتبع هذا الدليل الكامل لتصدير HTML، وعرض التوقيعات، وتعديل حالات الرسومات. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: حفظ PDF كـ HTML وتحويله إلى PDF/X‑4 باستخدام Aspose.PDF – دليل C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: حفظ ملف PDF كـ HTML وتحويله إلى PDF/X‑4 باستخدام Aspose.PDF في C# +url: /ar/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# حفظ PDF كـ HTML وتحويله إلى PDF/X‑4 باستخدام Aspose.PDF في C# + +إذا كنت بحاجة إلى **حفظ PDF كـ HTML**، فإن Aspose.Pdf يجعل العملية بسيطة. يوضح هذا البرنامج التعليمي أيضًا كيفية **تحويل PDF إلى PDF/X‑4**، وإدراج حقول التوقيع، وإضافة ExtGState مخصص، مما يمنحك سير عمل كامل من البداية إلى النهاية. + +سوف تتعلم كيفية: + +* تصدير PDF إلى HTML نظيف مع تخطي الصور النقطية. +* تحويل مستند PDF إلى معيار PDF/X‑4 لإنتاج جاهز للطباعة. +* تعداد جميع حقول التوقيع في PDF. +* إدراج حالة رسومية مخصصة (ExtGState) في الصفحة الأولى. + +جميع الشيفرات تعمل على .NET 6 أو أحدث وتتطلب حزمة NuGet الخاصة بـ Aspose.Pdf for .NET. + +## المتطلبات المسبقة + +| المتطلب | السبب | +|-------------|--------| +| .NET 6 SDK أو أحدث | يوفر بيئة التشغيل لعينة C#. | +| Visual Studio 2022 (أو أي بيئة تطوير C#) | يتيح التحرير السهل وتصحيح الأخطاء. | +| Aspose.Pdf for .NET (الإصدار 23.12 أو أحدث) | يزودك بالفئات `Document`، `PdfFormatConversionOptions`، و `HtmlSaveOptions` المستخدمة في البرنامج التعليمي. | +| ملف PDF تجريبي (`sample.pdf`) | المستند المصدر الذي سيتم معالجته. | + +ثبت المكتبة باستخدام: + +```bash +dotnet add package Aspose.Pdf +``` + +## نظرة عامة على الحل + +يقوم البرنامج بتنفيذ ست خطوات منطقية: + +1. تحميل ملف PDF المصدر. +2. تعداد أسماء جميع حقول التوقيع. +3. **تحويل PDF إلى PDF/X‑4** وحفظ النتيجة. +4. **حفظ PDF كـ HTML** مع تخطي الصور النقطية. +5. إضافة ExtGState مخصص (حالة رسومية) إلى الصفحة الأولى. +6. حفظ PDF المعدل مع حالة الرسوميات الجديدة. + +يتم شرح كل خطوة أدناه، مع الشيفرة الكاملة والمنطق وراء الاختيارات. + +## الخطوة 1: تحميل مستند PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*لماذا هذا مهم*: تمثل الفئة `Document` ملف PDF بالكامل. تحميله مرة واحدة يتيح لك إعادة استخدام الكائن نفسه لجميع العمليات اللاحقة، مما يقلل من عبء الإدخال/الإخراج. + +## الخطوة 2: تعداد جميع أسماء حقول التوقيع + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*لماذا هذا مهم*: معرفة أسماء حقول التوقيع أمر أساسي عندما تحتاج إلى التحقق منها أو إزالتها أو استبدال التوقيعات الرقمية لاحقًا. مجموعة `Signatures` توفر عرضًا سريعًا للحقول لا يمكن تعديله. + +## الخطوة 3: تحويل PDF إلى PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**نقاط رئيسية** + +* `PdfStandard.PdfX4` يخبر Aspose.Pdf بدمج جميع الموارد المطلوبة (الخطوط، ملفات تعريف الألوان) وفرض قيود PDF/X‑4. +* التحويل يتم في الذاكرة؛ يتم كتابة الملف النهائي فقط إلى القرص، مما يبقي العملية سريعة. + +> **نصيحة احترافية:** تحقق من الناتج باستخدام أداة تدقيق PDF/X‑4 (مثل Adobe Preflight) إذا كان سير العمل اللاحق يتطلب التوافق الصارم. + +## الخطوة 4: حفظ PDF كـ HTML مع تخطي الصور النقطية + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**لماذا قد تحتاج ذلك**: مخرجات HTML مفيدة للمعاينة على الويب أو فهرسة المحتوى. تخطي الصور النقطية (`SkipRasterImages = true`) يجعل HTML خفيفًا ويحسن أوقات التحميل، خاصةً عندما يحتوي PDF الأصلي على مسحات عالية الدقة. + +## الخطوة 5: إضافة ExtGState مخصص إلى الصفحة الأولى + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*شرح*: كائن **ExtGState** يتحكم في الشفافية، وضع المزج، ومعلمات رسومية أخرى. بإضافة `GS0` يمكنك لاحقًا الإشارة إلى هذه الحالة في تدفقات المحتوى (مثلًا لإنشاء طبقات شبه شفافة). يستخدم الشيفرة واجهة COS منخفضة المستوى لأن Aspose.Pdf لا يوفر غلافًا عالي المستوى لإنشاء ExtGState. + +## الخطوة 6: حفظ PDF المعدل مع ExtGState الجديد + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +الملف النهائي (`sample_with_extgstate.pdf`) يحتوي على: + +* جميع الصفحات والمحتوى الأصلي. +* نسخة PDF/X‑4 متوافقة (`sample_pdfx4.pdf`). +* تمثيل HTML بدون صور نقطية (`sample.html`). +* ExtGState مخصص (`GS0`) مرفق بموارد الصفحة الأولى. + +### مخرجات وحدة التحكم المتوقعة + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +إذا لم يحتوي PDF المصدر على توقيعات، فإن الحلقة لا تطبع شيئًا لكنها تستمر دون حدوث خطأ. + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | التعديل | +|-----------|------------| +| **PDF لا يحتوي على صفحات** | تحقق من `doc.Pages.Count` قبل الوصول إلى `doc.Pages[1]` لتجنب `IndexOutOfRangeException`. | +| **تحتاج إلى PDF/A‑2b بدلاً من PDF/X‑4** | غيّر `PdfStandard.PdfX4` إلى `PdfStandard.PdfA2b` في `PdfFormatConversionOptions`. | +| **تريد الاحتفاظ بالصور النقطية** | اضبط `SkipRasterImages = false` (أو احذف الخاصية) في `HtmlSaveOptions`. | +| **عدة كائنات ExtGState** | استخدم مفاتيح فريدة (`GS1`, `GS2`, …) عند الإضافة إلى `extGStateDict`. | +| **PDF كبير (مئات الميجابايت)** | فعّل `doc.OptimizeResources = true` قبل الحفظ لتقليل استهلاك الذاكرة. | + +## الشيفرة الكاملة (قابلة للتنفيذ) + + + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شيفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [دليل شامل: تحويل PDF إلى HTML باستخدام Aspose.PDF .NET مع استراتيجيات مخصصة](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [تحويل PDF إلى HTML مع عناوين URL للصور المخصصة باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [تحويل PDF إلى HTML باستخدام Aspose.PDF .NET: حفظ الصور كملفات PNG خارجية](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/programming-with-forms/_index.md b/pdf/arabic/net/programming-with-forms/_index.md index 60f601114a..1c0661ebd6 100644 --- a/pdf/arabic/net/programming-with-forms/_index.md +++ b/pdf/arabic/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ | [تعيين تسمية توضيحية لأزرار الراديو](./set-radio-button-caption/) تعرّف على كيفية ضبط تسميات أزرار الاختيار في ملفات PDF باستخدام Aspose.PDF لـ .NET. يرشدك هذا الدليل خطوة بخطوة خلال تحميل نماذج PDF وتعديلها وحفظها. | [مربع النص](./text-box/) اكتشف كيفية إضافة مربعات نصية بسهولة إلى ملفات PDF باستخدام Aspose.PDF لـ .NET من خلال هذا الدليل المفصل. حسّن تفاعل المستخدم. | [كيفية إنشاء PDF باستخدام Aspose – إضافة حقل نموذج وصفحات](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) تعلم كيفية إنشاء مستند PDF وإضافة حقول نموذجية وصفحات باستخدام Aspose.PDF لـ .NET خطوة بخطوة. +| [إنشاء حقل نموذج PDF في C# – دليل خطوة بخطوة](./create-pdf-form-field-in-c-step-by-step-guide/) تعلم كيفية إنشاء حقل نموذج PDF باستخدام C# و Aspose.PDF خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/arabic/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..3223ff1767 --- /dev/null +++ b/pdf/arabic/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: إنشاء حقل نموذج PDF بسرعة باستخدام C#. تعلم كيفية إضافة مربع نص إلى PDF + وتعديل PDF لتضمين مربع النص باستخدام Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: ar +lastmod: 2026-08-14 +og_description: إنشاء حقل نموذج PDF باستخدام C#. يوضح هذا البرنامج التعليمي كيفية + إضافة مربع نص إلى ملف PDF وتعديل ملف PDF لتضمين مربع نص باستخدام Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: إنشاء حقل نموذج PDF في C# – دليل برمجي كامل +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: إنشاء حقل نموذج PDF في C# – دليل خطوة بخطوة +url: /ar/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إنشاء حقل نموذج PDF في C# – دليل خطوة بخطوة + +إذا كنت بحاجة إلى **إنشاء حقل نموذج PDF** في مستند، فإن هذا الدليل سيرشدك خلال العملية بأكملها. سترى بالضبط كيفية **إضافة مربع نص إلى PDF** في الصفحات، وكيفية **تعديل PDF لتضمين مربع نص** باستخدام مكتبة Aspose.PDF لـ .NET. + +التعامل مع نماذج PDF هو مطلب شائع لأنظمة الفوترة، الاستطلاعات، أو أي سير عمل يجمع مدخلات المستخدم. بنهاية هذا الدرس ستحصل على مقتطف شفرة قابل لإعادة الاستخدام ينشئ حقل مربع نص يعمل بالكامل، يضعه في المكان الذي تريد، ويحفظ ملف PDF المحدث—كل ذلك دون مغادرة مشروع C# الخاص بك. + +## المتطلبات المسبقة + +* .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.7+) +* Visual Studio 2022 أو أي بيئة تطوير تدعم C# +* رخصة Aspose.PDF for .NET سارية (الإصدار التجريبي المجاني يعمل للتطوير) +* ملف PDF اسمه `input.pdf` موجود في دليل معروف (يستخدم الدرس `YOUR_DIRECTORY` كعنصر نائب) + +> **نصيحة احترافية:** إذا لم يكن لديك رخصة بعد، يمكنك طلب مفتاح مؤقت من موقع Aspose؛ المكتبة تعمل في وضع التقييم دون الحاجة لتغييرات في الشفرة. + +## كيفية إنشاء حقل نموذج PDF في C# (نظرة عامة) + +1. تحميل مستند PDF الموجود. +2. إنشاء كائن `TextBoxField` وتكوين اسمه ومظهره. +3. إضافة تعليقة widget تحدد المستطيل البصري على الصفحة المستهدفة. +4. إدراج الحقل في مجموعة نماذج المستند. +5. حفظ PDF المعدل. + +يتم شرح كل خطوة بالتفصيل أدناه، مع أمثلة شفرة كاملة وتبرير الاستدعاءات API. + +## الخطوة 1: تحميل مستند PDF + +العملية الأولى هي قراءة ملف PDF المصدر. تمثل Aspose.PDF ملف PDF باستخدام الفئة `Document`. تحميل المستند يمنحك الوصول إلى صفحاته، مجموعة النماذج، والهياكل الأخرى. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**لماذا هذا مهم:** +تحميل الملف ينشئ نموذجًا في الذاكرة من PDF، مما يتيح لك إضافة أو إزالة أو تعديل الكائنات دون إتلاف الملف الأصلي. كما أن كائن `Document` يعرض الخاصية `Form`، وهي المكان الذي ستقوم فيه لاحقًا **بإضافة مربع نص إلى PDF**. + +## الخطوة 2: إنشاء حقل مربع نص + +حقل مربع النص هو نوع من حقول النموذج يسمح للمستخدمين بكتابة نص حر. في Aspose.PDF تقوم بإنشائه عن طريق إنشاء كائن `TextBoxField`، وتمرير الصفحة المستهدفة ومستطيل يحدد الحجم الأولي للـ widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**لماذا هذا مهم:** +* `PartialName` هو المفتاح الذي تستخدمه أدوات معالجة النماذج (مثل Adobe Acrobat، المحللات على الخادم) لاسترجاع القيمة المدخلة. +* المستطيل الذي تمرره هنا يحدد فقط حجم الـ widget *الأولي*؛ يمكنك لاحقًا تعديل موقعه البصري باستخدام تعليقة widget (الخطوة التالية). +* ضبط `DefaultAppearance` يضمن أن النص داخل المربع يُعرض بشكل متسق عبر عارضات PDF. + +## الخطوة 3: تعريف تعليقة widget البصرية + +يمكن لحقل النموذج أن يحتوي على واحد أو أكثر من **تعليقات widget** التي تتحكم في مكان ظهور الحقل في كل صفحة. بإضافة widget يمكنك وضع الحقل المنطقي نفسه في موقع مختلف أو حتى على صفحات متعددة. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**لماذا هذا مهم:** +مستطيل الـ widget يحدد الإحداثيات على الشاشة التي يراها المستخدمون. إذا تخطيت هذه الخطوة، قد يكون الحقل موجودًا في بنية بيانات PDF لكنه لن يكون مرئيًا للمستخدم النهائي. إضافة widget هي الخطوة التي فعليًا **تضيف مربع نص إلى PDF**. + +## الخطوة 4: إضافة الحقل المكوَّن إلى نموذج المستند + +الآن بعد أن تم تكوين `TextBoxField` بالكامل، تحتاج إلى تسجيله في مجموعة نماذج PDF. هذا يجعل الحقل جزءًا من النموذج التفاعلي ويضمن حفظه. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**لماذا هذا مهم:** +بدون إضافة الحقل إلى `pdfDocument.Form`، سيتجاهل عارض PDF تعليقة widget، ولن يتم إرسال بيانات الحقل أبدًا. هذا السطر يُكمل عملية **تعديل PDF لتضمين مربع نص**. + +## الخطوة 5: حفظ PDF المحدث + +أخيرًا، اكتب التغييرات مرة أخرى إلى القرص. يمكنك استبدال الملف الأصلي أو إنشاء ملف جديد؛ المثال يحفظ إلى `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +عند فتح `output.pdf` في Adobe Acrobat Reader، سترى مربع نص مستطيل بعنوان “Comments” في الصفحة 2. يمكن للمستخدمين النقر داخل المربع، الكتابة، وستصبح النصوص المدخلة جزءًا من بيانات نموذج PDF. + +## مثال كامل يعمل + +بتجميع كل الأجزاء معًا، إليك برنامج كامل وجاهز للتنفيذ. انسخه إلى مشروع وحدة تحكم جديد، استبدل `YOUR_DIRECTORY` بمسار مجلد حقيقي، وشغّله. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**الناتج المتوقع:** +تشغيل البرنامج يطبع سطرين تأكيديين إلى وحدة التحكم. فتح `output.pdf` يظهر مربع نص في الصفحة 2 حيث يمكن للمستخدم كتابة تعليقات. عند إرسال النموذج (مثلاً عبر زر “Submit” في Adobe Acrobat)، يظهر اسم الحقل `Comments` في بيانات FDF أو XFDF المصدرة. + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | كيفية تعديل الشفرة | +|-----------|-----------------------| +| **إضافة الحقل إلى صفحة مختلفة** | غيّر `pdfDocument.Pages[1]` إلى فهرس الصفحة المطلوب (`0`‑مبني). | +| **إنشاء مربع نص متعدد الأسطر** | اضبط `textBox.Multiline = true;` قبل إضافة الـ widget. | +| **تعيين قيمة افتراضية** | عيّن `textBox.Value = "Enter your comments here";`. | +| **جعل الحقل مطلوبًا** | اضبط `textBox.Required = true;`. | +| **وضع الحقل على صفحات متعددة** | استدعِ `textBox.AddWidgetAnnotation` لكل مستطيل إضافي على الصفحات المستهدفة. | +| **استخدام خط مخصص** | حمّل الخط باستخدام `FontRepository.AddFont("path/to/font.ttf")` وأشر إليه في `DefaultAppearance`. | + +**نصيحة احترافية:** دائمًا تحقق من إحداثيات المستطيل مقابل حجم الصفحة (`pdfDocument.Pages[1].Rect`). إذا كان الـ widget يقع خارج حدود الصفحة، قد تقوم العارضات بقطع أو إخفاء الحقل. + +## اختبار حقل النموذج + +1. افتح `output.pdf` في Adobe Acrobat Reader. +2. انقر داخل صندوق “Comments”؛ يجب أن يظهر المؤشر. +3. اكتب أي نص واضغط **Tab** أو انقر في مكان آخر. +4. اختر **File → Save As** لحفظ القيمة المدخلة. +5. (اختياري) استخدم API `Form` في Aspose.PDF لاستخراج القيمة برمجيًا: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +هذا المقتطف يوضح أن الحقل ليس مرئيًا فحسب، بل يمكن استرجاعه عبر الشفرة—وهو أمر أساسي للمعالجة على جانب الخادم. + +## الخلاصة + +أنت الآن تعرف كيف **إنشاء حقل نموذج PDF** في C# من البداية إلى النهاية. غطى الدرس تحميل PDF، تكوين `TextBoxField`، إضافة تعليقة widget، تسجيل الحقل، وحفظ النتيجة. باستخدام هذه اللبنات الأساسية يمكنك **إضافة مربع نص إلى PDF**، **تعديل PDF لتضمين مربع نص**، وتوسيع النهج إلى أنواع حقول أخرى مثل مربعات الاختيار، أزرار الراديو، أو القوائم المنسدلة. + +بعد ذلك، استكشف المواضيع ذات الصلة مثل **استخراج بيانات النموذج**، **تسطيح نماذج PDF**، أو **تنسيق الحقول بالحدود والألوان**. كل من هذه المفاهيم يبني على نفس API الأساسي الذي تعلمته للتو، مما يتيح لك إنشاء ملفات PDF تفاعلية متقدمة بالكامل في C#. + +برمجة سعيدة، ولا تتردد في تجربة مستطيلات مختلفة، خطوط، وقواعد التحقق لتناسب احتياجات تطبيقك! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة شفرة كاملة تعمل مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [إنشاء مستند PDF باستخدام Aspose – إضافة صفحة، مربع نص، ونموذج](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [كيفية إنشاء PDF باستخدام Aspose – إضافة حقل نموذج وصفحات](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [كيفية إضافة ختم نصي إلى PDF باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/programming-with-operators/_index.md b/pdf/arabic/net/programming-with-operators/_index.md index 43ac049085..df080bd83a 100644 --- a/pdf/arabic/net/programming-with-operators/_index.md +++ b/pdf/arabic/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ | [ارسم XForm على الصفحة](./draw-xform-on-page/) | تعلم كيفية رسم XForms في PDF باستخدام Aspose.PDF لـ .NET مع هذا الدليل الشامل خطوة بخطوة. | | [مشغلات PDF](./pdf-operators/) دليل خطوة بخطوة لاستخدام مُشغّلات PDF مع Aspose.PDF لـ .NET. أضف صورة إلى صفحة PDF وحدد موقعها. | [إزالة الكائنات الرسومية في ملف PDF](./remove-graphics-objects/) تعرّف على كيفية إزالة الكائنات الرسومية من ملف PDF باستخدام Aspose.PDF لـ .NET في هذا الدليل التفصيلي. بسّط مهام معالجة ملفات PDF. +| [إنشاء قاموس PDF فارغ في C# باستخدام Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | تعلم كيفية إنشاء قاموس PDF فارغ باستخدام Aspose.Pdf في C# لتخصيص ملفات PDF بسهولة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/arabic/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..60a4c15724 --- /dev/null +++ b/pdf/arabic/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: إنشاء قاموس PDF فارغ في C# باستخدام Aspose.Pdf – تعلم كيفية إضافة حالة + رسومية إلى مجموعة ExtGState وتعديل ملفات PDF برمجيًا. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: ar +lastmod: 2026-08-14 +og_description: إنشاء قاموس PDF فارغ في C# باستخدام Aspose.Pdf. اتبع هذا الدليل الكامل + لإضافة حالة رسومية مخصصة إلى مجموعة ExtGState في PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: إنشاء قاموس PDF فارغ في C# – دليل Aspose.Pdf خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: إنشاء قاموس PDF فارغ في C# باستخدام Aspose.Pdf +url: /ar/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إنشاء قاموس PDF فارغ في C# باستخدام Aspose.Pdf + +إذا كنت بحاجة إلى **إنشاء كائنات قاموس PDF فارغة** أثناء العمل مع ملفات PDF، يوضح لك هذا الدليل بالضبط كيفية القيام بذلك في C# باستخدام مكتبة Aspose.Pdf. سواءً كنت تبني حالة رسومية مخصصة، أو تضيف موردًا جديدًا، أو تُعد قالبًا للاستخدام لاحقًا، فإن الخطوات أدناه تُقدم لك حلًا كاملاً قابلاً للتنفيذ. + +ستتعلم كيفية تحميل ملف PDF، الوصول إلى قاموس موارد الصفحة الأولى، بناء `CosPdfDictionary` جديد كليًا، وإدراجه في مجموعة `ExtGState`. في نهاية البرنامج التعليمي ستحصل على ملف `output.pdf` يحتوي على القاموس الذي تم إنشاؤه حديثًا. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من أن لديك: + +- .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.6+) +- Visual Studio 2022 أو أي بيئة تطوير C# تفضلها +- ترخيص Aspose.Pdf for .NET (أو مفتاح تقييم مؤقت) +- ملف PDF تجريبي يُدعى **input.pdf** موجود في مجلد يمكنك التحكم فيه (سيُستخدم مسار المجلد كـ `dataDir`) + +لا توجد حزم NuGet إضافية مطلوبة بخلاف `Aspose.Pdf`. + +## الخطوة 1: إعداد المشروع وإضافة مرجع Aspose.Pdf + +1. أنشئ مشروع **Console App** جديد في Visual Studio. +2. افتح **NuGet Package Manager** وقم بتثبيت `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. أضف توجيهات `using` التالية في أعلى ملف `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *لماذا هذه المساحات الاسمية؟* يحتوي `Aspose.Pdf` على الفئة الأساسية `Document`، بينما توفر `Aspose.Pdf.Operators.Gfx` الفئات `CosPdfDictionary`، `CosPdfNumber`، وغيرها من كائنات PDF منخفضة المستوى اللازمة **لإنشاء قاموس PDF فارغ**. + +## الخطوة 2: تحميل ملف PDF المصدر + +العملية الأولى هي تحميل ملف PDF الموجود إلى كائن `Document`. هذا يمنحك إمكانية الوصول إلى جميع الصفحات والموارد والقواميس منخفضة المستوى. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*شرح*: يقوم `Document` بقراءة الملف إلى الذاكرة ويُعد البُنى الداخلية. يضمن بيان `using` تحرير مقبض الملف بعد الانتهاء من المعالجة. + +## الخطوة 3: الوصول إلى قاموس موارد الصفحة الأولى + +كل صفحة PDF لديها قاموس **Resources** يجمع الخطوط، الصور، كائنات ExtGState، وغيرها من الموارد المشتركة. لإدراج حالة رسومية جديدة نحتاج إلى تعديل هذا القاموس. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` هو فئة مساعدة تسمح لك بمعاملة قاموس PDF كـ `Dictionary` في C#. + +## الخطوة 4: استرجاع (أو إنشاء) مجموعة ExtGState + +`ExtGState` يحتوي على كائنات حالة الرسومات مثل الشفافية، وضع المزج، وعرض الخط. إذا كان ملف PDF المصدر يحتوي بالفعل على مدخل `ExtGState`، فسنستخدمه؛ وإلا سننشئ قاموسًا فارغًا جديدًا. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*لماذا هذا الفحص؟* بعض ملفات PDF لا تتضمن مدخل `ExtGState` على الإطلاق. من خلال معالجة الحالتين يبقى البرنامج التعليمي قويًا لأي ملف إدخال. + +## الخطوة 5: **إنشاء قاموس PDF فارغ** لحالة رسومية جديدة + +الآن نقوم فعليًا **بإنشاء كائنات قاموس PDF فارغة** تُعرّف معلمات حالة الرسومات. يبدأ القاموس فارغًا، ثم نضيف المفاتيح المطلوبة: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### ما يقوم به كل مدخل + +| المفتاح | النوع | المعنى | +|--------|-------|--------| +| **CA** | `CosPdfNumber` | شفافية الخط (النطاق 0‑1). | +| **ca** | `CosPdfNumber` | شفافية التعبئة (النطاق 0‑1). | +| **BM** | `CosPdfName` | وضع المزج؛ `"Normal"` هو الأكثر شيوعًا. | + +نظرًا لأننا بدأنا بـ **قاموس PDF فارغ**، لدينا سيطرة كاملة على أي مدخلات نضيفها. يمكنك توسيع هذا القاموس بإضافة معلمات حالة رسومية إضافية مثل `LW` (عرض الخط) أو `LC` (نهاية الخط) عند الحاجة. + +## الخطوة 6: إدراج حالة الرسومات الجديدة في ExtGState + +يعمل قاموس `ExtGState` كخريطة حيث يُحدَّد كل مدخل باسم (مثل `GS0`، `GS1`). نضيف القاموس الذي أنشأناه حديثًا تحت مفتاح فريد. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +إذا كنت تخطط لإضافة حالات متعددة، قم بزيادة اللاحقة (`GS1`, `GS2`, …) لتجنب تصادم الأسماء. + +## الخطوة 7: حفظ ملف PDF المعدل + +أخيرًا، اكتب التغييرات إلى القرص. تقوم طريقة `Save` تلقائيًا بتسلسل القواميس المحدثة. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +افتح `output.pdf` في أي عارض PDF وتفقد مدخل **Resources → ExtGState** (معظم العارضات تُخفي هذا، لكن أدوات مثل Adobe Acrobat Preflight أو PDF‑Tron يمكنها إظهاره). يجب أن ترى مدخل `GS0` يحتوي على قيم الشفافية ووضع المزج التي عرّفتها. + +## مثال عملي كامل + +بدمج جميع الأجزاء معًا، إليك البرنامج الكامل الذي يمكنك نسخه‑لصقه في `Program.cs` وتشغيله: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**الناتج المتوقع** – يطبع الطرفية سطر تأكيد، ويحتوي `output.pdf` على المدخل الجديد `GS0` ضمن `ExtGState`. عندما تقوم برندر صفحة تُشير إلى `GS0` (مثلاً عبر مشغل تدفق المحتوى `gs`)، ستكون الخطوط غير شفافة تمامًا بينما تكون التعبئات شفافة بنسبة 50 %. + +## أسئلة شائعة وتعامل مع الحالات الخاصة + +| السؤال | الجواب | +|--------|--------| +| *ماذا لو كان PDF يحتوي على صفحات متعددة؟* | المثال يستهدف الصفحة الأولى (`Pages[1]`). لتطبيق التغييرات على جميع الصفحات، قم بالتكرار عبر `pdfDocument.Pages` وكرر الخطوات 3‑5 لكل موارد صفحة. | +| *هل يمكنني إضافة القاموس إلى صفحة لديها بالفعل مدخل ExtGState باسم “GS0”?* | نعم، لكن عليك استخدام مفتاح مختلف (`GS1`, `GS2`, …) لتجنب الكتابة فوق المدخل الموجود. | +| *هل من الآمن تعديل القاموس بعد الحفظ؟* | بمجرد استدعاء `Save`، يصبح تمثيل الذاكرة منفصلًا عن الملف. يمكنك الاستمرار في تعديل كائن `Document` واستدعاء `Save` مرة أخرى إذا لزم الأمر. | +| *هل أحتاج إلى ترخيص لـ Aspose.Pdf لاستخدام ` | | + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة‑بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية إنشاء خطوط متقطعة في ملفات PDF باستخدام Aspose.PDF for .NET: دليل خطوة بخطوة](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [كيفية إزالة الرسومات من ملفات PDF باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [كيفية إنشاء ملفات PDF متعددة الطبقات باستخدام Aspose.PDF for .NET: دليل شامل](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/programming-with-security-and-signatures/_index.md b/pdf/arabic/net/programming-with-security-and-signatures/_index.md index 0adf9f140d..3c1614c4c5 100644 --- a/pdf/arabic/net/programming-with-security-and-signatures/_index.md +++ b/pdf/arabic/net/programming-with-security-and-signatures/_index.md @@ -35,7 +35,8 @@ | [التوقيع باستخدام البطاقة الذكية باستخدام حقل التوقيع](./sign-with-smart-card-using-signature-field/) | تعرّف على كيفية توقيع ملفات PDF بأمان باستخدام بطاقة ذكية باستخدام Aspose.PDF لـ .NET. اتبع دليلنا خطوة بخطوة لسهولة التنفيذ. | | [التحقق من توقيعات PDF في C# – كيفية قراءة ملفات PDF الموقعة](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | تعلم كيفية قراءة والتحقق من التوقيعات الرقمية في ملفات PDF باستخدام C# و Aspose.PDF. | | [التحقق من توقيع PDF في C# – دليل برمجة كامل](./verify-pdf-signature-in-c-complete-programming-guide/) | تعلم كيفية التحقق من صحة توقيع PDF باستخدام C# و Aspose.PDF في دليل شامل خطوة بخطوة. | -| [كيفية إصلاح ملفات PDF – دليل C# كامل باستخدام Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | تعلم كيفية إصلاح ملفات PDF المتضررة باستخدام Aspose.PDF لـ .NET في دليل شامل خطوة بخطوة بلغة C#. | +| [كيفية إصلاح ملفات PDF – دليل C# كامل باستخدام Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | تعلم كيفية إصلاح ملفات PDF المتضررة باستخدام Aspose.PDF لـ .NET في دليل شامل خطوة بخطوة بلغة C#. | +| [إنشاء خيارات التوقيع في C# – دليل كامل للتوقيع الرقمي](./create-signature-options-in-c-full-guide-to-digital-signing/) | تعلم كيفية إنشاء خيارات توقيع متقدمة في C# باستخدام Aspose.PDF لتوقيع رقمي موثوق. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/arabic/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..ce854e44c3 --- /dev/null +++ b/pdf/arabic/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-08-14 +description: إنشاء خيارات التوقيع في C# لتطبيق التوقيع الرقمي. تعلم كيفية تكوين التوقيع، + وتنفيذ دالة تجزئة مخصصة، وتوقيع المستندات برمجياً. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: ar +lastmod: 2026-08-14 +og_description: إنشاء خيارات التوقيع في C# وتطبيق توقيع رقمي. يشرح هذا الدليل كيفية + تكوين التوقيع، وإضافة دالة تجزئة مخصصة، وتوقيع مستند. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: إنشاء خيارات التوقيع في C# – دليل التوقيع الرقمي خطوة بخطوة +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: إنشاء خيارات التوقيع في C# – دليل كامل للتوقيع الرقمي +url: /ar/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إنشاء خيارات التوقيع في C# – دليل كامل للتوقيع الرقمي + +إنشاء خيارات التوقيع في C# لتكوين سير عمل التوقيع الرقمي. يوضح هذا الدرس كيفية تطبيق التوقيع الرقمي، وتنفيذ دالة تجزئة مخصصة، وتوقيع مستند باستخدام الفئة `SignatureOptions`. إذا احتجت يومًا إلى توقيع ملف PDF أو XML أو أي حمولة ثنائية من تطبيق .NET، فإن الخطوات أدناه توفر لك حلاً جاهزًا للتنفيذ. + +ستتعلم كيف أن: + +* تهيئة `SignatureOptions` باستخدام خوارزمية تجزئة مخصصة، +* استدعاء طريقة التوقيع بشكل صحيح، +* التحقق من أن التوقيع تم تطبيقه، +* تجنب المشكلات الشائعة عند تكوين التوقيع. + +المتطلبات المسبقة الوحيدة هي .NET SDK حديث (≥ .NET 6) ومكتبة توقيع تُظهر `SignatureOptions` (مثلاً، **GroupDocs.Signature**، **Aspose.Signature**، أو واجهة برمجة تطبيقات مشابهة). لا توجد أدوات خارجية مطلوبة. + +--- + +## المتطلبات المسبقة + +| المتطلب | لماذا يهم | +|---------|-----------| +| .NET 6 SDK أو أحدث | يوفر ميزات اللغة الحديثة المستخدمة في الأمثلة. | +| حزمة NuGet لمكتبة توقيع (مثال، `GroupDocs.Signature`) | تزود بنوع `SignatureOptions` وطريقة الامتداد `Sign`. | +| الوصول إلى مفتاح خاص أو شهادة | مطلوب لإنشاء توقيع رقمي قابل للتحقق. | + +ثبت المكتبة باستخدام سطر الأوامر القياسي: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## الخطوة 1: إنشاء خيارات التوقيع + +الخطوة الأولى هي إنشاء كائن `SignatureOptions` وتعيين الخصائص التي تتحكم في عملية التوقيع. هذا الكائن يخبر المكتبة *ماذا* يتم توقيعه و*كيف* يتم توقيعه. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**لماذا هذا مهم:** `SignatureOptions` يعمل كعقد بين الشيفرة الخاصة بك ومحرك التوقيع. من خلال تكوينه مسبقًا تتجنب تكرار الكود الروتيني عند توقيع مستندات متعددة. + +--- + +## الخطوة 2: تنفيذ دالة تجزئة مخصصة + +تمنحك *دالة التجزئة المخصصة* تحكمًا كاملاً في الخلاصة التي يوقعها خوارزمية التوقيع. يكون هذا مفيدًا عندما لا يلبي التجزئة الافتراضية (SHA‑256) متطلبات الامتثال أو عندما تحتاج إلى تجزئة جزء من المستند. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**لماذا هذا مهم:** من خلال تعيين `CustomSignHash`، تستبدل خطوة التجزئة الداخلية للمكتبة بـ `MyHash`. سيقوم محرك التوقيع الآن بتوقيع البايتات التي تُرجعها دالتك، مما يضمن الامتثال لأي سياسة مخصصة. + +--- + +## الخطوة 3: تحميل المستند وتطبيق التوقيع الرقمي + +بعد إعداد الخيارات، يمكنك الآن فتح الملف المستهدف واستدعاء طريقة التوقيع. الطريقة `Sign` مقدمة من المكتبة وتستخدم `SignatureOptions` المُكوَّنة. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**لماذا هذا مهم:** استدعاء `Sign` ينفّذ ثلاث عمليات داخليًا: + +1. **حساب التجزئة** – الآن يتم تفويضه إلى دالة التجزئة المخصصة الخاصة بك. +2. **إنشاء التوقيع** – باستخدام المفتاح الخاص المقدم إلى تكوين المكتبة. +3. **الإدماج** – يتم إرفاق التوقيع المُنشأ بالملف الناتج. + +إذا فشل أي خطوة، تُعيد الطريقة `false`، مما يتيح لك معالجة الخطأ بشكل سلس. + +--- + +## الخطوة 4: التحقق من توقيع المستند + +تحقق سريع يثبت أن التوقيع تم تطبيقه بشكل صحيح. معظم المكتبات توفر طريقة `Verify` التي تتحقق من سلامة الملف الموقع. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**لماذا هذا مهم:** التحقق يضمن أن المستند الموقع لم يتم العبث به بعد التوقيع وأن التجزئة المخصصة أنتجت خلاصة متوافقة. + +--- + +## كيفية تكوين التوقيع لأنواع الملفات المختلفة + +يمكن إعادة استخدام كائن `SignatureOptions` نفسه لملفات PDF، ومستندات Word، والصور، أو الملفات الثنائية العادية. التغيير الوحيد المطلوب هو فئة الخيارات المحددة (مثل `PdfSignatureOptions`، `WordSignatureOptions`). إليك مثال سريع لصورة JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**لماذا هذا مهم:** فهم كيفية *تكوين التوقيع* لكل تنسيق يتيح لك توسيع قاعدة الشيفرة نفسها عبر أنواع مستندات متعددة دون إعادة كتابة منطق التجزئة. + +--- + +## المشكلات الشائعة وأفضل الممارسات + +| المشكلة | الحل الموصى به | +|----------|----------------| +| نسيان تعيين `CustomSignHash` بعد إنشاء `SignatureOptions` | عيّن المُفوض مباشرةً بعد إنشاء كائن الخيارات. | +| استخدام خوارزمية تجزئة لا يدعمها شهادة التوقيع | تحقق من أن استخدام المفتاح في الشهادة يتطابق مع طول التجزئة (مثال، RSA‑2048 مع SHA‑512). | +| إغفال الحاجة إلى تحرير كائنات `Signature` | ضع كائن `Signature` داخل كتلة `using` لتحرير مقابض الملفات. | +| حفظ الملف الموقع فوق المصدر الأصلي | دائمًا احفظ إلى مسار ملف جديد (`outputPath`) للحفاظ على المستند الأصلي. | + +--- + +## مثال كامل يعمل + +فيما يلي برنامج مستقل يجمع جميع الأجزاء معًا. انسخه إلى مشروع وحدة تحكم جديد وشغّله؛ سيظهر وحدة التحكم نجاح العملية أو فشلها. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**الناتج المتوقع** + +``` +Signature verified successfully. +``` + +إذا طبع وحدة التحكم “Signing failed.” أو “Signature verification failed.”، فتحقق مرة أخرى من تكوين الشهادة وتأكد من أن دالة التجزئة المخصصة تُعيد مصفوفة بايت بالحجم المتوقع. + +--- + +## الخلاصة + +أنت الآن تعرف كيف **تنشئ خيارات التوقيع** في C#، وترفق **دالة تجزئة مخصصة**، وت **تطبق التوقيع الرقمي** على أي مستند مدعوم. غطى الدرس دورة الحياة الكاملة: تكوين الخيارات، توقيع الملف، والتحقق من النتيجة. من خلال إعادة استخدام نفس كائن `SignatureOptions` يمكنك أيضًا **كيفية تكوين التوقيع** للصور، ملفات Word، أو الملفات الثنائية الخام. + +--- + +## ما التالي؟ + +* استكشف خصائص `SignatureOptions` الإضافية مثل الطوابع البصرية، خوادم الطوابع الزمنية، وسلاسل الشهادات – هذه تتماشى مع كلمة **apply digital signature**. +* جرّب خوارزميات تجزئة أخرى (مثال، Blake2b) عن طريق استبدال التنفيذ داخل `MyHash`. +* دمج تدفق التوقيع في واجهة برمجة تطبيقات ويب لتمكين توقيع المستندات أثناء التشغيل – امتداد طبيعي لـ **how to sign document** في بنية معمارية موجهة للخدمات. + +لا تتردد في تعديل الشيفرة لتتناسب مع سياسات الأمان الخاصة بك، ومشاركة تجربتك في التعليقات. توقيع سعيد! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة شيفرة كاملة تعمل مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية تغيير لغة توقيع PDF باستخدام Aspose.PDF لـ .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [دورة توقيع رقمي Aspose Pdf .NET (ألمانية)](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [دورة توقيع رقمي Aspose Pdf .NET (فرنسية)](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/programming-with-stamps-and-watermarks/_index.md b/pdf/arabic/net/programming-with-stamps-and-watermarks/_index.md index cd223fbc1b..cf7dffe1a1 100644 --- a/pdf/arabic/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/arabic/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ | [النص في تذييل ملف PDF](./text-in-footer/) |تعرف على كيفية إضافة نص في تذييل ملف PDF باستخدام Aspose.PDF لـ .NET. | | [النص في رأس ملف PDF](./text-in-header/) تعلم كيفية إضافة عناوين نصية إلى ملفات PDF باستخدام Aspose.PDF لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. حسّن مستنداتك بكفاءة وفعالية. | | [إضافة ترقيم بايتس إلى PDF في C# – دليل كامل](./add-bates-numbering-pdf-in-c-complete-guide/) | تعرف على كيفية إضافة ترقيم بايتس إلى ملفات PDF باستخدام Aspose.PDF لـ .NET في دليل شامل خطوة بخطوة. | +| [كيفية تعيين خيارات ترقيم بايتس في C# – دليل كامل](./how-to-set-bates-numbering-options-in-c-complete-guide/) | تعلم كيفية ضبط خيارات ترقيم بايتس في ملفات PDF باستخدام Aspose.PDF لـ .NET عبر دليل شامل خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/arabic/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..d23a61baf1 --- /dev/null +++ b/pdf/arabic/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: كيفية ضبط خيارات ترقيم باتس في C# باستخدام GroupDocs. اتبع هذا الدليل + خطوة بخطوة لإضافة بادئات مخصصة وأرقام بدء عند تحويل Word إلى PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: ar +lastmod: 2026-08-14 +og_description: كيفية ضبط خيارات ترقيم باتس بسرعة في C#. يوضح لك هذا الدليل كيفية + إضافة بادئات مخصصة وأرقام بدء عند تحويل Word إلى PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: كيفية ضبط خيارات ترقيم باتس في C# – دليل خطوة بخطوة +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: كيفية ضبط خيارات ترقيم بايتس في C# – دليل كامل +url: /ar/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية ضبط خيارات ترقيم بايتس في C# – دليل كامل + +إذا كنت تحتاج إلى **كيفية ضبط خيارات ترقيم بايتس** في C#، فإن هذا الدليل يشرح لك الخطوات الدقيقة. ستتعلم كيفية تكوين رقم البداية، إضافة بادئة، وتطبيق الترقيم أثناء تحويل مستند Word إلى PDF باستخدام GroupDocs API. + +غالبًا ما يتطلب معالجة المستندات معرفات فريدة على كل صفحة لأغراض قانونية أو أرشيفية. بنهاية هذا الدرس ستحصل على مقطع شفرة قابل لإعادة الاستخدام يمكنك إدراجه في أي مشروع .NET، سواء كنت تبني أداة دعم تقاضي أو مولد تقارير آلي. لا تحتاج إلى أدوات خارجية—فقط مكتبة GroupDocs.Conversion وعدة أسطر من C#. + +## ما ستحتاجه + +قبل أن تبدأ، تأكد من توفر ما يلي: + +* .NET 6.0 SDK أو أحدث مثبت +* Visual Studio 2022 (أو أي بيئة تطوير تدعم .NET) +* ترخيص صالح لـ GroupDocs.Conversion (الإصدار التجريبي المجاني يكفي للاختبار) +* مستند Word تجريبي (`input.docx`) تريد ترقيمه + +هذه المتطلبات المسبقة تضمن تشغيل الشيفرة دون إعدادات إضافية. + +## نظرة عامة على ضبط خيارات ترقيم بايتس + +تكمن جوهر **كيفية ضبط خيارات ترقيم بايتس** في ثلاثة كائنات: + +1. `Document` – يحمل الملف المصدر. +2. `BatesNumberingOptions` – يحتوي على رقم البداية، البادئة، وتفاصيل التنسيق الأخرى. +3. `AddBatesNumbering` – الطريقة التي تُدرج الترقيم في كل صفحة. + +فهم سبب وجود كل جزء يساعدك على تكييف الحل مع سيناريوهات أكثر تعقيدًا، مثل الخطوط المخصصة أو الترقيم متعدد اللغات. + +## الخطوة 1: تثبيت حزمة NuGet الخاصة بـ GroupDocs.Conversion + +افتح الطرفية في مجلد الحل الخاص بك وشغّل: + +```bash +dotnet add package GroupDocs.Conversion +``` + +توفر **GroupDocs API** الفئة `Document` وطريقة الامتداد `AddBatesNumbering` المستخدمة لاحقًا في الدرس. + +## الخطوة 2: تحميل المستند المصدر + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*لماذا هذه الخطوة؟* +تحميل الملف يُنشئ تمثيلًا في الذاكرة يمكن لمحرك التحويل التلاعب به. بدون كائن `Document` لا يمكنك تطبيق ترقيم بايتس أو أي تحويل آخر. + +## الخطوة 3: إنشاء خيارات ترقيم بايتس + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*لماذا هذه الخطوة؟* +`BatesNumberingOptions` يجمع كل الإعدادات التي قد تحتاجها عند **ضبط خيارات ترقيم بايتس**. تعديل `StartNumber` و`Prefix` يتيح لك مواءمة المخرجات مع نظام إدارة القضايا الخاص بك. خاصية `Position` تتحكم في موضع الترقيم بصريًا، وهو غالبًا ما يكون مطلبًا للامتثال. + +## الخطوة 4: تطبيق ترقيم بايتس على المستند + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +طريقة `AddBatesNumbering` تمر على كل صفحة من الـ `Document` المحمل وتُدرج السلسلة المكوَّنة. لأن الطريقة تعمل على التمثيل في الذاكرة، يمكنك ربط خطوات معالجة إضافية (مثل إضافة علامة مائية) قبل الحفظ. + +## الخطوة 5: التحويل والحفظ كملف PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*لماذا هذه الخطوة؟* +الحفظ كـ PDF هو التنسيق النهائي الشائع للمستندات القانونية. يتيح لك كائن `PdfConvertOptions` ضبط المخرجات بدقة، لكنه غير ضروري للترقيم الأساسي. استدعاء `Save` يكتب ملف PDF المرقم بالكامل إلى القرص. + +## مثال كامل قابل للتنفيذ + +بجمع كل ما سبق، إليك تطبيق console مكتمل يمكنك تجميعه وتشغيله: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**الناتج المتوقع** + +تشغيل البرنامج يُنشئ `output.pdf` حيث يظهر على كل صفحة تسمية مثل `CASE-1000`، `CASE-1001`، إلخ، موضوعة في تذييل الصفحة الأيمن. افتح الـ PDF بأي عارض لتتأكد من ظهور الأرقام كما هو متوقع. + +## المشكلات الشائعة وأفضل الممارسات + +| المشكلة | سبب حدوثه | كيفية تجنبه | +|-------|----------------|-----------------| +| **المسارات النسبية تسبب استثناء `FileNotFoundException`** | دليل العمل لتطبيق الكونسول قد يختلف عن دليل Visual Studio. | استخدم مسارات مطلقة أو `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **الترقيم يتداخل مع التذييلات الموجودة** | إذا كان المستند الأصلي يحتوي بالفعل على محتوى في منطقة التذييل المختارة، قد يتم إخفاء الرقم الجديد. | اختر `Position` مختلفًا (مثال: `HeaderLeft`) أو عدل قالب المصدر. | +| **المستندات الكبيرة بطيئة** | ترقيم بايتس يتنقل عبر كل صفحة؛ استهلاك الذاكرة يزداد مع حجم الملف. | عالج المستند على دفعات باستخدام `Document.Split` إذا تجاوزت 500 صفحة. | +| **انتهاء الترخيص** | نسخة التجربة المجانية من GroupDocs تنتهي بعد 30 يومًا، مما يسبب استثناءً عند استدعاء `AddBatesNumbering`. | قم بتطبيق مفتاح ترخيص صالح قبل تحميل المستند: `License license = new License(); license.SetLicense("license.lic");`. | + +**نصيحة احترافية:** إذا كنت تحتاج إلى تنسيق رقم مختلف لكل قضية (مثال: `2023-CASE-001`)، ابنِ البادئة ديناميكيًا قبل إنشاء `BatesNumberingOptions`. + +## توسيع الحل + +نفس نهج **Bates numbering C#** يعمل مع صيغ مصدر أخرى مثل `.txt`، `.html`، أو حتى الصور. ما عليك سوى تغيير امتداد الملف عند إنشاء كائن `Document`، وسيتولى محرك التحويل الباقي. + +يمكنك أيضًا دمج **تحويل المستندات C#** مع OCR للملفات PDF الممسوحة ضوئيًا: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## الخلاصة + +أنت الآن تعرف **كيفية ضبط خيارات ترقيم بايتس** في C# من البداية حتى النهاية. بإنشاء كائن `BatesNumberingOptions`، تطبيقه عبر `AddBatesNumbering`، وحفظ النتيجة كملف PDF، يمكنك أتمتة إنتاج مستندات قانونية متوافقة ومُعرَّفة بشكل فريد. + +من هنا يمكنك استكشاف مواضيع ذات صلة مثل **إنشاء PDF بـ C#**، **تحويل المستندات C#**، أو ميزات متقدمة في **GroupDocs API** مثل إضافة العلامات المائية والتوقيعات الرقمية. جرّب بادئات، مواضع، وتنسيقات أرقام مختلفة لتتناسب مع سير عملك. + +برمجة سعيدة! + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [إضافة ترقيم بايتس PDF في C# – دليل كامل](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [كيفية إضافة وتخصيص أرقام الصفحات في PDFs باستخدام Aspose.PDF for .NET | دليل معالجة المستندات](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [كيفية إضافة تذييل طابع نصي في PDFs باستخدام Aspose.PDF for .NET: دليل خطوة بخطوة](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/annotations/_index.md b/pdf/chinese/net/annotations/_index.md index 6700f98e21..09d3751b1e 100644 --- a/pdf/chinese/net/annotations/_index.md +++ b/pdf/chinese/net/annotations/_index.md @@ -35,6 +35,7 @@ | [设置自由文本注释格式](./setfreetextannotationformatting/) 通过本分步指南了解如何使用 Aspose.PDF for .NET 在 PDF 文档中设置自由文本注释格式。| | [删除单词](./strikeoutwords/) 学习如何使用 Aspose.PDF for .NET 在 PDF 中删除文字,并遵循本指南的全面步骤。提升您的文档编辑技能。| | [更新自由文本 PDF 注释](./updatefreetextannotation/) 通过本分步指南了解如何使用 Aspose.PDF for .NET 更新 PDF 文档中的自由文本注释。| +| [在 PDF 上绘制矩形 – 步骤详解 C# 指南](./draw-rectangle-on-pdf-step-by-step-c-guide/) 本教程详细演示如何使用 Aspose.PDF for .NET 在 PDF 中绘制矩形,提供完整的 C# 示例代码。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/chinese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..ad3451cc18 --- /dev/null +++ b/pdf/chinese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: 使用 C# 快速在 PDF 上绘制矩形。了解如何定义矩形尺寸并仅用几行代码将形状添加到 PDF 页面。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: zh +lastmod: 2026-08-14 +og_description: 使用 C# 在几秒钟内在 PDF 上绘制矩形。本指南展示如何定义矩形尺寸、添加形状以及验证页面边界,以实现可靠的 PDF 图形。 +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: 在 PDF 上绘制矩形 – 完整的 C# 教程 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: 在 PDF 上绘制矩形 – C# 步骤指南 +url: /zh/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 PDF 上绘制矩形 – 完整 C# 教程 + +如果您需要使用 C# **在 PDF 上绘制矩形**,本指南为您提供简洁、可投入生产的解决方案。您将准确了解 **如何定义矩形尺寸**,验证形状是否适合,并通过一次方法调用将其添加到页面。 + +本教程涵盖了从创建 PDF 文档到渲染矩形的全部步骤,您可以直接复制粘贴代码到自己的项目中并立即看到效果。无需查阅外部文档——只需按照以下步骤操作。 + +## 前置条件 + +开始之前,请确保您具备: + +* .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.7+) +* **Aspose.PDF for .NET** NuGet 包(`Install-Package Aspose.PDF`) +* 对 C# 语法的基本了解 +* Visual Studio 或 VS Code 等 IDE + +> **专业提示:** 使用 Aspose.PDF 的免费评估许可证进行快速实验;它会添加一个小水印,但可以测试所有功能。 + +## 如何使用 C# 在 PDF 上绘制矩形 + +任务的核心是创建 `RectangleShape`,设置其大小和描边,并将其附加到 `Page`。下面的 H2 标题包含了主要关键词,满足 SEO 要求。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### 各步骤说明 + +| 步骤 | 为什么重要 | +|------|------------| +| **1️⃣ 创建新的 PDF 文档** | 初始化用于容纳页面和图形的容器。 | +| **2️⃣ 添加空白页** | 需要一个 `Page` 对象,因为形状是附加到页面,而不是直接附加到文档。 | +| **3️⃣ 定义矩形边界** | 这里是 **如何定义矩形尺寸** 的位置。`Rectangle` 构造函数接受 `x`、`y`、`width` 和 `height`,单位为点(1 pt = 1/72 in)。 | +| **4️⃣ 创建矩形形状** | `RectangleShape` 是 Aspose 用于渲染矩形的类。设置 `StrokeColor` 定义轮廓;也可以设置 `FillColor` 进行实填充。 | +| **5️⃣ 验证页面边界** | `CheckShapeBoundary` 在矩形超出页面尺寸时抛出异常,防止生成错误的 PDF。 | +| **6️⃣ 将形状添加到页面** | 形状成为页面内容流的一部分。 | +| **7️⃣ 保存 PDF** | 将文档持久化为文件,可使用任何 PDF 查看器打开。 | + +生成的 `RectangleDemo.pdf` 包含一个位于页面左上角的黑色矩形,宽度恰好为 500 pt,高度为 700 pt。 + +![在 PDF 上绘制矩形示例](https://example.com/rectangle-demo.png "在 PDF 上绘制矩形示例") + +*图片替代文字:在 PDF 上绘制矩形示例,显示 PDF 页面左上角的黑色矩形。* + +## 如何为不同页面尺寸定义矩形尺寸 + +上面的代码片段使用了固定值(`500 x 700`)。在实际应用中,您通常需要让矩形根据页面的宽高自适应。 + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**关键要点:** + +* 使用 `page.PageInfo.Width` 和 `Height` 读取实际页面尺寸。 +* 乘以系数(例如 `0.8f`)可将尺寸表示为页面的百分比。 +* 通过用页面尺寸减去矩形尺寸再除以二来实现居中。 + +## 常见陷阱及规避方法 + +| 陷阱 | 产生原因 | 解决方案 | +|------|----------|----------| +| 矩形超出页面 | 使用硬编码的尺寸大于页面大小。 | 在添加形状 **之前** 调用 `page.CheckShapeBoundary`;若抛出异常则调整尺寸。 | +| 描边不可见 | `StrokeColor` 保持默认 (`Color.Empty`)。 | 明确设置 `StrokeColor`(例如 `Color.Black`)。 | +| 矩形出现在屏幕外 | PDF 坐标系原点在左下角,使用屏幕式左上坐标会导致翻转。 | 记住原点 `(0,0)` 位于左下角。相应调整 `y`,或使用 `pageHeight - desiredY`。 | +| 线宽意外过细 | 默认线宽对打印可能太细。 | 设置 `rectangleShape.LineWidth = 2;` 增加线宽。 | + +## 扩展示例 + +一旦您能够 **在 PDF 上绘制矩形**,就可以轻松添加其他形状: + +* **EllipseShape** – 用于绘制圆形或椭圆。 +* **PolygonShape** – 用于自定义多边形。 +* **TextFragment** – 为矩形添加标签。 + +所有形状遵循相同的工作流:定义边界、配置外观、验证边界,然后添加到页面。 + +## 完整可运行程序 + +下面是将基础矩形和动态尺寸示例组合在一起的完整程序。将其复制到新的控制台项目中,恢复 `Aspose.PDF` NuGet 包后运行。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**预期输出:** +打开 `CombinedRectangles.pdf`。您会看到一个锚定在左下角的黑色矩形,以及一个居中的深蓝色矩形(填充淡黄色)。两个矩形都遵循页面边距。 + +## 结论 + +您现在已经掌握了使用 C# **在 PDF 上绘制矩形** 的方法,并能够精准 **定义矩形尺寸**,无论是固定布局还是响应式布局。该方案利用 Aspose.PDF 的 `RectangleShape`、边界检查以及简单的算术运算,能够适配任意页面尺寸。 + +接下来,您可以进一步探索: + +* 添加 **填充颜色** 和 **线条样式**(虚线、点线)——次要关键词:带样式的如何定义矩形尺寸。 +* 将多个形状组合到同一个 `Page` 中,以创建图表或表单。 +* 将 PDF 导出为流用于 Web API,而不是保存到磁盘。 + +尝试不同的尺寸、颜色和位置,掌握 .NET 应用中的 PDF 图形绘制。祝编码愉快! + +## 接下来该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您在自己的项目中进一步掌握 API 功能并探索替代实现方案。每篇资源都提供完整的可运行代码示例和逐步解释。 + +- [如何使用 Aspose.PDF for .NET 定制 PDF:设置页面边距并绘制直线](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [如何使用 Aspose.PDF for .NET 为 PDF 添加页面水印:完整指南](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [如何使用 Aspose.PDF for .NET 为 PDF 添加页码水印 | 水印与背景](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/conversion-export/_index.md b/pdf/chinese/net/conversion-export/_index.md index 3f7efb41b3..404b43d7ed 100644 --- a/pdf/chinese/net/conversion-export/_index.md +++ b/pdf/chinese/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Aspose.PDF Net 代码教程 ### [如何使用 Aspose 保存 PDF – 步骤指南](./how-to-save-pdf-with-aspose-step-by-step-guide/) 本指南详细演示如何使用 Aspose 在 .NET 中保存 PDF 文件的完整步骤。 +### [使用 Aspose.PDF 在 C# 中将 PDF 保存为 HTML 并转换为 PDF/X‑4](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +了解如何使用 Aspose.PDF 将 PDF 保存为 HTML 并转换为 PDF/X‑4 格式。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/chinese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..97b2ba8f33 --- /dev/null +++ b/pdf/chinese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: 使用 Aspose.PDF for C# 将 PDF 保存为 HTML 并转换为 PDF/X‑4。逐步代码展示 HTML 导出、签名列表和图形状态编辑。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: zh +lastmod: 2026-08-14 +og_description: 使用 Aspose.PDF for C# 将 PDF 保存为 HTML 并转换为 PDF/X‑4。请遵循本完整指南,导出 HTML、列出签名并编辑图形状态。 +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: 使用 Aspose.PDF 将 PDF 保存为 HTML 并转换为 PDF/X‑4 – C# 指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: 使用 Aspose.PDF 在 C# 中将 PDF 保存为 HTML 并转换为 PDF/X‑4 +url: /zh/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 PDF 保存为 HTML 并使用 Aspose.PDF 在 C# 中转换为 PDF/X‑4 + +如果您需要 **将 PDF 保存为 HTML**,Aspose.Pdf 让此过程变得简单。本教程还展示了如何 **将 PDF 转换为 PDF/X‑4**、列出签名字段以及添加自定义 ExtGState,为您提供完整的端到端工作流。 + +您将学习: + +* 将 PDF 导出为干净的 HTML,同时跳过光栅图像。 +* 将 PDF 文档转换为 PDF/X‑4 标准,以获得可打印的输出。 +* 枚举 PDF 中的所有签名字段。 +* 在首页插入自定义图形状态(ExtGState)。 + +所有代码均在 .NET 6 或更高版本上运行,并需要 Aspose.Pdf for .NET NuGet 包。 + +## 前置条件 + +| 需求 | 原因 | +|------|------| +| .NET 6 SDK 或更高版本 | 为 C# 示例提供运行时。 | +| Visual Studio 2022(或任何 C# IDE) | 便于编辑和调试。 | +| Aspose.Pdf for .NET(v23.12 或更高) | 提供本教程中使用的 `Document`、`PdfFormatConversionOptions` 和 `HtmlSaveOptions` 类。 | +| 示例 PDF 文件(`sample.pdf`) | 将要处理的源文档。 | + +使用以下方式安装库: + +```bash +dotnet add package Aspose.Pdf +``` + +## 解决方案概述 + +程序执行六个逻辑步骤: + +1. 加载源 PDF。 +2. 列出每个签名字段的名称。 +3. **将 PDF 转换为 PDF/X‑4** 并保存结果。 +4. **将 PDF 保存为 HTML**,同时跳过光栅图像。 +5. 在首页添加自定义 ExtGState(图形状态)。 +6. 保存带有新图形状态的修改后 PDF。 + +下面逐步解释每个步骤,提供完整代码并说明选择的原因。 + +## 步骤 1:加载 PDF 文档 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*为什么这很重要*:`Document` 代表整个 PDF 文件。一次加载后即可在后续所有操作中复用该对象,减少 I/O 开销。 + +## 步骤 2:列出所有签名字段名称 + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*为什么这很重要*:了解签名字段名称对于后续验证、删除或替换数字签名至关重要。`Signatures` 集合提供了快速的只读视图。 + +## 步骤 3:将 PDF 转换为 PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**关键点** + +* `PdfStandard.PdfX4` 告诉 Aspose.Pdf 嵌入所有必需的资源(字体、色彩配置文件),并强制执行 PDF/X‑4 约束。 +* 转换在内存中完成;仅最终文件写入磁盘,保持操作快速。 + +> **专业提示**:如果下游工作流对合规性要求严格,请使用 PDF/X‑4 验证器(例如 Adobe Preflight)验证输出。 + +## 步骤 4:将 PDF 保存为 HTML 并跳过光栅图像 + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**为什么可能需要这样做**:HTML 输出可用于网页预览或内容索引。跳过光栅图像(`SkipRasterImages = true`)可保持 HTML 轻量,提升加载速度,尤其是原始 PDF 包含高分辨率扫描时。 + +## 步骤 5:在首页添加自定义 ExtGState + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*说明*:**ExtGState** 对象控制透明度、混合模式等图形参数。通过添加 `GS0`,后续可以在内容流中引用该状态(例如用于半透明叠加)。代码使用底层 COS API,因为 Aspose.Pdf 并未提供创建 ExtGState 的高级封装。 + +## 步骤 6:保存带有新 ExtGState 的修改后 PDF + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +最终文件(`sample_with_extgstate.pdf`)包含: + +* 所有原始页面和内容。 +* 一个符合 PDF/X‑4 标准的版本(`sample_pdfx4.pdf`)。 +* 一个不含光栅图像的 HTML 表示(`sample.html`)。 +* 附加在首页资源中的自定义 ExtGState(`GS0`)。 + +### 预期的控制台输出 + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +如果源 PDF 没有签名,循环将不输出任何内容,但仍会继续执行且不会报错。 + +## 常见变体和边缘情况 + +| 情形 | 调整 | +|------|------| +| **PDF 不包含页面** | 在访问 `doc.Pages[1]` 前检查 `doc.Pages.Count`,以避免 `IndexOutOfRangeException`。 | +| **需要 PDF/A‑2b 而非 PDF/X‑4** | 将 `PdfStandard.PdfX4` 改为 `PdfStandard.PdfA2b`,用于 `PdfFormatConversionOptions`。 | +| **想保留光栅图像** | 将 `SkipRasterImages = false`(或省略该属性)设置在 `HtmlSaveOptions` 中。 | +| **多个 ExtGState 对象** | 在向 `extGStateDict` 添加时使用唯一键(`GS1`、`GS2` …)。 | +| **大型 PDF(数百 MB)** | 在保存前启用 `doc.OptimizeResources = true`,以降低内存使用。 | + +## 完整源代码(可运行) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // 步骤 1:加载 PDF 文档 + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // 步骤 2:列出所有签名字段名称 + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // 步骤 3:将 PDF 转换为 PDF/X‑4 标准 + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // 步骤 4:将 PDF 保存为 HTML 并跳过光栅图像 + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // 步骤 5:向首页添加自定义 ExtGState(图形状态) + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## 接下来应该学习什么? + +以下教程涵盖与本指南紧密相关的主题,帮助您进一步掌握 API 功能并探索在项目中的替代实现方式。每个资源均提供完整的可运行代码示例和逐步解释。 + +- [综合指南:使用 Aspose.PDF .NET 进行自定义策略的 PDF 转 HTML](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [使用 Aspose.PDF .NET 将 PDF 转换为 HTML 并自定义图像 URL 的综合指南](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [使用 Aspose.PDF .NET 将 PDF 转换为 HTML:将图像保存为外部 PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/programming-with-forms/_index.md b/pdf/chinese/net/programming-with-forms/_index.md index 1df5ed04a9..a93a8c98d8 100644 --- a/pdf/chinese/net/programming-with-forms/_index.md +++ b/pdf/chinese/net/programming-with-forms/_index.md @@ -50,7 +50,8 @@ Aspose.PDF for .NET“表单编程”教程是开发人员创建和操作交互 | [设置 Java 脚本](./set-java-script/) 解锁 Aspose.PDF for .NET 的强大功能。通过我们的分步指南学习如何在表单字段上设置 JavaScript。| | [设置单选按钮标题](./set-radio-button-caption/) 了解如何使用 Aspose.PDF for .NET 在 PDF 中设置单选按钮标题。本分步指南将引导您完成 PDF 表单的加载、修改和保存。| | [文本框](./text-box/) 通过本分步指南,了解如何使用 Aspose.PDF for .NET 轻松地将文本框添加到 PDF。增强用户交互。| -| [如何使用 Aspose 创建 PDF – 添加表单字段和页面](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) 通过本分步指南学习如何使用 Aspose.PDF for .NET 创建 PDF 并添加表单字段和页面。| +| [如何使用 Aspose 创建 PDF – 添加表单字段和页面](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) 通过本分步指南学习如何使用 Aspose.PDF for .NET 创建 PDF 并添加表单字段和页面。| +| [在 C# 中创建 PDF 表单字段 – 步骤指南](./create-pdf-form-field-in-c-step-by-step-guide/) 通过本分步指南学习如何在 C# 中创建 PDF 表单字段。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/chinese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..74ce88312b --- /dev/null +++ b/pdf/chinese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: 使用 C# 快速创建 PDF 表单字段。学习如何向 PDF 添加文本框以及使用 Aspose.PDF 修改 PDF 以包含文本框。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: zh +lastmod: 2026-08-14 +og_description: 使用 C# 创建 PDF 表单字段。本教程展示了如何向 PDF 添加文本框,以及如何使用 Aspose.PDF 修改 PDF 以包含文本框。 +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: 在 C# 中创建 PDF 表单字段 – 完整编程指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: 在 C# 中创建 PDF 表单字段 – 步骤指南 +url: /zh/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中创建 PDF 表单字段 – 步骤指南 + +如果您需要 **在文档中创建 pdf 表单字段**,本指南将带您完整完成整个过程。您将看到如何 **向 pdf 添加文本框** 页面,以及如何使用 Aspose.PDF for .NET **修改 pdf 以包含文本框**。 + +处理 PDF 表单是发票系统、调查或任何收集用户输入的工作流中的常见需求。完成本教程后,您将拥有一段可复用的代码片段,能够创建功能完整的文本框字段,将其放置在指定位置,并保存更新后的 PDF——全部在您的 C# 项目中完成。 + +## 前置条件 + +开始之前,请确保您具备: + +* .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.7+) +* Visual Studio 2022 或任何支持 C# 的 IDE +* 有效的 Aspose.PDF for .NET 授权(免费试用可用于开发) +* 一个名为 `input.pdf` 的 PDF 文件,放置在已知目录下(教程中使用 `YOUR_DIRECTORY` 作为占位符) + +> **专业提示:** 如果您还没有授权,可以从 Aspose 官网申请临时密钥;库在评估模式下无需代码修改即可使用。 + +## 在 C# 中创建 pdf 表单字段的概览 + +1. 加载已有的 PDF 文档。 +2. 实例化 `TextBoxField` 并配置其名称和外观。 +3. 添加一个小部件注释,定义目标页面上的可视矩形。 +4. 将字段插入文档的表单集合。 +5. 保存修改后的 PDF。 + +下面将对每一步进行详细说明,并提供完整代码示例以及 API 调用背后的原理。 + +## 步骤 1:加载 PDF 文档 + +首要操作是读取源 PDF。Aspose.PDF 使用 `Document` 类来表示 PDF 文件。加载文档后,您即可访问其页面、表单集合以及其他结构。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**为什么重要:** +加载文件会在内存中创建 PDF 的模型,允许您在不损坏原始文件的前提下添加、删除或编辑对象。`Document` 对象还公开了 `Form` 属性,稍后您将在这里 **向 pdf 添加文本框**。 + +## 步骤 2:创建文本框字段 + +文本框字段是一种表单字段,允许用户输入自由文本。在 Aspose.PDF 中,您通过实例化 `TextBoxField`,并传入目标页面和定义小部件初始大小的矩形来创建它。 + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**为什么重要:** +* `PartialName` 是表单处理工具(如 Adobe Acrobat、服务器端解析器)用来检索输入值的键。 +* 此处传入的矩形仅定义 *初始* 小部件大小;您可以在后续步骤中通过小部件注释调整其可视位置。 +* 设置 `DefaultAppearance` 可确保文本在各查看器中保持一致的渲染效果。 + +## 步骤 3:定义可视小部件注释 + +表单字段可以拥有一个或多个 **小部件注释**,用于控制字段在每页上的显示位置。通过添加小部件,您可以将同一逻辑字段放置在不同位置,甚至跨多个页面。 + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**为什么重要:** +小部件矩形决定了用户在屏幕上看到的坐标。如果跳过此步骤,字段虽然存在于 PDF 的数据结构中,却不会对终端用户可见。添加小部件正是 **向 pdf 添加文本框** 的关键步骤。 + +## 步骤 4:将配置好的字段添加到文档的表单中 + +当 `TextBoxField` 完全配置好后,需要将其注册到 PDF 的表单集合中。这会使字段成为交互式表单的一部分,并确保其被保存。 + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**为什么重要:** +如果不将字段添加到 `pdfDocument.Form`,PDF 查看器会忽略小部件注释,字段数据也永远不会被提交。这行代码完成了 **修改 pdf 以包含文本框** 的操作。 + +## 步骤 5:保存更新后的 PDF + +最后,将更改写回磁盘。您可以覆盖原文件,也可以生成新文件;示例中保存为 `output.pdf`。 + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +当您在 Adobe Acrobat Reader 中打开 `output.pdf` 时,会在第 2 页看到一个标注为 “Comments” 的矩形文本框。用户可以点击内部输入,输入的文本将成为 PDF 表单数据的一部分。 + +## 完整可运行示例 + +将所有代码片段组合起来,即得到一个完整、可直接运行的程序。将其复制到新的控制台项目中,替换 `YOUR_DIRECTORY` 为实际文件夹路径,然后运行。 + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**预期输出:** +运行程序后,控制台会打印两行确认信息。打开 `output.pdf` 可看到第 2 页的文本框,用户可以在其中输入评论。当表单通过 Adobe Acrobat 的 “Submit” 按钮提交时,字段名 `Comments` 将出现在导出的 FDF 或 XFDF 数据中。 + +## 常见变体与边缘情况 + +| 情形 | 代码适配方式 | +|-----------|-----------------------| +| **将字段添加到其他页面** | 将 `pdfDocument.Pages[1]` 改为目标页面索引(基于 `0` 的索引)。 | +| **创建多行文本框** | 在添加小部件前设置 `textBox.Multiline = true;`。 | +| **设置默认值** | 赋值 `textBox.Value = "Enter your comments here";`。 | +| **将字段设为必填** | 设置 `textBox.Required = true;`。 | +| **在多个页面放置字段** | 对每个目标页面的矩形调用 `textBox.AddWidgetAnnotation`。 | +| **使用自定义字体** | 使用 `FontRepository.AddFont("path/to/font.ttf")` 加载字体,并在 `DefaultAppearance` 中引用。 | + +**专业提示:** 始终将矩形坐标与页面尺寸(`pdfDocument.Pages[1].Rect`)进行校验。如果小部件位于页面边界之外,查看器可能会裁剪或隐藏该字段。 + +## 测试表单字段 + +1. 在 Adobe Acrobat Reader 中打开 `output.pdf`。 +2. 点击 “Comments” 框内部,光标应出现。 +3. 输入任意文字后按 **Tab** 或点击其他位置。 +4. 通过 **文件 → 另存为** 保存已输入的值。 +5. (可选)使用 Aspose.PDF 的 `Form` API 以代码方式提取该值: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +此代码片段演示了字段不仅可见,还可以通过代码检索——这对服务器端处理至关重要。 + +## 结论 + +现在,您已经掌握了在 C# 中 **创建 pdf 表单字段** 的完整流程。教程涵盖了加载 PDF、配置 `TextBoxField`、添加小部件注释、注册字段以及保存结果。凭借这些构建块,您可以 **向 pdf 添加文本框**、**修改 pdf 以包含文本框**,并将方法扩展到复选框、单选按钮或下拉列表等其他字段类型。 + +接下来,您可以进一步探索 **提取表单数据**、**扁平化 PDF 表单** 或 **使用边框和颜色样式化字段** 等相关主题。这些概念都基于您刚刚掌握的核心 API,帮助您在 C# 中创建功能强大的交互式 PDF。 + +祝编码愉快,欢迎尝试不同的矩形、字体和验证规则,以满足您应用的需求! + +## 接下来您应该学习什么? + +以下教程涵盖了与本指南技术紧密相关的主题,帮助您在已有技巧的基础上进一步深入。每篇资源都提供完整可运行的代码示例和逐步解释,助您掌握更多 API 功能并探索在项目中的替代实现方式。 + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/programming-with-operators/_index.md b/pdf/chinese/net/programming-with-operators/_index.md index 30ebbdeb45..ea8565ca0d 100644 --- a/pdf/chinese/net/programming-with-operators/_index.md +++ b/pdf/chinese/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET 的“使用运算符编程”教程将指导您了解 PDF | [在页面上绘制 XForm](./draw-xform-on-page/) | 通过这份全面的分步指南了解如何使用 Aspose.PDF for .NET 在 PDF 中绘制 XForms。| | [PDF 运算符](./pdf-operators/) 使用 Aspose.PDF for .NET 的 PDF 操作符的分步指南。将图像添加到 PDF 页面并指定其位置。| | [删除 PDF 文件中的图形对象](./remove-graphics-objects/) 在本分步指南中学习如何使用 Aspose.PDF for .NET 从 PDF 文件中删除图形对象。简化您的 PDF 操作任务。| +| [在 C# 中使用 Aspose.Pdf 创建空 PDF 字典](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | 使用 Aspose.PDF for .NET 在 C# 中创建空的 PDF 字典。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/chinese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..33b00642af --- /dev/null +++ b/pdf/chinese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-14 +description: 使用 Aspose.Pdf 在 C# 中创建空的 PDF 字典——学习如何向 ExtGState 集合添加图形状态并以编程方式修改 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: zh +lastmod: 2026-08-14 +og_description: 使用 Aspose.Pdf 在 C# 中创建空的 PDF 字典。请遵循本完整指南,将自定义图形状态添加到 PDF 的 ExtGState + 集合中。 +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: 使用 C# 创建空 PDF 字典 – Aspose.Pdf 步骤指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: 使用 Aspose.Pdf 在 C# 中创建空 PDF 字典 +url: /zh/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose.Pdf 在 C# 中创建空 PDF 字典 + +如果您需要在处理 PDF 文件时 **创建空 PDF 字典** 对象,本指南将向您展示如何在 C# 中使用 Aspose.Pdf 库完成此操作。无论是构建自定义图形状态、添加新资源,还是为后续使用准备模板,下面的步骤都提供了完整、可运行的解决方案。 + +您将学习如何加载 PDF、访问第一页的资源字典、构建全新的 `CosPdfDictionary`,并将其插入到 `ExtGState` 集合中。教程结束时,您将得到一个包含新创建字典的 `output.pdf`。 + +## 前置条件 + +在开始之前,请确保您拥有: + +- .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.6+) +- Visual Studio 2022 或您喜欢的任意 C# IDE +- Aspose.Pdf for .NET 许可证(或临时评估密钥) +- 一个名为 **input.pdf** 的示例 PDF,放置在您可控制的文件夹中(该文件夹路径将用作 `dataDir`) + +除 `Aspose.Pdf` 之外,无需其他 NuGet 包。 + +## 第一步:创建项目并引用 Aspose.Pdf + +1. 在 Visual Studio 中新建一个 **Console App** 项目。 +2. 打开 **NuGet Package Manager**,安装 `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. 在 `Program.cs` 顶部添加以下 `using` 指令: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *为什么需要这些命名空间?* `Aspose.Pdf` 包含核心的 `Document` 类,而 `Aspose.Pdf.Operators.Gfx` 提供 `CosPdfDictionary`、`CosPdfNumber` 等低层 PDF 对象,帮助 **创建空 PDF 字典** 结构。 + +## 第二步:加载源 PDF + +首先将已有的 PDF 文件加载到 `Document` 实例中。这样您即可访问所有页面、资源以及低层字典。 + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*说明*:`Document` 会将文件读取到内存并准备内部结构。`using` 语句确保在处理完毕后释放文件句柄。 + +## 第三步:访问第一页的资源字典 + +每个 PDF 页面都有一个 **Resources** 字典,用于组织字体、图像、ExtGState 对象以及其他共享资源。要插入新的图形状态,需要编辑此字典。 + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` 是一个辅助类,允许您像操作 C# 的 `Dictionary` 那样处理 PDF 字典。 + +## 第四步:获取(或创建)ExtGState 集合 + +`ExtGState` 保存图形状态对象,如不透明度、混合模式和线宽。如果源 PDF 已经包含 `ExtGState` 条目,我们复用它;否则创建一个全新的空字典。 + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*为什么要进行此检查?* 有些 PDF 完全没有 `ExtGState` 条目。通过同时处理两种情况,教程对任何输入文件都具有鲁棒性。 + +## 第五步:为新图形状态 **创建空 PDF 字典** + +现在我们真正 **创建空 PDF 字典** 对象来定义图形状态参数。字典起始为空,然后我们添加所需的键: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### 各条目的作用 + +| 键 | 类型 | 含义 | +|-----|------|---------| +| **CA** | `CosPdfNumber` | 描边不透明度(取值范围 0‑1)。 | +| **ca** | `CosPdfNumber` | 填充不透明度(取值范围 0‑1)。 | +| **BM** | `CosPdfName` | 混合模式;`"Normal"` 是最常用的。 | + +因为我们从 **空 PDF 字典** 开始,所以可以完全控制添加哪些条目。以后如需扩展,可加入 `LW`(线宽)或 `LC`(线帽)等其他图形状态参数。 + +## 第六步:将新图形状态插入 ExtGState + +`ExtGState` 字典类似于映射,每个条目通过名称标识(例如 `GS0`、`GS1`)。我们将在唯一键下添加刚构建的字典。 + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +如果计划添加多个状态,请递增后缀(`GS1`、`GS2` …)以避免名称冲突。 + +## 第七步:保存修改后的 PDF + +最后,将更改写回磁盘。`Save` 方法会自动序列化更新后的字典。 + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +在任意 PDF 查看器中打开 `output.pdf`,检查 **Resources → ExtGState** 条目(大多数查看器会隐藏此信息,但 Adobe Acrobat Preflight 或 PDF‑Tron 等工具可以显示)。您应该能看到一个包含我们定义的不透明度和混合模式值的 `GS0` 条目。 + +## 完整可运行示例 + +将所有代码片段组合起来,即可得到完整程序,复制粘贴到 `Program.cs` 并运行: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**预期输出** – 控制台会打印确认信息,`output.pdf` 中会出现 `ExtGState` 下的 `GS0` 条目。当页面内容流使用 `gs` 操作符引用 `GS0` 时,描边将完全不透明,而填充则为 50 % 透明。 + +## 常见问题与边缘情况处理 + +| 问题 | 解答 | +|----------|--------| +| *如果 PDF 有多页怎么办?* | 示例针对第一页(`Pages[1]`)。若需影响所有页面,可遍历 `pdfDocument.Pages`,对每页的资源重复步骤 3‑5。 | +| *能否将字典添加到已经存在名为 “GS0” 的 ExtGState 条目所在的页面?* | 可以,但必须使用不同的键(`GS1`、`GS2` …)以避免覆盖已有条目。 | +| *保存后还能安全地修改字典吗?* | 调用 `Save` 后,内存中的表示与文件已分离。您仍可继续编辑 `Document` 对象,并在需要时再次调用 `Save`。 | +| *使用 `...` 是否需要 Aspose.Pdf 许可证?* | | + +## 接下来您可以学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步掌握 API 功能并探索在项目中的替代实现方式。每篇资源均提供完整可运行的代码示例和逐步解释。 + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/programming-with-security-and-signatures/_index.md b/pdf/chinese/net/programming-with-security-and-signatures/_index.md index dcccfa047a..835e657246 100644 --- a/pdf/chinese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/chinese/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [在 C# 中检查 PDF 签名 – 如何读取已签名的 PDF 文件](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) 了解如何使用 Aspose.PDF for .NET 在 C# 中读取已签名的 PDF 文件并检查签名信息。| | [如何修复 PDF 文件 – 使用 Aspose.Pdf 的完整 C# 指南](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) 了解如何使用 Aspose.Pdf for .NET 在 C# 中修复受损的 PDF 文件,分步指南帮助您恢复文档完整性。| | [在 C# 中检查 PDF 签名 – 完整编程指南](./verify-pdf-signature-in-c-complete-programming-guide/) 了解如何使用 Aspose.PDF for .NET 在 C# 中验证 PDF 签名并检查其完整性。分步指南帮助您确保文档安全。| +| [在 C# 中创建签名选项 – 完整数字签名指南](./create-signature-options-in-c-full-guide-to-digital-signing/) 了解如何使用 Aspose.PDF for .NET 在 C# 中创建签名选项并完成数字签名的完整指南。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/chinese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..1eaa5beb69 --- /dev/null +++ b/pdf/chinese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,330 @@ +--- +category: general +date: 2026-08-14 +description: 在 C# 中创建签名选项以应用数字签名。了解如何配置签名、实现自定义哈希函数以及以编程方式签署文档。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: zh +lastmod: 2026-08-14 +og_description: 在 C# 中创建签名选项并应用数字签名。本教程将指导您配置签名、添加自定义哈希函数以及对文档进行签名。 +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: 在 C# 中创建签名选项 – 步骤式数字签名指南 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: 在 C# 中创建签名选项 – 数字签名完整指南 +url: /zh/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中创建签名选项 – 数字签名完整指南 + +在 C# 中创建签名选项以配置数字签名工作流。本教程展示如何应用数字签名、实现自定义哈希函数以及使用 `SignatureOptions` 类对文档进行签名。如果您曾需要在 .NET 应用程序中对 PDF、XML 或任何二进制负载进行签名,下面的步骤将为您提供一个可直接运行的解决方案。 + +您将学习如何: + +* 使用自定义哈希算法配置 `SignatureOptions`, +* 正确调用签名方法, +* 验证签名是否已应用, +* 避免在配置签名时常见的陷阱。 + +唯一的前置条件是最近的 .NET SDK(≥ .NET 6)以及提供 `SignatureOptions` 的签名库(例如 **GroupDocs.Signature**、**Aspose.Signature** 或类似的 API)。无需任何外部工具。 + +--- + +## Prerequisites + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6 SDK 或更高版本 | 提供示例中使用的现代语言特性。 | +| 一个签名库的 NuGet 包(例如 `GroupDocs.Signature`) | 提供 `SignatureOptions` 类型和 `Sign` 扩展方法。 | +| 私钥或证书的访问权限 | 生成可验证的数字签名所必需。 | + +使用标准 CLI 安装库: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Step 1: Create signature options + +## 步骤 1:创建签名选项 + +第一步是实例化 `SignatureOptions` 并设置控制签名过程的属性。该对象告诉库 *要签署什么* 以及 *如何签署*。 + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Why this matters:** `SignatureOptions` 充当您的代码与签名引擎之间的契约。提前配置它可以避免在签署多个文档时重复编写样板代码。 + +--- + +## Step 2: Implement a custom hash function + +## 步骤 2:实现自定义哈希函数 + +*自定义哈希函数* 让您完全控制签名算法所签署的摘要。当默认哈希(SHA‑256)不符合合规要求,或需要对文档的子集进行哈希时,这非常有用。 + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Why this matters:** 通过为 `CustomSignHash` 赋值,您用 `MyHash` 替代库内部的哈希步骤。签名引擎现在会签署您函数返回的字节,从而确保符合任何自定义策略。 + +--- + +## Step 3: Load the document and apply digital signature + +## 步骤 3:加载文档并应用数字签名 + +准备好选项后,您可以打开目标文件并调用签名方法。`Sign` 方法由库提供,并使用已配置的 `SignatureOptions`。 + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Why this matters:** 调用 `Sign` 在内部执行三项操作: + +1. **Hash calculation** – 现在委托给您的自定义哈希函数。 +2. **Signature generation** – 使用库配置中提供的私钥。 +3. **Embedding** – 将生成的签名附加到输出文件。 + +如果任何步骤失败,方法会返回 `false`,以便您优雅地处理错误。 + +--- + +## Step 4: Verify that the document is signed + +## 步骤 4:验证文档是否已签名 + +快速验证可以确认签名已正确应用。大多数库都提供 `Verify` 方法来检查已签文件的完整性。 + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Why this matters:** 验证可确保签名文档在签署后未被篡改,并且自定义哈希产生了兼容的摘要。 + +--- + +## How to configure signature for different file types + +## 如何为不同文件类型配置签名 + +相同的 `SignatureOptions` 对象可重复用于 PDF、Word 文档、图像或普通二进制文件。唯一需要更改的是具体的选项类(例如 `PdfSignatureOptions`、`WordSignatureOptions`)。下面是针对 JPEG 图像的快速示例: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Why this matters:** 了解如何为每种格式 *configure signature* 能让您在多个文档类型之间复用同一代码库,而无需重新编写哈希逻辑。 + +--- + +## Common pitfalls and best practices + +## 常见陷阱与最佳实践 + +| Pitfall | Recommended fix | +|---------|-----------------| +| 在创建 `SignatureOptions` 后忘记设置 `CustomSignHash` | 在构造选项对象后立即分配该委托。 | +| 使用签名证书不支持的哈希算法 | 确认证书的密钥用法与哈希长度匹配(例如 RSA‑2048 与 SHA‑512)。 | +| 忽视释放 `Signature` 对象的必要性 | 将 `Signature` 实例放入 `using` 块中以释放文件句柄。 | +| 将已签名文件覆盖原始源文件 | 始终写入新文件路径(`outputPath`),以保留原始文档。 | + +--- + +## Full working example + +## 完整工作示例 + +下面是一个自包含的程序,演示了所有步骤的组合。将其复制到新的控制台项目中运行;控制台会报告成功或失败。 + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Expected output** + +**预期输出** + +``` +Signature verified successfully. +``` + +如果控制台打印出 “Signing failed.” 或 “Signature verification failed.”,请再次检查证书配置,并确保自定义哈希返回的字节数组大小符合预期。 + +--- + +## Conclusion + +## 结论 + +现在您已经了解如何在 C# 中 **create signature options**,附加 **custom hash function**,并对任何受支持的文档 **apply digital signature**。本教程覆盖了完整的生命周期:配置选项、签署文件以及验证结果。通过复用同一 `SignatureOptions` 实例,您还可以 **how to configure signature** 用于图像、Word 文件或原始二进制文件。 + +--- + +## What’s next? + +## 接下来怎么做? + +* 探索更多 `SignatureOptions` 属性,如可视化印章、时间戳服务器和证书链——这些与 **apply digital signature** 关键字相呼应。 +* 通过在 `MyHash` 中替换实现,尝试其他哈希算法(例如 Blake2b)。 +* 将签名流程集成到 Web API 中,以实现即时文档签名——这是 **how to sign document** 在面向服务的架构中的自然扩展。 + +欢迎根据自己的安全策略调整代码,并在评论中分享您的经验。祝签名愉快! + +## What Should You Learn Next? + +## 接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您在自己的项目中进一步掌握 API 功能并探索替代实现方式。每个资源都包含完整的可运行代码示例和逐步解释。 + +- [如何使用 Aspose.PDF for .NET 更改 PDF 签名语言](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Aspose Pdf .NET 数字签名教程(德语)](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Aspose Pdf .NET 数字签名教程(法语)](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/programming-with-stamps-and-watermarks/_index.md b/pdf/chinese/net/programming-with-stamps-and-watermarks/_index.md index 60a45eed06..c7e2c42ecd 100644 --- a/pdf/chinese/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/chinese/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF 的“使用图章和水印进行编程”.NET 教程将指导您逐 | [PDF 文件页脚中的文本](./text-in-footer/) 了解如何使用 Aspose.PDF for .NET 在 PDF 文件的页脚中添加文本。| | [PDF 文件标题中的文本](./text-in-header/) 通过本分步教程学习如何使用 Aspose.PDF for .NET 为 PDF 添加文本标题。高效且有效地增强您的文档。| | [在 C# 中为 PDF 添加 Bates 编号 – 完整指南](./add-bates-numbering-pdf-in-c-complete-guide/) 学习如何使用 Aspose.PDF for .NET 在 C# 中为 PDF 文档添加 Bates 编号,实现文档追踪和管理的完整步骤指南。| +| [在 C# 中设置 Bates 编号选项 – 完整指南](./how-to-set-bates-numbering-options-in-c-complete-guide/) 学习如何使用 Aspose.PDF for .NET 在 C# 中设置 Bates 编号选项的完整步骤指南。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/chinese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..e6aa73788d --- /dev/null +++ b/pdf/chinese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: 如何在 C# 中使用 GroupDocs 设置 Bates 编号选项。请按照本分步教程,在将 Word 转换为 PDF 时添加自定义前缀和起始编号。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: zh +lastmod: 2026-08-14 +og_description: 如何快速在 C# 中设置 Bates 编号选项。本指南展示了在将 Word 转换为 PDF 时,如何添加自定义前缀和起始编号。 +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: 如何在 C# 中设置 Bates 编号选项——一步一步教程 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: 如何在 C# 中设置 Bates 编号选项——完整指南 +url: /zh/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中设置 Bates 编号选项 – 完整指南 + +如果你需要 **如何在 C# 中设置 Bates 编号选项**,本指南将一步步带你完成。你将学习如何配置起始编号、添加前缀,以及在使用 GroupDocs API 将 Word 文档转换为 PDF 时应用编号。 + +文档处理常常需要在每页上添加唯一标识,以满足法律或归档需求。完成本教程后,你将拥有一个可复用的代码片段,能够直接嵌入任何 .NET 项目,无论是构建诉讼支持工具还是自动化报告生成器。无需外部工具——只需 GroupDocs.Conversion 库和几行 C# 代码。 + +## 所需环境 + +在开始之前,请确保你具备以下条件: + +* 已安装 .NET 6.0 SDK 或更高版本 +* Visual Studio 2022(或任何支持 .NET 的 IDE) +* 有效的 GroupDocs.Conversion 许可证(免费试用可用于测试) +* 一个需要编号的示例 Word 文档(`input.docx`) + +这些前置条件可确保代码在无需额外配置的情况下运行。 + +## 如何设置 Bates 编号选项 – 概览 + +**如何设置 Bates 编号选项** 的核心在于三个对象: + +1. `Document` – 加载源文件。 +2. `BatesNumberingOptions` – 保存起始编号、前缀以及其他格式细节。 +3. `AddBatesNumbering` – 将编号注入每一页的方法。 + +了解每个组成部分的作用,有助于你在更复杂的场景中进行适配,例如自定义字体或多语言编号。 + +## 步骤 1:安装 GroupDocs.Conversion NuGet 包 + +在解决方案文件夹的终端中运行: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** 提供了后续教程中使用的 `Document` 类和 `AddBatesNumbering` 扩展方法。 + +## 步骤 2:加载源文档 + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*为什么需要这一步?* +加载文件会在内存中创建一个可供转换引擎操作的表示。没有 `Document` 实例,你无法应用 Bates 编号或进行其他转换。 + +## 步骤 3:创建 Bates 编号选项 + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*为什么需要这一步?* +`BatesNumberingOptions` 封装了在 **设置 Bates 编号选项** 时可能需要的所有设置。调整 `StartNumber` 和 `Prefix` 可以让输出与案件管理系统保持一致。`Position` 属性控制视觉位置,通常是合规要求。 + +## 步骤 4:将 Bates 编号应用到文档 + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` 方法会遍历已加载的 `Document` 的每一页,并插入配置好的字符串。由于该方法在内存表示上工作,你可以在保存之前链式调用其他处理步骤(例如添加水印)。 + +## 步骤 5:转换并保存为 PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*为什么需要这一步?* +PDF 是法律文档的常见最终格式。`PdfConvertOptions` 对象可用于微调输出,但对基本编号并非必需。`Save` 调用会将完整编号的 PDF 写入磁盘。 + +## 完整可运行示例 + +将所有代码整合在一起,下面是一个可自行编译运行的控制台应用程序: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**预期输出** + +运行程序后会生成 `output.pdf`,每页都会显示类似 `CASE-1000`、`CASE-1001` 等标签,位于右下角页脚。使用任意 PDF 阅读器打开即可验证编号是否如预期显示。 + +## 常见问题与最佳实践 + +| 问题 | 产生原因 | 规避方法 | +|-------|----------------|-----------------| +| **相对路径导致 `FileNotFoundException`** | 控制台应用的工作目录可能与 Visual Studio 不同。 | 使用绝对路径或 `Path.Combine(AppContext.BaseDirectory, "input.docx")`。 | +| **编号覆盖了已有页脚** | 如果源文档在选定的页脚区域已有内容,新编号可能被遮挡。 | 更换 `Position`(例如 `HeaderLeft`)或调整源模板。 | +| **大文档处理缓慢** | Bates 编号会遍历每一页,文件越大内存占用越高。 | 使用 `Document.Split` 将文档分块处理,尤其在超过 500 页时。 | +| **许可证过期** | 免费试用版 30 天后会在 `AddBatesNumbering` 时抛出异常。 | 在加载文档前设置有效许可证:`License license = new License(); license.SetLicense("license.lic");`。 | + +**小技巧:** 如果需要为不同案件使用不同的编号格式(例如 `2023-CASE-001`),可以在创建 `BatesNumberingOptions` 前动态生成前缀。 + +## 扩展方案 + +相同的 **Bates 编号 C#** 方法同样适用于 `.txt`、`.html` 或图像等其他源格式。只需在构造 `Document` 对象时更改文件扩展名,转换引擎会自动处理其余工作。 + +你还可以将 **文档转换 C#** 与 OCR 结合,用于扫描的 PDF: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## 结论 + +现在,你已经掌握了在 C# 中 **如何设置 Bates 编号选项** 的完整流程。通过创建 `BatesNumberingOptions` 对象、使用 `AddBatesNumbering` 应用它,并将结果保存为 PDF,你可以实现合法合规、唯一标识的文档自动化生成。 + +接下来,你可以进一步探索 **C# PDF 生成**、**文档转换 C#** 或高级 **GroupDocs API** 功能,如水印和数字签名。尝试不同的前缀、位置和编号格式,以匹配你的工作流。 + +祝编码愉快! + + +## 接下来该学习什么? + +以下教程涵盖了与本指南技术紧密相关的主题,帮助你在项目中进一步运用这些技巧。每篇资源都提供完整的可运行代码示例和逐步说明,帮助你掌握更多 API 功能并探索替代实现方式。 + +- [在 C# 中为 PDF 添加 Bates 编号 – 完整指南](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [使用 Aspose.PDF for .NET 为 PDF 添加并自定义页码 | 文档操作指南](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [使用 Aspose.PDF for .NET 在 PDF 中添加文本戳脚注 – 步骤详解](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/annotations/_index.md b/pdf/czech/net/annotations/_index.md index 479168ed63..bf37f64bfd 100644 --- a/pdf/czech/net/annotations/_index.md +++ b/pdf/czech/net/annotations/_index.md @@ -24,6 +24,7 @@ Komplexní kolekce tutoriálů ukazujících, jak pracovat s anotacemi v PDF dok | [Přidat soubor SWF jako anotaci PDF](./addswffileasannotation/) | Naučte se, jak přidávat soubory SWF jako anotace PDF pomocí Aspose.PDF pro .NET. Vylepšete své PDF soubory interaktivním multimediálním obsahem v tomto podrobném tutoriálu. | | [Smazat všechny anotace ze stránky](./deleteallannotationsfrompage/) | Naučte se, jak odstranit všechny anotace ze stránky PDF pomocí Aspose.PDF pro .NET. Postupujte podle našeho podrobného návodu a efektivně vyčistěte své PDF soubory. | | [Smazat konkrétní anotaci v souboru PDF](./deleteparticularannotation/) | Naučte se, jak odstranit konkrétní anotaci v souboru PDF pomocí Aspose.PDF pro .NET s tímto podrobným návodem. | +| [Nakreslete obdélník v PDF – krok za krokem C# průvodce](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Naučte se pomocí Aspose.PDF pro .NET kreslit obdélníky v PDF dokumentech pomocí C# v podrobném krok‑za‑krokem návodu. | | [Extrahovat zvýrazněný text v souboru PDF](./extracthighlightedtext/) Naučte se v tomto tutoriálu, jak efektivně extrahovat zvýrazněný text ze souboru PDF pomocí Aspose.PDF pro .NET. Ideální pro analýzu dat a kontrolu obsahu. | | [Získat všechny anotace ze stránky](./getallannotationsfrompage/) | Naučte se v tomto podrobném návodu, jak extrahovat anotace z PDF souborů pomocí Aspose.PDF pro .NET. Ideální pro vývojáře všech úrovní. | | [Získejte konkrétní anotaci v souboru PDF](./getparticularannotation/) | V tomto podrobném tutoriálu o 2000 slovech se naučte, jak extrahovat konkrétní anotaci ze souboru PDF pomocí Aspose.PDF pro .NET. Ideální pro vývojáře. | diff --git a/pdf/czech/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/czech/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..8643097144 --- /dev/null +++ b/pdf/czech/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Nakreslete obdélník do PDF rychle pomocí C#. Naučte se, jak definovat + rozměry obdélníku a přidávat tvary na stránku PDF během několika řádků. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: cs +lastmod: 2026-08-14 +og_description: Nakreslete obdélník do PDF pomocí C# během několika sekund. Tento + průvodce ukazuje, jak definovat rozměry obdélníku, přidat tvar a ověřit hranice + stránky pro spolehlivou grafiku PDF. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Nakreslete obdélník do PDF – kompletní C# tutoriál +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Nakreslete obdélník v PDF – krok za krokem C# průvodce +url: /cs/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# nakreslit obdélník do pdf – kompletní C# tutoriál + +Pokud potřebujete **draw rectangle on pdf** pomocí C#, tento průvodce vám ukáže stručné, připravené pro produkci řešení. Uvidíte přesně **how to define rectangle dimensions**, ověříte, že tvar pasuje, a přidáte jej na stránku jedním voláním metody. + +Tutoriál pokrývá vše od vytvoření PDF dokumentu až po vykreslení obdélníku, takže můžete kód zkopírovat‑vložit do svého projektu a okamžitě vidět výsledek. Žádná externí dokumentace není potřeba – stačí kroky níže. + +## Požadavky + +* .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.7+) +* NuGet balíček **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Základní znalost syntaxe C# +* IDE, např. Visual Studio nebo VS Code + +> **Pro tip:** Použijte bezplatnou evaluační licenci Aspose.PDF pro rychlé experimenty; přidá malou vodoznak, ale umožní vám otestovat všechny funkce. + +## Jak nakreslit obdélník do PDF pomocí C# + +Jádrem úkolu je vytvořit `RectangleShape`, nastavit jeho velikost a tah a připojit jej k `Page`. Následující nadpis H2 obsahuje primární klíčové slovo, čímž splňuje SEO požadavky. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Vysvětlení jednotlivých kroků + +| Krok | Proč je důležitý | +|------|-------------------| +| **1️⃣ Create a new PDF document** | Inicializuje kontejner, který bude obsahovat stránky a grafiku. | +| **2️⃣ Add a blank page** | Potřebujete objekt `Page`, protože tvary se připojují k stránce, ne přímo k dokumentu. | +| **3️⃣ Define the rectangle bounds** | Zde se ukazuje **how to define rectangle dimensions**. Konstruktor `Rectangle` přijímá `x`, `y`, `width` a `height` v bodech (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape` je třída Aspose, která vykresluje obdélník. Nastavení `StrokeColor` určuje obrys; můžete také nastavit `FillColor` pro plnou výplň. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` vyvolá výjimku, pokud obdélník přesahuje velikost stránky, čímž zabrání poškozeným PDF. | +| **6️⃣ Add the shape to the page** | Tvar se stane součástí content streamu stránky. | +| **7️⃣ Save the PDF** | Uloží dokument do souboru, který můžete otevřít v libovolném PDF prohlížeči. | + +Výsledný `RectangleDemo.pdf` obsahuje černý obdélník umístěný v levém horním rohu stránky, přesně 500 pt široký a 700 pt vysoký. + +![nakreslit obdélník do pdf příklad](https://example.com/rectangle-demo.png "nakreslit obdélník do pdf příklad") + +*Text alternativy obrázku: nakreslit obdélník do pdf příklad ukazující černý obdélník v levém horním rohu PDF stránky.* + +## Jak definovat rozměry obdélníku pro různé velikosti stránek + +Ukázka výše používá pevné hodnoty (`500 x 700`). Ve skutečných aplikacích často potřebujete, aby se obdélník přizpůsobil šířce a výšce stránky. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Klíčové body:** + +* Použijte `page.PageInfo.Width` a `Height` pro načtení skutečné velikosti stránky. +* Násobení faktorem (např. `0.8f`) vám umožní vyjádřit rozměry jako procento stránky. +* Centrovaní se dosáhne odečtením velikosti obdélníku od velikosti stránky a vydělením zbytku dvěma. + +## Časté úskalí a jak se jim vyhnout + +| Problém | Proč k tomu dochází | Řešení | +|---------|----------------------|--------| +| Obdélník přesahuje stránku | Pevně zakódované rozměry jsou větší než velikost stránky. | Zavolejte `page.CheckShapeBoundary` **před** přidáním tvaru; upravte rozměry, pokud je vyhozena výjimka. | +| Obrys není viditelný | `StrokeColor` zůstala na výchozí (`Color.Empty`). | Explicitně nastavte `StrokeColor` (např. `Color.Black`). | +| Obdélník se zobrazuje mimo obrazovku | Souřadnice v PDF začínají v levém dolním rohu; použití souřadnic typu „horní‑levý“ způsobí převrácení. | Pamatujte, že počátek `(0,0)` je levý dolní roh. Upravit `y` podle toho nebo použít `pageHeight - desiredY`. | +| Neočekávaná tloušťka čáry | Výchozí šířka čáry může být pro tisk příliš tenká. | Nastavte `rectangleShape.LineWidth = 2;` pro zvýšení tloušťky. | + +## Rozšíření příkladu + +Jakmile umíte **draw rectangle on pdf**, můžete snadno přidat i další tvary: + +* **EllipseShape** – pro kruhy nebo elipsy. +* **PolygonShape** – pro vlastní mnohoúhelníky. +* **TextFragment** – pro popisky vašich obdélníků. + +Všechny tvary používají stejný postup: definovat hranice, nakonfigurovat vzhled, ověřit hranice a poté přidat na stránku. + +## Kompletní, spustitelný program + +Níže je celý program, který kombinuje základní obdélník a příklad dynamického velikostního nastavení. Zkopírujte jej do nového konzolového projektu, obnovte NuGet balíček `Aspose.PDF` a spusťte. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Očekávaný výstup:** +Otevřete `CombinedRectangles.pdf`. Uvidíte černý obdélník ukotvený v levém dolním rohu a centrovaný tmavě modrý obdélník s světle žlutou výplní. Oba obdélníky respektují okraje stránky. + +## Závěr + +Nyní víte, jak **draw rectangle on pdf** pomocí C# a přesně **how to define rectangle dimensions** pro pevné i responzivní rozvržení. Přístup využívá `RectangleShape` z Aspose.PDF, kontrolu hranic a jednoduchou aritmetiku pro přizpůsobení jakékoli velikosti stránky. + +Dále můžete zkoumat: + +* Přidání **výplňových barev** a **stylů čar** (čárkovaná, tečkovaná) – sekundární klíčové slovo: how to define rectangle dimensions with style. +* Kombinování více tvarů do jedné `Page` pro tvorbu grafů nebo formulářů. +* Export PDF do streamu pro webová API místo ukládání na disk. + +Experimentujte s různými velikostmi, barvami a pozicemi, abyste zvládli PDF grafiku ve svých .NET aplikacích. Šťastné kódová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í implementační přístupy ve vašich projektech. + +- [Jak přizpůsobit PDF pomocí Aspose.PDF pro .NET: nastavit okraje stránky a kreslit čáry](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Jak přidat razítka stránek do PDF pomocí Aspose.PDF pro .NET: kompletní průvodce](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Jak přidat číslování stránek do PDF pomocí Aspose.PDF pro .NET | Vodoznaky a pozadí](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/conversion-export/_index.md b/pdf/czech/net/conversion-export/_index.md index 3d279c6373..0b6fbc6188 100644 --- a/pdf/czech/net/conversion-export/_index.md +++ b/pdf/czech/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Naučte se, jak převádět dokumenty PDF do obrázků TIFF pomocí Aspose.PDF p ### [Jak uložit PDF pomocí Aspose – krok za krokem průvodce](./how-to-save-pdf-with-aspose-step-by-step-guide/) Naučte se, jak pomocí Aspose.PDF v .NET uložit PDF soubory s různými možnostmi nastavení a optimalizace. +### [Uložte PDF jako HTML a převeďte na PDF/X‑4 pomocí Aspose.PDF v C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Naučte se uložit PDF jako HTML a následně jej převést na PDF/X‑4 pomocí Aspose.PDF v C#. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/czech/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..5dc3185e87 --- /dev/null +++ b/pdf/czech/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Uložte PDF jako HTML a převeďte PDF na PDF/X‑4 pomocí Aspose.PDF pro + C#. Krok za krokem kód ukazuje export do HTML, výpis podpisů a úpravu grafického + stavu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: cs +lastmod: 2026-08-14 +og_description: Uložte PDF jako HTML a převádějte PDF na PDF/X‑4 pomocí Aspose.PDF + pro C#. Postupujte podle tohoto kompletního návodu pro export HTML, výpis podpisů + a úpravu grafických stavů. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Uložte PDF jako HTML a převeďte na PDF/X‑4 pomocí Aspose.PDF – průvodce + pro C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Uložte PDF jako HTML a převeďte na PDF/X‑4 pomocí Aspose.PDF v C# +url: /cs/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Uložte PDF jako HTML a převedete na PDF/X‑4 pomocí Aspose.PDF v C# + +Pokud potřebujete **uložit PDF jako HTML**, Aspose.Pdf proces zjednodušuje. Tento tutoriál také ukazuje, jak **převést PDF na PDF/X‑4**, vypsat pole podpisů a přidat vlastní ExtGState, čímž získáte kompletní end‑to‑end workflow. + +Dozvíte se, jak: + +* Exportovat PDF do čistého HTML při vynechání rastrových obrázků. +* Převést PDF dokument na standard PDF/X‑4 pro tiskové výstupy. +* Vyjmenovat všechna pole podpisů v PDF. +* Vložit vlastní grafický stav (ExtGState) na první stránku. + +Veškerý kód běží na .NET 6 nebo novějším a vyžaduje NuGet balíček Aspose.Pdf pro .NET. + +## Požadavky + +| Požadavek | Důvod | +|-------------|--------| +| .NET 6 SDK nebo novější | Poskytuje runtime pro ukázkový C# kód. | +| Visual Studio 2022 (nebo jakékoli C# IDE) | Umožňuje snadnou úpravu a ladění. | +| Aspose.Pdf pro .NET (v23.12 nebo novější) | Dodává třídy `Document`, `PdfFormatConversionOptions` a `HtmlSaveOptions` použité v tutoriálu. | +| Ukázkový PDF soubor (`sample.pdf`) | Vstupní dokument, který bude zpracován. | + +Nainstalujte knihovnu pomocí: + +```bash +dotnet add package Aspose.Pdf +``` + +## Přehled řešení + +Program provádí šest logických kroků: + +1. Načte zdrojové PDF. +2. Vypíše názvy všech polí podpisů. +3. **Převede PDF na PDF/X‑4** a uloží výsledek. +4. **Uloží PDF jako HTML** při vynechání rastrových obrázků. +5. Přidá vlastní ExtGState (grafický stav) na první stránku. +6. Uloží upravené PDF s novým grafickým stavem. + +Každý krok je podrobně vysvětlen níže spolu s kompletním kódem a odůvodněním rozhodnutí. + +## Krok 1: Načtení PDF dokumentu + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Proč je to důležité*: `Document` představuje celý PDF soubor. Načtení jednou umožňuje znovu použít stejný objekt pro všechny následující operace, čímž se snižuje I/O zátěž. + +## Krok 2: Vypsání všech názvů polí podpisů + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Proč je to důležité*: Znalost názvů polí podpisů je nezbytná, když později potřebujete ověřovat, odstraňovat nebo nahrazovat digitální podpisy. Kolekce `Signatures` poskytuje rychlý, jen‑pro‑čtení pohled na pole. + +## Krok 3: Převod PDF na PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Klíčové body** + +* `PdfStandard.PdfX4` říká Aspose.Pdf, aby vložil všechny požadované zdroje (písma, barevné profily) a vynutil omezení PDF/X‑4. +* Převod probíhá v paměti; na disk je zapsán jen finální soubor, což udržuje operaci rychlou. + +> **Tip:** Ověřte výstup pomocí PDF/X‑4 validátoru (např. Adobe Preflight), pokud je váš následný workflow přísný ohledně shody. + +## Krok 4: Uložení PDF jako HTML při vynechání rastrových obrázků + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Proč byste to mohli chtít**: HTML výstup je užitečný pro webové náhledy nebo indexaci obsahu. Vynechání rastrových obrázků (`SkipRasterImages = true`) udržuje HTML odlehčené a zlepšuje načítací časy, zejména když původní PDF obsahuje vysoce rozlišené skeny. + +## Krok 5: Přidání vlastního ExtGState na první stránku + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Vysvětlení*: Objekt **ExtGState** řídí průhlednost, režim míchání a další grafické parametry. Přidáním `GS0` můžete později tento stav odkazovat v content streamu (např. pro poloprůhledné překrytí). Kód používá nízkoúrovňové COS API, protože Aspose.Pdf neexponuje vysokou úroveň obalu pro tvorbu ExtGState. + +## Krok 6: Uložení upraveného PDF s novým ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Finální soubor (`sample_with_extgstate.pdf`) obsahuje: + +* Všechny původní stránky a obsah. +* Kompatibilní verzi PDF/X‑4 (`sample_pdfx4.pdf`). +* HTML reprezentaci bez rastrových obrázků (`sample.html`). +* Vlastní ExtGState (`GS0`) připojený ke zdrojům první stránky. + +### Očekávaný výstup v konzoli + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Pokud zdrojové PDF neobsahuje žádné podpisy, smyčka nic nevypíše, ale pokračuje bez chyby. + +## Běžné varianty a okrajové případy + +| Situace | Úprava | +|-----------|------------| +| **PDF neobsahuje žádné stránky** | Zkontrolujte `doc.Pages.Count` před přístupem k `doc.Pages[1]`, abyste předešli `IndexOutOfRangeException`. | +| **Potřebujete PDF/A‑2b místo PDF/X‑4** | Změňte `PdfStandard.PdfX4` na `PdfStandard.PdfA2b` v `PdfFormatConversionOptions`. | +| **Chcete zachovat rastrové obrázky** | Nastavte `SkipRasterImages = false` (nebo vlastnost vynechejte) v `HtmlSaveOptions`. | +| **Více ExtGState objektů** | Používejte unikátní klíče (`GS1`, `GS2`, …) při přidávání do `extGStateDict`. | +| **Velká PDF (stovky MB)** | Před uložením povolte `doc.OptimizeResources = true`, čímž snížíte využití paměti. | + +## Kompletní zdrojový kód (spustitelný) + + + +## 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, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vlastních projektech. + +- [Komplexní průvodce : Převod PDF na HTML pomocí Aspose.PDF .NET s vlastními strategiemi](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Převod PDF na HTML s vlastními URL obrázků pomocí Aspose.PDF .NET : Kompletní průvodce](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF na HTML konverze pomocí Aspose.PDF .NET : Uložení obrázků jako externí PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/programming-with-forms/_index.md b/pdf/czech/net/programming-with-forms/_index.md index 4af3257667..99e5a0b758 100644 --- a/pdf/czech/net/programming-with-forms/_index.md +++ b/pdf/czech/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Tyto tutoriály také obsahují podrobné příklady kódu, jasná vysvětlení | [Nastavit popisek přepínače](./set-radio-button-caption/) Naučte se, jak nastavit popisky přepínačů v PDF pomocí Aspose.PDF pro .NET. Tato podrobná příručka vás provede načítáním, úpravou a ukládáním formulářů PDF. | | [Textové pole](./text-box/) | Zjistěte, jak snadno přidat textová pole do PDF souborů pomocí Aspose.PDF pro .NET s tímto podrobným návodem. Vylepšete interakci s uživatelem. | | [Jak vytvořit PDF pomocí Aspose – Přidat formulářové pole a stránky](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Naučte se, jak pomocí Aspose.PDF pro .NET vytvořit PDF, přidat formulářová pole a stránky v jednom průvodci. | +| [Vytvořit pole PDF formuláře v C# – krok za krokem](./create-pdf-form-field-in-c-step-by-step-guide/) | Naučte se, jak v C# pomocí Aspose.PDF vytvořit pole formuláře PDF krok za krokem. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/czech/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..b6c5e8b1fe --- /dev/null +++ b/pdf/czech/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-14 +description: Rychle vytvořte pole formuláře PDF pomocí C#. Naučte se, jak přidat textové + pole do PDF a upravit PDF tak, aby obsahovalo textové pole pomocí Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: cs +lastmod: 2026-08-14 +og_description: Vytvořte pole formuláře PDF pomocí C#. Tento tutoriál ukazuje, jak + přidat textové pole do PDF a upravit PDF tak, aby obsahovalo textové pole pomocí + Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Vytvořte PDF formulářové pole v C# – kompletní programovací průvodce +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Vytvořte PDF formulářové pole v C# – krok za krokem +url: /cs/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření pole formuláře PDF v C# – krok za krokem + +Pokud potřebujete **vytvořit pole formuláře PDF** v dokumentu, tento průvodce vás provede celým procesem. Uvidíte přesně, jak **přidat textové pole do PDF** stránek a jak **upravit PDF tak, aby obsahovalo textové pole** pomocí knihovny Aspose.PDF pro .NET. + +Práce s PDF formuláři je běžnou požadavkou pro fakturační systémy, průzkumy nebo jakýkoli workflow, který sbírá vstup od uživatele. Na konci tohoto tutoriálu budete mít znovupoužitelný úryvek kódu, který vytvoří plně funkční textové pole, umístí jej tam, kde chcete, a uloží aktualizované PDF – vše bez opuštění vašeho C# projektu. + +## 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+) +* Visual Studio 2022 nebo jakékoli IDE podporující C# +* Aktivní licenci Aspose.PDF pro .NET (bezplatná zkušební verze stačí pro vývoj) +* PDF soubor pojmenovaný `input.pdf` umístěný v známém adresáři (v tutoriálu je jako zástupce použito `YOUR_DIRECTORY`) + +> **Tip:** Pokud ještě nemáte licenci, můžete si požádat o dočasný klíč na webu Aspose; knihovna funguje v evaluačním režimu bez úprav kódu. + +## Jak vytvořit pole formuláře PDF v C# (přehled) + +1. Načtěte existující PDF dokument. +2. Vytvořte instanci `TextBoxField` a nastavte její název a vzhled. +3. Přidejte widget anotaci, která určuje vizuální obdélník na cílové stránce. +4. Vložte pole do kolekce formulářů dokumentu. +5. Uložte upravené PDF. + +Každý krok je podrobně vysvětlen níže, včetně kompletních ukázek kódu a odůvodnění volání API. + +## Krok 1: Načtení PDF dokumentu + +Prvním úkolem je načíst zdrojové PDF. Aspose.PDF představuje PDF soubor třídou `Document`. Načtení dokumentu vám poskytne přístup k jeho stránkám, kolekci formulářů a dalším strukturám. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Proč je to důležité:** +Načtení souboru vytvoří v‑paměťový model PDF, který vám umožní přidávat, odebírat nebo upravovat objekty, aniž byste poškodili původní soubor. Objekt `Document` také vystavuje vlastnost `Form`, kde později **přidáte textové pole do PDF**. + +## Krok 2: Vytvoření textového pole + +Textové pole je typ formulářového pole, který uživatelům umožňuje zadávat volný text. V Aspose.PDF jej vytvoříte instancí `TextBoxField`, přičemž předáte cílovou stránku a obdélník definující počáteční velikost widgetu. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Proč je to důležité:** +* `PartialName` je klíč, který nástroje pro zpracování formulářů (např. Adobe Acrobat, server‑side parsers) používají k získání zadané hodnoty. +* Obdélník, který zde předáte, určuje pouze *počáteční* velikost widgetu; jeho vizuální umístění můžete později upravit pomocí widget anotace (další krok). +* Nastavení `DefaultAppearance` zajišťuje, že text uvnitř pole bude konzistentně vykreslen ve všech prohlížečích. + +## Krok 3: Definování vizuální widget anotace + +Formulářové pole může mít jednu nebo více **widget anotací**, které určují, kde se pole zobrazí na každé stránce. Přidáním widgetu můžete umístit stejné logické pole na jiné místo nebo dokonce na více stránek. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Proč je to důležité:** +Widget obdélník určuje souřadnice na obrazovce, které uživatelé vidí. Pokud tento krok přeskočíte, pole může existovat ve struktuře PDF, ale nebude viditelné pro koncového uživatele. Přidání widgetu je krok, který skutečně **přidá textové pole do PDF**. + +## Krok 4: Přidání nakonfigurovaného pole do formuláře dokumentu + +Nyní, když je `TextBoxField` plně nastavený, musíte jej zaregistrovat v kolekci formulářů PDF. Tím se pole stane součástí interaktivního formuláře a zajistí se jeho uložení. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Proč je to důležité:** +Bez přidání pole do `pdfDocument.Form` by PDF prohlížeč ignoroval widget anotaci a data pole by nikdy nebyla odeslána. Tento řádek finalizuje operaci **upravit PDF tak, aby obsahovalo textové pole**. + +## Krok 5: Uložení aktualizovaného PDF + +Nakonec zapíšete změny zpět na disk. Můžete přepsat původní soubor nebo vytvořit nový; v příkladu se ukládá do `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Když otevřete `output.pdf` v Adobe Acrobat Reader, uvidíte obdélníkové textové pole označené „Comments“ na stránce 2. Uživatelé mohou kliknout dovnitř, psát a zadaný text bude součástí dat PDF formuláře. + +## Kompletní funkční příklad + +Když spojíme všechny části, získáme kompletní, připravený program. Zkopírujte jej do nového konzolového projektu, nahraďte `YOUR_DIRECTORY` skutečnou cestou ke složce a spusťte. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Očekávaný výstup:** +Spuštění programu vypíše dva potvrzovací řádky do konzole. Otevření `output.pdf` zobrazí textové pole na stránce 2, kde uživatel může zadat komentáře. Když je formulář odeslán (např. pomocí tlačítka „Submit“ v Adobe Acrobat), název pole `Comments` se objeví v exportovaných datech FDF nebo XFDF. + +## Běžné varianty a okrajové případy + +| Situace | Jak upravit kód | +|-----------|-----------------------| +| **Přidat pole na jinou stránku** | Změňte `pdfDocument.Pages[1]` na požadovaný index stránky (číslování od 0). | +| **Vytvořit víceřádkové textové pole** | Nastavte `textBox.Multiline = true;` před přidáním widgetu. | +| **Nastavit výchozí hodnotu** | Přiřaďte `textBox.Value = "Enter your comments here";`. | +| **Označit pole jako povinné** | Nastavte `textBox.Required = true;`. | +| **Umístit pole na více stránek** | Zavolejte `textBox.AddWidgetAnnotation` pro každý další obdélník na cílových stránkách. | +| **Použít vlastní font** | Načtěte font pomocí `FontRepository.AddFont("path/to/font.ttf")` a odkažte na něj v `DefaultAppearance`. | + +**Tip:** Vždy ověřujte souřadnice obdélníku vůči velikosti stránky (`pdfDocument.Pages[1].Rect`). Pokud widget leží mimo okraje stránky, prohlížeče jej mohou oříznout nebo skrýt. + +## Testování pole formuláře + +1. Otevřete `output.pdf` v Adobe Acrobat Reader. +2. Klikněte do pole „Comments“; kurzor by se měl objevit. +3. Zadejte libovolný text a stiskněte **Tab** nebo klikněte mimo pole. +4. Zvolte **File → Save As** pro uložení zadané hodnoty. +5. (Volitelné) Použijte API `Form` z Aspose.PDF k programovému získání hodnoty: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Tento úryvek ukazuje, že pole není jen viditelné, ale také lze získat pomocí kódu – což je nezbytné pro server‑side zpracování. + +## Závěr + +Nyní víte, jak **vytvořit pole formuláře PDF** v C# od začátku až do konce. Tutoriál pokrýval načtení PDF, konfiguraci `TextBoxField`, přidání widget anotace, registraci pole a uložení výsledku. S těmito stavebními kameny můžete **přidat textové pole do PDF** dokumentů, **upravit PDF tak, aby obsahovalo textové pole** a rozšířit přístup i na další typy polí, jako jsou zaškrtávací políčka, přepínače nebo rozbalovací seznamy. + +Dále prozkoumejte související témata jako **extrakce dat z formuláře**, **zploštění PDF formulářů** nebo **stylování polí pomocí okrajů a barev**. Každý z těchto konceptů staví na stejném jádru API, které jste právě zvládli, a umožní vám vytvářet sofistikované interaktivní PDF kompletně v C#. + +Šťastné kódování a nebojte se experimentovat s různými obdélníky, fonty a validačními pravidly, aby vyhovovaly potřebám vaší aplikace! + +## Co se naučíte 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, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vašich projektech. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/programming-with-operators/_index.md b/pdf/czech/net/programming-with-operators/_index.md index 8d98f67cb7..0c744e3e68 100644 --- a/pdf/czech/net/programming-with-operators/_index.md +++ b/pdf/czech/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Výukové programy „Programování s operátory“ v Aspose.PDF pro .NET vás | [Kreslení XFormu na stránce](./draw-xform-on-page/) | Naučte se, jak kreslit XForms v PDF pomocí Aspose.PDF pro .NET s tímto komplexním podrobným návodem. | | [Operátory PDF](./pdf-operators/) | Podrobný návod k používání operátorů PDF s Aspose.PDF pro .NET. Přidání obrázku na stránku PDF a zadání jeho pozice. | | [Odstranění grafických objektů v souboru PDF](./remove-graphics-objects/) V tomto podrobném návodu se naučte, jak odstranit grafické objekty ze souboru PDF pomocí nástroje Aspose.PDF pro .NET. Zjednodušte si manipulaci s PDF soubory. | +| [Vytvořit prázdný PDF slovník v C# pomocí Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Naučte se, jak vytvořit prázdný PDF slovník v C# pomocí Aspose.Pdf. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/czech/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..1922039c27 --- /dev/null +++ b/pdf/czech/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Vytvořte prázdný PDF slovník v C# pomocí Aspose.Pdf – naučte se, jak + přidat grafický stav do kolekce ExtGState a programově upravovat PDF soubory. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: cs +lastmod: 2026-08-14 +og_description: Vytvořte prázdný PDF slovník v C# pomocí Aspose.Pdf. Postupujte podle + tohoto kompletního průvodce, jak přidat vlastní grafický stav do kolekce ExtGState + PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Vytvořte prázdný PDF slovník v C# – průvodce krok za krokem Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Vytvořte prázdný PDF slovník v C# pomocí Aspose.Pdf +url: /cs/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření prázdného PDF slovníku v C# pomocí Aspose.Pdf + +Pokud potřebujete **vytvořit prázdný PDF slovník** objektů při práci s PDF soubory, tento průvodce vám přesně ukáže, jak to provést v C# pomocí knihovny Aspose.Pdf. Ať už vytváříte vlastní grafický stav, přidáváte nový zdroj nebo připravujete šablonu pro pozdější použití, níže uvedené kroky vám poskytnou kompletní, spustitelné řešení. + +Dozvíte se, jak načíst PDF, získat slovník zdrojů první stránky, vytvořit zcela nový `CosPdfDictionary` a vložit jej do kolekce `ExtGState`. Na konci tutoriálu budete mít funkční `output.pdf`, který obsahuje nově vytvořený slovník. + +## Požadavky + +Než začnete, ujistěte se, že máte: + +- .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.6+) +- Visual Studio 2022 nebo jakékoli C# IDE, které preferujete +- Licenci Aspose.Pdf pro .NET (nebo dočasný evaluační klíč) +- Vzorek PDF pojmenovaný **input.pdf** umístěný ve složce, kterou ovládáte (cesta ke složce bude použita jako `dataDir`) + +Žádné další NuGet balíčky nejsou potřeba nad rámec `Aspose.Pdf`. + +## Krok 1: Nastavení projektu a odkaz na Aspose.Pdf + +1. Vytvořte nový projekt **Console App** ve Visual Studiu. +2. Otevřete **NuGet Package Manager** a nainstalujte `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Přidejte následující `using` direktivy na začátek souboru `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Proč tyto jmenné prostory?* `Aspose.Pdf` obsahuje základní třídu `Document`, zatímco `Aspose.Pdf.Operators.Gfx` poskytuje `CosPdfDictionary`, `CosPdfNumber` a související nízkoúrovňové PDF objekty potřebné k **vytvoření prázdného PDF slovníku**. + +## Krok 2: Načtení zdrojového PDF + +Prvním krokem je načíst existující PDF soubor do instance `Document`. Tím získáte přístup ke všem stránkám, zdrojům a nízkoúrovňovým slovníkům. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Vysvětlení*: `Document` načte soubor do paměti a připraví interní struktury. Příkaz `using` zajistí uvolnění souborového handle po dokončení zpracování. + +## Krok 3: Přístup ke slovníku zdrojů první stránky + +Každá PDF stránka má slovník **Resources**, který seskupuje fonty, obrázky, objekty ExtGState a další sdílené zdroje. Pro vložení nového grafického stavu musíme tento slovník upravit. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` je pomocná třída, která vám umožní zacházet se slovníkem PDF jako s C# `Dictionary`. + +## Krok 4: Získání (nebo vytvoření) kolekce ExtGState + +`ExtGState` obsahuje objekty grafického stavu, jako je neprůhlednost, režim míchání a šířka čáry. Pokud zdrojové PDF již obsahuje položku `ExtGState`, použijeme ji; jinak vytvoříme nový prázdný slovník. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Proč tato kontrola?* Některá PDF úplně neobsahují položku `ExtGState`. Ošetřením obou případů je tutoriál odolný vůči libovolnému vstupnímu souboru. + +## Krok 5: **Vytvoření prázdného PDF slovníku** pro nový grafický stav + +Nyní skutečně **vytvoříme prázdný PDF slovník** objektů, který definuje parametry grafického stavu. Slovník začíná prázdný a přidáme požadované klíče: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Co jednotlivé položky dělají + +| Klíč | Typ | Význam | +|------|-----|--------| +| **CA** | `CosPdfNumber` | Neprůhlednost tahů (rozsah 0‑1). | +| **ca** | `CosPdfNumber` | Neprůhlednost výplní (rozsah 0‑1). | +| **BM** | `CosPdfName` | Režim míchání; `"Normal"` je nejčastější. | + +Protože jsme začali s **prázdným PDF slovníkem**, máte plnou kontrolu nad tím, které položky jsou přidány. Slovník můžete rozšířit o další parametry grafického stavu, jako jsou `LW` (šířka čáry) nebo `LC` (ukončení čáry), kdykoliv budete potřebovat. + +## Krok 6: Vložení nového grafického stavu do ExtGState + +Slovník `ExtGState` funguje jako mapa, kde je každá položka identifikována názvem (např. `GS0`, `GS1`). Přidáme náš čerstvě vytvořený slovník pod jedinečný klíč. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Pokud plánujete přidat více stavů, zvyšte příponu (`GS1`, `GS2`, …), aby nedošlo ke kolizi názvů. + +## Krok 7: Uložení upraveného PDF + +Nakonec zapíšeme změny zpět na disk. Metoda `Save` automaticky serializuje aktualizované slovníky. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Otevřete `output.pdf` v libovolném PDF prohlížeči a prohlédněte položku **Resources → ExtGState** (většina prohlížečů ji skryje, ale nástroje jako Adobe Acrobat Preflight nebo PDF‑Tron ji dokážou zobrazit). Měli byste vidět položku `GS0` obsahující hodnoty neprůhlednosti a režimu míchání, které jste definovali. + +## Kompletní funkční příklad + +Sestavením všech částí dohromady získáte celý program, který můžete zkopírovat a vložit do `Program.cs` a spustit: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Očekávaný výstup** – Konzole vypíše potvrzovací řádek a `output.pdf` obsahuje novou položku `GS0` pod `ExtGState`. Když vykreslíte stránku, která odkazuje na `GS0` (např. pomocí operátoru obsahu `gs`), tahy budou zcela neprůhledné, zatímco výplně budou 50 % průhledné. + +## Často kladené otázky a řešení okrajových případů + +| Otázka | Odpověď | +|--------|---------| +| *Co když PDF obsahuje více stránek?* | Příklad cílí na první stránku (`Pages[1]`). Pro úpravu všech stránek projděte `pdfDocument.Pages` a opakujte kroky 3‑5 pro zdroje každé stránky. | +| *Mohu přidat slovník na stránku, která již má položku ExtGState pojmenovanou „GS0“?* | Ano, ale musíte použít jiný klíč (`GS1`, `GS2`, …), aby nedošlo k přepsání existující položky. | +| *Je bezpečné měnit slovník po uložení?* | Po zavolání `Save` je v‑paměti reprezentace oddělena od souboru. Můžete nadále upravovat objekt `Document` a volat `Save` znovu, pokud bude potřeba. | +| *Potřebuji licenci pro Aspose.Pdf k použití ` | | + +## 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í implementační přístupy ve vašich projektech. + +- [Jak vytvořit čárkované čáry v PDF pomocí Aspose.PDF pro .NET: krok za krokem](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Jak odstranit grafiku z PDF pomocí Aspose.PDF .NET: kompletní průvodce](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Jak vytvořit vícevrstvé PDF pomocí Aspose.PDF pro .NET: komplexní průvodce](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/programming-with-security-and-signatures/_index.md b/pdf/czech/net/programming-with-security-and-signatures/_index.md index d9439c197a..5f339be5e4 100644 --- a/pdf/czech/net/programming-with-security-and-signatures/_index.md +++ b/pdf/czech/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Tento tutoriál vám poskytne podrobný přehled metod a technik pro zajištěn | [Kontrola podpisů PDF v C# – Jak číst podepsané PDF soubory](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Naučte se, jak v C# číst a ověřovat digitální podpisy v PDF souborech pomocí Aspose.PDF pro .NET. | | [Jak opravit PDF soubory – Kompletní průvodce C# s Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Naučte se, jak opravit poškozené PDF soubory pomocí Aspose.PDF pro .NET v C#. Kompletní průvodce krok za krokem. | | [Ověření PDF podpisu v C# – Kompletní programovací průvodce](./verify-pdf-signature-in-c-complete-programming-guide/) | Naučte se, jak v C# ověřovat digitální podpisy PDF souborů pomocí Aspose.PDF pro .NET. Kompletní průvodce krok za krokem. | +| [Vytvoření možností podpisu v C# – kompletní průvodce digitálním podepisováním](./create-signature-options-in-c-full-guide-to-digital-signing/) | Kompletní průvodce vytvořením možností digitálního podpisu v C# pomocí Aspose.PDF. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/czech/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..bd5236e98e --- /dev/null +++ b/pdf/czech/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Vytvořte možnosti podpisu v C# pro aplikaci digitálního podpisu. Naučte + se, jak nakonfigurovat podpis, implementovat vlastní hashovací funkci a programově + podepisovat dokumenty. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: cs +lastmod: 2026-08-14 +og_description: Vytvořte možnosti podpisu v C# a použijte digitální podpis. Tento + tutoriál vás provede nastavením podpisu, přidáním vlastní hashovací funkce a podepsáním + dokumentu. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Vytvořte možnosti podpisu v C# – krok za krokem průvodce digitálním podepisováním +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Vytvořte možnosti podpisu v C# – kompletní průvodce digitálním podepisováním +url: /cs/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření možností podpisu v C# – kompletní průvodce digitálním podepisováním + +Vytvořte možnosti podpisu v C# pro konfiguraci workflow digitálního podpisu. Tento tutoriál ukazuje, jak aplikovat digitální podpis, implementovat vlastní hashovací funkci a podepsat dokument pomocí třídy `SignatureOptions`. Pokud jste někdy potřebovali podepsat PDF, XML nebo jakýkoli binární payload z .NET aplikace, níže uvedené kroky vám poskytnou připravené řešení. + +Dozvíte se, jak: + +* nakonfigurovat `SignatureOptions` s vlastním hashovacím algoritmem, +* správně zavolat metodu pro podepisování, +* ověřit, že byl podpis aplikován, +* vyhnout se běžným úskalím při konfiguraci podpisu. + +Jedinými předpoklady jsou aktuální .NET SDK (≥ .NET 6) a knihovna pro podepisování, která poskytuje `SignatureOptions` (například **GroupDocs.Signature**, **Aspose.Signature** nebo podobné API). Žádné externí nástroje nejsou vyžadovány. + +--- + +## Požadavky + +| Požadavek | Proč je důležité | +|-------------|----------------| +| .NET 6 SDK nebo novější | Poskytuje moderní jazykové funkce použité v příkladech. | +| NuGet balíček knihovny pro podepisování (např. `GroupDocs.Signature`) | Zajišťuje typ `SignatureOptions` a rozšiřující metodu `Sign`. | +| Přístup k soukromému klíči nebo certifikátu | Nutný pro vytvoření ověřitelného digitálního podpisu. | + +Nainstalujte knihovnu pomocí standardního CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Krok 1: Vytvoření možností podpisu + +Prvním krokem je vytvořit instanci `SignatureOptions` a nastavit vlastnosti, které řídí proces podepisování. Tento objekt říká knihovně *co* má podepsat a *jak* to má udělat. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Proč je to důležité:** `SignatureOptions` funguje jako smlouva mezi vaším kódem a podepisovacím enginem. Nastavením předem se vyhnete opakovanému boilerplate při podepisování více dokumentů. + +--- + +## Krok 2: Implementace vlastní hashovací funkce + +*Vlastní hashovací funkce* vám dává plnou kontrolu nad výstupem, který algoritmus podpisu podepisuje. To je užitečné, když výchozí hash (SHA‑256) nesplňuje požadavky na shodu nebo když potřebujete hashovat podmnožinu dokumentu. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Proč je to důležité:** Přiřazením `CustomSignHash` nahradíte interní hashovací krok knihovny funkcí `MyHash`. Podepisovací engine nyní podepíše bajty vrácené vaší funkcí, což zajišťuje shodu s jakoukoliv vlastní politikou. + +--- + +## Krok 3: Načtení dokumentu a aplikace digitálního podpisu + +Po připravení možností můžete nyní otevřít cílový soubor a zavolat metodu pro podepisování. Metoda `Sign` je poskytována knihovnou a používá nakonfigurované `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Proč je to důležité:** Volání `Sign` provádí interně tři akce: + +1. **Výpočet hash** – nyní delegován na vaši vlastní hashovací funkci. +2. **Generování podpisu** – pomocí soukromého klíče poskytnutého v konfiguraci knihovny. +3. **Vložení** – vygenerovaný podpis je připojen k výstupnímu souboru. + +Pokud kterýkoli krok selže, metoda vrátí `false`, což vám umožní elegantně ošetřit chybu. + +--- + +## Krok 4: Ověření, že je dokument podepsán + +Rychlé ověření potvrzuje, že byl podpis správně aplikován. Většina knihoven poskytuje metodu `Verify`, která kontroluje integritu podepsaného souboru. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Proč je to důležité:** Ověření zajišťuje, že podepsaný dokument nebyl po podpisu pozměněn a že vlastní hash vytvořil kompatibilní výstup. + +--- + +## Jak nakonfigurovat podpis pro různé typy souborů + +Stejný objekt `SignatureOptions` lze znovu použít pro PDF, Word dokumenty, obrázky nebo čisté binární soubory. Jedinou potřebnou změnou je konkrétní třída možností (např. `PdfSignatureOptions`, `WordSignatureOptions`). Zde je rychlý příklad pro JPEG obrázek: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Proč je to důležité:** Porozumění tomu, jak *konfigurovat podpis* pro každý formát, vám umožní rozšířit stejnou základnu kódu napříč různými typy dokumentů, aniž byste přepisovali hashovací logiku. + +--- + +## Časté úskalí a osvědčené postupy + +| Úskalí | Doporučené řešení | +|---------|-----------------| +| Zapomenutí nastavit `CustomSignHash` po vytvoření `SignatureOptions` | Přiřaďte delegáta okamžitě po vytvoření objektu možností. | +| Použití hash algoritmu, který podepisovací certifikát nepodporuje | Ověřte, že použití klíče certifikátu odpovídá délce hash (např. RSA‑2048 s SHA‑512). | +| Opomenutí potřeby uvolnit objekty `Signature` | Zabalte instanci `Signature` do bloku `using`, aby se uvolnily souborové handly. | +| Uložení podepsaného souboru přes původní zdroj | Vždy zapisujte do nové cesty souboru (`outputPath`), abyste zachovali původní dokument. | + +--- + +## Kompletní funkční příklad + +Níže je samostatný program, který spojuje všechny části dohromady. Zkopírujte jej do nového konzolového projektu a spusťte; konzole nahlásí úspěch nebo selhání. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Očekávaný výstup** + +``` +Signature verified successfully. +``` + +Pokud konzole vypíše „Signing failed.“ nebo „Signature verification failed.“, zkontrolujte konfiguraci certifikátu a ujistěte se, že vlastní hash vrací pole bajtů očekávané velikosti. + +--- + +## Závěr + +Nyní víte, jak **vytvořit možnosti podpisu** v C#, připojit **vlastní hashovací funkci** a **aplikovat digitální podpis** na libovolný podporovaný dokument. Tutoriál pokryl celý životní cyklus: konfiguraci možností, podepsání souboru a ověření výsledku. Opětovným použitím stejné instance `SignatureOptions` můžete také **jak nakonfigurovat podpis** pro obrázky, Word soubory nebo surové binární soubory. + +--- + +## Co dál? + +* Prozkoumejte další vlastnosti `SignatureOptions`, jako jsou vizuální razítka, časové servery a řetězce certifikátů – tyto souvisejí s klíčovým slovem **apply digital signature**. +* Experimentujte s dalšími hashovacími algoritmy (např. Blake2b) výměnou implementace uvnitř `MyHash`. +* Integrovat proces podepisování do webového API, aby bylo možné podepisovat dokumenty za běhu – přirozené rozšíření **how to sign document** v servisně orientované architektuře. + +Neváhejte upravit kód podle vlastních bezpečnostních politik a podělte se o své zkušenosti v komentářích. Šťastné podepisová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. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/programming-with-stamps-and-watermarks/_index.md b/pdf/czech/net/programming-with-stamps-and-watermarks/_index.md index 4ae6cadda1..2a41b6f25a 100644 --- a/pdf/czech/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/czech/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Výukové programy „Programování s razítky a vodoznaky“ pro .NET od Aspos | [Text v zápatí PDF souboru](./text-in-footer/) | Naučte se, jak přidat text do zápatí PDF souboru pomocí Aspose.PDF pro .NET. | | [Text v záhlaví PDF souboru](./text-in-header/) | Naučte se přidávat textové záhlaví do PDF souborů pomocí Aspose.PDF pro .NET s tímto podrobným návodem. Vylepšete své dokumenty efektivně a účinně. | | [Přidat Batesovo číslování PDF v C# – Kompletní průvodce](./add-bates-numbering-pdf-in-c-complete-guide/) Naučte se, jak pomocí Aspose.PDF pro .NET přidat Batesovo číslování do PDF souborů v C# s podrobným příkladem kódu. | +| [Jak nastavit možnosti Batesova číslování v C# – kompletní průvodce](./how-to-set-bates-numbering-options-in-c-complete-guide/) Naučte se nastavit možnosti Batesova číslování v PDF pomocí Aspose.PDF pro .NET v C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/czech/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..296b3998ee --- /dev/null +++ b/pdf/czech/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Jak nastavit možnosti Batesova číslování v C# pomocí GroupDocs. Postupujte + podle tohoto krok‑za‑krokem tutoriálu a přidejte vlastní předpony a počáteční čísla + při převodu Wordu do PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: cs +lastmod: 2026-08-14 +og_description: Jak rychle nastavit možnosti Batesova číslování v C#. Tento průvodce + vám ukáže, jak přidat vlastní předpony a počáteční čísla při převodu Wordu do PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Jak nastavit možnosti Bates číslování v C# – krok za krokem tutoriál +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Jak nastavit možnosti Batesova číslování v C# – kompletní průvodce +url: /cs/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak nastavit možnosti Bates číslování v C# – kompletní průvodce + +Pokud potřebujete **jak nastavit možnosti Bates číslování** v C#, tento průvodce vás provede přesnými kroky. Naučíte se, jak nastavit počáteční číslo, přidat předponu a aplikovat číslování při převodu dokumentu Word do PDF pomocí GroupDocs API. + +Zpracování dokumentů často vyžaduje jedinečné identifikátory na každé stránce pro právní nebo archivní účely. Na konci tohoto tutoriálu budete mít znovupoužitelný úryvek, který můžete vložit do libovolného .NET projektu, ať už vytváříte nástroj pro podporu soudních řízení nebo automatizovaný generátor zpráv. Nejsou potřeba žádné externí nástroje – stačí knihovna GroupDocs.Conversion a několik řádků C#. + +## Co budete potřebovat + +* .NET 6.0 SDK nebo novější nainstalované +* Visual Studio 2022 (nebo jakékoli IDE podporující .NET) +* Platná licence GroupDocs.Conversion (bezplatná zkušební verze funguje pro testování) +* Ukázkový dokument Word (`input.docx`), který chcete očíslovat + +Tyto předpoklady zajišťují, že kód poběží bez další konfigurace. + +## Přehled nastavení možností Bates číslování + +Jádro **nastavení možností Bates číslování** spočívá ve třech objektech: + +1. `Document` – načte zdrojový soubor. +2. `BatesNumberingOptions` – obsahuje počáteční číslo, předponu a další podrobnosti formátování. +3. `AddBatesNumbering` – metoda, která vloží číslování na každou stránku. + +Pochopení, proč každá část existuje, vám pomůže přizpůsobit řešení složitějším scénářům, jako jsou vlastní fonty nebo vícejazyčné číslování. + +## Krok 1: Instalace NuGet balíčku GroupDocs.Conversion + +Otevřete terminál ve složce řešení a spusťte: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** poskytuje třídu `Document` a rozšiřující metodu `AddBatesNumbering`, která je použita později v tutoriálu. + +## Krok 2: Načtení zdrojového dokumentu + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Proč tento krok?* +Načtení souboru vytvoří v paměti reprezentaci, kterou může převodový engine manipulovat. Bez instance `Document` nemůžete aplikovat Bates číslování ani žádnou jinou transformaci. + +## Krok 3: Vytvoření možností Bates číslování + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Proč tento krok?* +`BatesNumberingOptions` zapouzdřuje všechna nastavení, která můžete potřebovat při **nastavování možností Bates číslování**. Úprava `StartNumber` a `Prefix` vám umožní sladit výstup s vaším systémem správy případů. Vlastnost `Position` řídí vizuální umístění, což je často požadavek na shodu. + +## Krok 4: Aplikace Bates číslování na dokument + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Metoda `AddBatesNumbering` prochází každou stránku načteného `Document` a vloží nakonfigurovaný řetězec. Protože metoda pracuje s paměťovou reprezentací, můžete před uložením řetězit další kroky zpracování (např. vodoznak). + +## Krok 5: Převod a uložení výsledku jako PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Proč tento krok?* +Ukládání jako PDF je běžný finální formát pro právní dokumenty. Objekt `PdfConvertOptions` vám umožní jemně doladit výstup, ale není vyžadován pro základní číslování. Volání `Save` zapíše plně očíslované PDF na disk. + +## Kompletní, spustitelný příklad + +Spojením všech částí získáte samostatnou konzolovou aplikaci, kterou můžete zkompilovat a spustit: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Očekávaný výstup** + +Spuštěním programu se vytvoří `output.pdf`, kde každá stránka zobrazuje štítek jako `CASE-1000`, `CASE-1001` atd., umístěný v pravém zápatí. Otevřete PDF v libovolném prohlížeči a ověřte, že čísla jsou zobrazená podle očekávání. + +## Časté úskalí a osvědčené postupy + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| **Relativní cesty způsobují `FileNotFoundException`** | Pracovní adresář konzolové aplikace se může lišit od toho ve Visual Studiu. | Používejte absolutní cesty nebo `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Číslování překrývá existující zápatí** | Pokud má zdrojový dokument již obsah v zvoleném prostoru zápatí, může být nové číslo skryté. | Zvolte jinou `Position` (např. `HeaderLeft`) nebo upravte šablonu zdroje. | +| **Velké dokumenty jsou pomalé** | Bates číslování prochází každou stránku; spotřeba paměti roste s velikostí souboru. | Zpracovávejte dokument po částech pomocí `Document.Split`, pokud překročíte 500 stránek. | +| **Vypršení licence** | Bezplatná zkušební verze GroupDocs vyprší po 30 dnech, což způsobí výjimku při `AddBatesNumbering`. | Použijte platný licenční klíč před načtením dokumentu: `License license = new License(); license.SetLicense("license.lic");`. | + +**Tip:** Pokud potřebujete pro každý případ jiný formát čísla (např. `2023-CASE-001`), vytvořte předponu dynamicky před vytvořením `BatesNumberingOptions`. + +## Rozšíření řešení + +Stejný přístup **Bates číslování C#** funguje s dalšími zdrojovými formáty, jako jsou `.txt`, `.html` nebo dokonce obrázky. Stačí změnit příponu souboru při vytváření objektu `Document` a převodový engine se postará o zbytek. + +Můžete také kombinovat **konverzi dokumentů C#** s OCR pro naskenovaná PDF: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Závěr + +Nyní víte **jak nastavit možnosti Bates číslování** v C# od začátku až do konce. Vytvořením objektu `BatesNumberingOptions`, jeho aplikací pomocí `AddBatesNumbering` a uložením výsledku jako PDF můžete automatizovat tvorbu právně vyhovujících, jedinečně identifikovaných dokumentů. + +Odtud můžete zkoumat související témata, jako je **generování PDF v C#**, **konverze dokumentů C#**, nebo pokročilé funkce **GroupDocs API**, jako jsou vodoznaky a digitální podpisy. Experimentujte s různými předponami, pozicemi a formáty čísel, aby vyhovovaly vašemu workflow. + +Šťastné 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í příklady 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. + +- [Přidání Bates číslování PDF v C# – Kompletní průvodce](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Jak přidat a přizpůsobit číslování stránek v PDF pomocí Aspose.PDF pro .NET | Průvodce manipulací s dokumenty](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Jak přidat textový razítkový zápatí v PDF pomocí Aspose.PDF pro .NET: Průvodce krok za krokem](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/annotations/_index.md b/pdf/dutch/net/annotations/_index.md index a1515280a4..2aeb959cee 100644 --- a/pdf/dutch/net/annotations/_index.md +++ b/pdf/dutch/net/annotations/_index.md @@ -35,6 +35,7 @@ Een uitgebreide verzameling tutorials die laten zien hoe u met annotaties in PDF | [Stel de opmaak van tekstannotaties in](./setfreetextannotationformatting/) | Leer hoe u de opmaak van vrije tekstannotaties in PDF-documenten kunt instellen met Aspose.PDF voor .NET met behulp van deze stapsgewijze handleiding. | | [Woorden doorhalen](./strikeoutwords/) | Leer hoe je woorden in een PDF doorhaalt met Aspose.PDF voor .NET met deze uitgebreide stapsgewijze handleiding. Verbeter je vaardigheden in het bewerken van documenten. | | [Gratis tekst PDF-annotatie bijwerken](./updatefreetextannotation/) Leer hoe u vrije tekstannotaties in PDF-documenten kunt bijwerken met Aspose.PDF voor .NET met deze stapsgewijze handleiding. | +| [Rechthoek tekenen op pdf – stap‑voor‑stap C#‑gids](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Leer hoe u met Aspose.PDF voor .NET een rechthoek op een PDF tekent met een stapsgewijze C#‑handleiding. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/dutch/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..3bcb759f7f --- /dev/null +++ b/pdf/dutch/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Teken snel een rechthoek op een PDF met C#. Leer hoe je de afmetingen + van een rechthoek definieert en vormen toevoegt aan een PDF-pagina in slechts een + paar regels. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: nl +lastmod: 2026-08-14 +og_description: teken een rechthoek op pdf met C# in enkele seconden. Deze gids laat + zien hoe je de afmetingen van een rechthoek definieert, een vorm toevoegt en de + paginagrenzen verifieert voor betrouwbare PDF‑grafieken. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: rechthoek tekenen op pdf – volledige C#-tutorial +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Rechthoek tekenen op PDF – stapsgewijze C#‑gids +url: /nl/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# rechthoek tekenen op pdf – volledige C#‑tutorial + +Als je **rechthoek tekenen op pdf** met C# nodig hebt, toont deze gids een beknopte, productie‑klare oplossing. Je ziet precies **hoe je rechthoekafmetingen definieert**, controleert of de vorm past, en voegt deze toe aan een pagina met één methode‑aanroep. + +De tutorial behandelt alles van het maken van een PDF‑document tot het renderen van de rechthoek, zodat je de code kunt kopiëren‑plakken in je eigen project en direct resultaat ziet. Geen externe documentatie nodig — alleen de onderstaande stappen. + +## Vereisten + +Voordat je begint, zorg dat je het volgende hebt: + +* .NET 6.0 of later (de code werkt ook met .NET Framework 4.7+) +* Het **Aspose.PDF for .NET** NuGet‑pakket (`Install-Package Aspose.PDF`) +* Een basisbegrip van C#‑syntaxis +* Een IDE zoals Visual Studio of VS Code + +> **Pro tip:** Gebruik de gratis evaluatielicentie van Aspose.PDF voor snelle experimenten; deze voegt een klein watermerk toe maar laat je alle functies testen. + +## Hoe rechthoek tekenen op PDF met C# + +De kern van de taak is het maken van een `RectangleShape`, het instellen van de grootte en de lijn, en het koppelen aan een `Page`. De volgende H2‑kop bevat het primaire zoekwoord, wat voldoet aan SEO‑eisen. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Uitleg van elke stap + +| Stap | Waarom het belangrijk is | +|------|--------------------------| +| **1️⃣ Maak een nieuw PDF‑document** | Initialiseert de container die pagina’s en grafische elementen zal bevatten. | +| **2️⃣ Voeg een lege pagina toe** | Je hebt een `Page`‑object nodig omdat vormen aan een pagina worden gekoppeld, niet direct aan het document. | +| **3️⃣ Definieer de rechthoek‑grenzen** | Dit is waar je **hoe je rechthoekafmetingen definieert**. De `Rectangle`‑constructor neemt `x`, `y`, `width` en `height` in points (1 pt = 1/72 in). | +| **4️⃣ Maak de rechthoekvorm** | `RectangleShape` is de Aspose‑klasse die een rechthoek rendert. Het instellen van `StrokeColor` bepaalt de omtrek; je kunt ook `FillColor` instellen voor een solide vulling. | +| **5️⃣ Controleer paginagrenzen** | `CheckShapeBoundary` gooit een uitzondering als de rechthoek groter is dan de paginagrootte, waardoor misvormde PDF’s worden voorkomen. | +| **6️⃣ Voeg de vorm toe aan de pagina** | De vorm wordt onderdeel van de content‑stream van de pagina. | +| **7️⃣ Sla de PDF op** | Slaat het document op in een bestand dat je met elke PDF‑viewer kunt openen. | + +De resulterende `RectangleDemo.pdf` bevat een zwarte rechthoek gepositioneerd in de linkerbovenhoek van de pagina, exact 500 pt breed en 700 pt hoog. + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*Afbeeldings‑alt‑tekst: draw rectangle on pdf example toont een zwarte rechthoek in de linkerbovenhoek van een PDF‑pagina.* + +## Hoe rechthoekafmetingen definiëren voor verschillende paginagroottes + +De bovenstaande code gebruikt vaste waarden (`500 x 700`). In echte toepassingen moet de rechthoek vaak aanpassen aan de breedte en hoogte van de pagina. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Belangrijke punten:** + +* Gebruik `page.PageInfo.Width` en `Height` om de werkelijke paginagrootte te lezen. +* Vermenigvuldigen met een factor (bijv. `0.8f`) laat je afmetingen uitdrukken als een percentage van de pagina. +* Centreren bereik je door de rechthoekgrootte van de paginagrootte af te trekken en de rest te halveren. + +## Veelvoorkomende valkuilen en hoe ze te vermijden + +| Valkuil | Waarom het gebeurt | Oplossing | +|---------|--------------------|-----------| +| Rechthoek strekt zich uit buiten de pagina | Hard‑gecodeerde afmetingen groter dan de paginagrootte. | Roep `page.CheckShapeBoundary` **voordat** je de vorm toevoegt; pas afmetingen aan als er een uitzondering wordt gegooid. | +| Lijn niet zichtbaar | `StrokeColor` staat op de standaardwaarde (`Color.Empty`). | Stel `StrokeColor` expliciet in (bijv. `Color.Black`). | +| Rechthoek verschijnt buiten het scherm | Coördinaten beginnen in PDF‑ruimte links‑onder; het gebruik van scherm‑stijl top‑links coördinaten veroorzaakt een omkering. | Onthoud dat de oorsprong `(0,0)` de linksonderhoek is. Pas `y` dienovereenkomstig aan of gebruik `pageHeight - desiredY`. | +| Onverwachte lijndikte | De standaard lijndikte kan te dun zijn voor afdrukken. | Stel `rectangleShape.LineWidth = 2;` in om de dikte te verhogen. | + +## Voorbeeld uitbreiden + +Zodra je **rechthoek tekenen op pdf** kunt, kun je eenvoudig andere vormen toevoegen: + +* **EllipseShape** – voor cirkels of ovalen. +* **PolygonShape** – voor aangepaste polygonen. +* **TextFragment** – om je rechthoeken te labelen. + +Alle vormen volgen dezelfde workflow: grenzen definiëren, uiterlijk configureren, grenzen controleren, en vervolgens toevoegen aan de pagina. + +## Volledig, uitvoerbaar programma + +Hieronder staat het volledige programma dat de basisrechthoek en het dynamische formaatvoorbeeld combineert. Kopieer het naar een nieuw console‑project, herstel het `Aspose.PDF` NuGet‑pakket, en voer uit. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Verwachte output:** +Open `CombinedRectangles.pdf`. Je ziet een zwarte rechthoek verankerd in de linksonderhoek en een gecentreerde donkerblauwe rechthoek met een lichtgele vulling. Beide rechthoeken respecteren de paginamarges. + +## Conclusie + +Je weet nu hoe je **rechthoek tekenen op pdf** met C# kunt doen en precies **hoe je rechthoekafmetingen definieert** voor zowel vaste als responsieve lay‑outs. De aanpak maakt gebruik van Aspose.PDF’s `RectangleShape`, grenscontrole en eenvoudige rekenkunde om zich aan elke paginagrootte aan te passen. + +Vervolgens kun je verkennen: + +* Het toevoegen van **vulkleuren** en **lijntypes** (gestreept, gestippeld) – secundair zoekwoord: hoe je rechthoekafmetingen definieert met stijl. +* Meerdere vormen combineren in één `Page` om diagrammen of formulieren te maken. +* De PDF exporteren naar een stream voor web‑API’s in plaats van op schijf op te slaan. + +Experimenteer met verschillende groottes, kleuren en posities om PDF‑graphics in je .NET‑toepassingen onder de knie te krijgen. Veel programmeerplezier! + +## 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 te beheersen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe PDF’s aanpassen met Aspose.PDF for .NET: Pagina‑marges instellen en lijnen tekenen](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Hoe paginastempels toevoegen in PDF’s met Aspose.PDF for .NET: Een complete gids](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Hoe paginanummer‑stempels toevoegen in PDF’s met Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/conversion-export/_index.md b/pdf/dutch/net/conversion-export/_index.md index a86cb63def..9d3ef6c333 100644 --- a/pdf/dutch/net/conversion-export/_index.md +++ b/pdf/dutch/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Leer hoe u PDF-documenten naar TIFF-afbeeldingen converteert met Aspose.PDF voor ### [Hoe PDF opslaan met Aspose – Stapsgewijze handleiding](./how-to-save-pdf-with-aspose-step-by-step-guide/) Leer hoe u PDF-bestanden opslaat met Aspose in .NET met een duidelijke stap‑voor‑stap uitleg en voorbeeldcode. +### [PDF opslaan als HTML en converteren naar PDF/X‑4 met Aspose.PDF in C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Leer hoe u een PDF opslaat als HTML en vervolgens converteert naar PDF/X‑4 met Aspose.PDF in C#. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/dutch/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..9177287c45 --- /dev/null +++ b/pdf/dutch/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-08-14 +description: PDF opslaan als HTML en PDF converteren naar PDF/X‑4 met Aspose.PDF voor + C#. Stapsgewijze code toont HTML-export, handtekeninglijst en bewerking van de graphics‑state. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: nl +lastmod: 2026-08-14 +og_description: Sla PDF op als HTML en converteer PDF naar PDF/X‑4 met Aspose.PDF + voor C#. Volg deze volledige gids om HTML te exporteren, handtekeningen te vermelden + en grafische toestanden te bewerken. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: PDF opslaan als HTML en converteren naar PDF/X‑4 met Aspose.PDF – C#‑gids +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: PDF opslaan als HTML en converteren naar PDF/X‑4 met Aspose.PDF in C# +url: /nl/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF opslaan als HTML en converteren naar PDF/X‑4 met Aspose.PDF in C# + +Als je **PDF als HTML wilt opslaan**, maakt Aspose.Pdf het proces eenvoudig. Deze tutorial laat ook zien hoe je **PDF naar PDF/X‑4 converteert**, handtekeningvelden opsomt en een aangepaste ExtGState toevoegt, waardoor je een volledige end‑to‑end‑workflow krijgt. + +Je leert hoe je: + +* Een PDF exporteert naar schone HTML terwijl raster‑afbeeldingen worden overgeslagen. +* Een PDF‑document converteert naar de PDF/X‑4‑standaard voor print‑klare output. +* Alle handtekeningvelden in een PDF opsomt. +* Een aangepaste graphics state (ExtGState) toevoegt aan de eerste pagina. + +Alle code draait op .NET 6 of hoger en vereist het Aspose.Pdf for .NET NuGet‑pakket. + +## Vereisten + +| Vereiste | Reden | +|----------|-------| +| .NET 6 SDK of nieuwer | Biedt de runtime voor het C#‑voorbeeld. | +| Visual Studio 2022 (of een andere C#‑IDE) | Maakt eenvoudig bewerken en debuggen mogelijk. | +| Aspose.Pdf for .NET (v23.12 of later) | Levert de `Document`, `PdfFormatConversionOptions` en `HtmlSaveOptions` klassen die in de tutorial worden gebruikt. | +| Een voorbeeld‑PDF‑bestand (`sample.pdf`) | Het bron‑document dat wordt verwerkt. | + +Installeer de bibliotheek met: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overzicht van de oplossing + +Het programma voert zes logische stappen uit: + +1. Laad de bron‑PDF. +2. Som alle handtekeningveld‑namen op. +3. **Converteer PDF naar PDF/X‑4** en sla het resultaat op. +4. **Sla PDF op als HTML** terwijl raster‑afbeeldingen worden overgeslagen. +5. Voeg een aangepaste ExtGState (graphics state) toe aan de eerste pagina. +6. Sla de aangepaste PDF op met de nieuwe graphics state. + +Elke stap wordt hieronder uitgelegd, met volledige code en de reden achter de keuzes. + +## Stap 1: Laad het PDF‑document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Waarom dit belangrijk is*: `Document` vertegenwoordigt het volledige PDF‑bestand. Het één keer laden maakt hergebruik van hetzelfde object voor alle volgende bewerkingen mogelijk, waardoor I/O‑overhead wordt verminderd. + +## Stap 2: Som alle handtekeningveld‑namen op + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Waarom dit belangrijk is*: Het kennen van de handtekeningveld‑namen is essentieel wanneer je later digitale handtekeningen moet valideren, verwijderen of vervangen. De `Signatures`‑collectie biedt een snelle, alleen‑lezen weergave van de velden. + +## Stap 3: Converteer PDF naar PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Belangrijke punten** + +* `PdfStandard.PdfX4` vertelt Aspose.Pdf om alle vereiste resources (lettertypen, kleurprofielen) in te sluiten en de PDF/X‑4‑beperkingen af te dwingen. +* De conversie gebeurt in het geheugen; alleen het uiteindelijke bestand wordt naar schijf geschreven, waardoor de operatie snel blijft. + +> **Pro tip:** Controleer de output met een PDF/X‑4‑validator (bijv. Adobe Preflight) als je downstream‑workflow strikte naleving vereist. + +## Stap 4: Sla PDF op als HTML terwijl raster‑afbeeldingen worden overgeslagen + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Waarom je dit zou willen**: HTML‑output is handig voor web‑preview of content‑indexering. Het overslaan van raster‑afbeeldingen (`SkipRasterImages = true`) houdt de HTML lichtgewicht en verbetert laadtijden, vooral wanneer de originele PDF hoge‑resolutie scans bevat. + +## Stap 5: Voeg een aangepaste ExtGState toe aan de eerste pagina + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Uitleg*: Een **ExtGState**‑object regelt transparantie, blend‑mode en andere grafische parameters. Door `GS0` toe te voegen, kun je later deze state refereren in content‑streams (bijv. voor half‑transparante overlays). De code maakt gebruik van de low‑level COS‑API omdat Aspose.Pdf geen high‑level wrapper biedt voor het aanmaken van ExtGState. + +## Stap 6: Sla de aangepaste PDF op met de nieuwe ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Het uiteindelijke bestand (`sample_with_extgstate.pdf`) bevat: + +* Alle originele pagina’s en content. +* Een conforme PDF/X‑4‑versie (`sample_pdfx4.pdf`). +* Een HTML‑representatie zonder raster‑afbeeldingen (`sample.html`). +* Een aangepaste ExtGState (`GS0`) gekoppeld aan de resources van de eerste pagina. + +### Verwachte console‑output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Als de bron‑PDF geen handtekeningen bevat, print de lus niets maar gaat hij wel verder zonder fout. + +## Veelvoorkomende variaties en randgevallen + +| Situatie | Aanpassing | +|----------|------------| +| **PDF bevat geen pagina’s** | Controleer `doc.Pages.Count` voordat je `doc.Pages[1]` benadert om `IndexOutOfRangeException` te voorkomen. | +| **Je hebt PDF/A‑2b nodig in plaats van PDF/X‑4** | Verander `PdfStandard.PdfX4` naar `PdfStandard.PdfA2b` in `PdfFormatConversionOptions`. | +| **Je wilt raster‑afbeeldingen behouden** | Zet `SkipRasterImages = false` (of laat de eigenschap weg) in `HtmlSaveOptions`. | +| **Meerdere ExtGState‑objecten** | Gebruik unieke sleutels (`GS1`, `GS2`, …) bij het toevoegen aan `extGStateDict`. | +| **Grote PDF’s (honderden MB)** | Schakel `doc.OptimizeResources = true` in vóór het opslaan om het geheugenverbruik te verlagen. | + +## Volledige broncode (uitvoerbaar) + + + +## 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. + +- [Uitgebreide gids: PDF naar HTML converteren met Aspose.PDF .NET en aangepaste strategieën](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [PDF naar HTML converteren met aangepaste afbeeldings‑URL’s met Aspose.PDF .NET: een uitgebreide gids](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF‑naar‑HTML‑conversie met Aspose.PDF .NET: afbeeldingen opslaan als externe PNG’s](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/programming-with-forms/_index.md b/pdf/dutch/net/programming-with-forms/_index.md index 4d3c57406e..52424ded9b 100644 --- a/pdf/dutch/net/programming-with-forms/_index.md +++ b/pdf/dutch/net/programming-with-forms/_index.md @@ -22,9 +22,10 @@ Deze tutorials bieden ook gedetailleerde codevoorbeelden, duidelijke uitleg en i | Titel | Beschrijving | | --- | --- | | [Tooltip toevoegen aan veld](./add-tooltip-to-field/) | Leer in deze stapsgewijze handleiding hoe u tooltips toevoegt aan formuliervelden in PDF-documenten met Aspose.PDF voor .NET. Verbeter de bruikbaarheid en gebruikerservaring. | -| [Arabische tekst invullen](./arabic-text-filling/) | Leer hoe u Arabische tekst in PDF-formulieren kunt invullen met Aspose.PDF voor .NET met deze stapsgewijze tutorial. Verbeter uw vaardigheden in PDF-bewerking. | +| [Arabische tekst invullen](./arabic-text-filling/) | Leer hoe u Arabische tekst in PDF-formulieren kunt invullen met Aspose.PDF voor .NET met deze stap‑voor‑stap‑tutorial. Verbeter uw vaardigheden in PDF-bewerking. | | [Keuzelijst](./combo-box/) Leer hoe u een keuzelijst met invoervak aan een PDF toevoegt met Aspose.PDF voor .NET. Volg onze stapsgewijze handleiding om eenvoudig interactieve PDF-formulieren te maken. | | [Document maken](./create-doc/) | Leer hoe u interactieve PDF-documenten met keuzerondjes maakt met Aspose.PDF voor .NET in deze uitgebreide stapsgewijze handleiding. | +| [PDF-formulierveld maken in C# – stapsgewijze handleiding](./create-pdf-form-field-in-c-step-by-step-guide/) | Leer hoe u een PDF-formulierveld maakt met C# en Aspose.PDF voor .NET in deze stapsgewijze tutorial. | | [Formulierveld verwijderen in PDF-document](./delete-form-field/) | Leer hoe u formuliervelden uit PDF-documenten verwijdert met Aspose.PDF voor .NET met deze stapsgewijze handleiding. Perfect voor ontwikkelaars en PDF-liefhebbers. | | [Bepaal het vereiste veld in het PDF-formulier](./determine-required-field/) | Leer hoe u verplichte velden in een PDF-formulier kunt bepalen met Aspose.PDF voor .NET. Onze stapsgewijze handleiding vereenvoudigt formulierbeheer en verbetert uw PDF-automatiseringsworkflow. | | [Dynamische XFA naar Acro-formulier](./dynamic-xfa-to-acro-form/) | Leer in deze stapsgewijze zelfstudie hoe u dynamische XFA-formulieren naar standaard AcroForms kunt converteren met behulp van Aspose.PDF voor .NET. | diff --git a/pdf/dutch/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/dutch/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..6a723ca4e6 --- /dev/null +++ b/pdf/dutch/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-14 +description: Maak snel een PDF-formulierveld met C#. Leer hoe je een tekstvak aan + een PDF toevoegt en de PDF wijzigt om een tekstvak op te nemen met Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: nl +lastmod: 2026-08-14 +og_description: Maak pdf-formulierveld met C#. Deze tutorial laat zien hoe je een + tekstvak aan een PDF toevoegt en een PDF wijzigt om een tekstvak op te nemen met + behulp van Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Maak pdf‑formulierveld in C# – volledige programmeergids +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: PDF-formulierveld maken in C# – stapsgewijze handleiding +url: /nl/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Maak pdf-formulierveld in C# – stapsgewijze handleiding + +Als je een **pdf-formulierveld maken** in een document moet, leidt deze gids je door het volledige proces. Je ziet precies hoe je **tekstvak aan pdf toevoegen** pagina's, en hoe je **pdf aanpassen om tekstvak op te nemen** met behulp van de Aspose.PDF bibliotheek voor .NET. + +Werken met PDF-formulieren is een veelvoorkomende eis voor factureringssystemen, enquêtes of elke workflow die gebruikersinvoer verzamelt. Aan het einde van deze tutorial heb je een herbruikbaar code‑fragment dat een volledig functioneel tekstvak‑veld maakt, het plaatst waar je wilt, en de bijgewerkte PDF opslaat — alles zonder je C#‑project te verlaten. + +## Vereisten + +* .NET 6.0 of later (de code werkt ook met .NET Framework 4.7+) +* Visual Studio 2022 of een IDE die C# ondersteunt +* Een actieve Aspose.PDF for .NET-licentie (de gratis proefversie werkt voor ontwikkeling) +* Een PDF‑bestand met de naam `input.pdf` geplaatst in een bekende map (de tutorial gebruikt `YOUR_DIRECTORY` als tijdelijke aanduiding) + +> **Pro tip:** Als je nog geen licentie hebt, kun je een tijdelijke sleutel aanvragen op de website van Aspose; de bibliotheek werkt in evaluatiemodus zonder code‑aanpassingen. + +## Hoe een pdf-formulierveld te maken in C# (overzicht) + +1. Laad het bestaande PDF‑document. +2. Instantieer een `TextBoxField` en configureer de naam en het uiterlijk. +3. Voeg een widget‑annotatie toe die de visuele rechthoek op de doelpagina definieert. +4. Voeg het veld toe aan de formulier‑collectie van het document. +5. Sla de aangepaste PDF op. + +Elke stap wordt hieronder in detail uitgelegd, met volledige code‑voorbeelden en de reden achter de API‑aanroepen. + +## Stap 1: Laad het PDF‑document + +De eerste handeling is het lezen van de bron‑PDF. Aspose.PDF vertegenwoordigt een PDF‑bestand met de `Document`‑klasse. Het laden van het document geeft je toegang tot de pagina's, de formulier‑collectie en andere structuren. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Waarom dit belangrijk is:** +Het laden van het bestand creëert een in‑memory model van de PDF, waardoor je objecten kunt toevoegen, verwijderen of bewerken zonder het oorspronkelijke bestand te beschadigen. Het `Document`‑object biedt ook de `Form`‑eigenschap, waar je later **tekstvak aan pdf toevoegen**. + +## Stap 2: Maak een tekstvak‑veld + +Een tekstvak‑veld is een type formulierveld waarmee gebruikers vrije tekst kunnen invoeren. In Aspose.PDF maak je dit door `TextBoxField` te instantiëren, waarbij je de doelpagina en een rechthoek doorgeeft die de initiële grootte van de widget definieert. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Waarom dit belangrijk is:** +- `PartialName` is de sleutel die form‑verwerkingstools (bijv. Adobe Acrobat, server‑side parsers) gebruiken om de ingevoerde waarde op te halen. +- De rechthoek die je hier doorgeeft definieert alleen de *initiële* widget‑grootte; je kunt later de visuele locatie aanpassen met een widget‑annotatie (volgende stap). +- Het instellen van `DefaultAppearance` zorgt ervoor dat de tekst in het vak consistent wordt weergegeven in verschillende viewers. + +## Stap 3: Definieer de visuele widget‑annotatie + +Een formulierveld kan één of meer **widget‑annotaties** hebben die bepalen waar het veld op elke pagina verschijnt. Door een widget toe te voegen kun je hetzelfde logische veld op een andere locatie of zelfs op meerdere pagina's plaatsen. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Waarom dit belangrijk is:** +De widget‑rechthoek bepaalt de schermcoördinaten die gebruikers zien. Als je deze stap overslaat, kan het veld bestaan in de gegevensstructuur van de PDF, maar zal het niet zichtbaar zijn voor de eindgebruiker. Het toevoegen van een widget is de stap die daadwerkelijk **tekstvak aan pdf toevoegt**. + +## Stap 4: Voeg het geconfigureerde veld toe aan het formulier van het document + +Nu het `TextBoxField` volledig is geconfigureerd, moet je het registreren bij de formulier‑collectie van de PDF. Hierdoor wordt het veld onderdeel van het interactieve formulier en wordt het opgeslagen. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Waarom dit belangrijk is:** +Zonder het veld toe te voegen aan `pdfDocument.Form` zou de PDF‑viewer de widget‑annotatie negeren en zou de veld‑data nooit worden verzonden. Deze regel voltooit de **pdf aanpassen om tekstvak op te nemen** bewerking. + +## Stap 5: Sla de bijgewerkte PDF op + +Schrijf tenslotte de wijzigingen terug naar de schijf. Je kunt het oorspronkelijke bestand overschrijven of een nieuw bestand maken; het voorbeeld slaat op naar `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Wanneer je `output.pdf` opent in Adobe Acrobat Reader, zie je een rechthoekig tekstvak met het label “Comments” op pagina 2. Gebruikers kunnen erin klikken, typen, en de ingevoerde tekst maakt deel uit van de PDF‑formulierveld‑data. + +## Volledig werkend voorbeeld + +Door alle onderdelen samen te voegen, hier is een compleet, kant‑klaar programma. Kopieer het naar een nieuw console‑project, vervang `YOUR_DIRECTORY` door een echt mappad, en voer het uit. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Verwachte output:** +Het uitvoeren van het programma geeft twee bevestigingsregels weer in de console. Het openen van `output.pdf` toont een tekstvak op pagina 2 waar de gebruiker opmerkingen kan typen. Wanneer het formulier wordt verzonden (bijv. via de “Submit”‑knop van Adobe Acrobat), verschijnt de veldnaam `Comments` in de geëxporteerde FDF‑ of XFDF‑data. + +## Veelvoorkomende variaties en randgevallen + +| Situation | How to adapt the code | +|-----------|-----------------------| +| **Voeg het veld toe aan een andere pagina** | Change `pdfDocument.Pages[1]` to the desired page index (`0`‑based). | +| **Maak een meerregelig tekstvak** | Set `textBox.Multiline = true;` before adding the widget. | +| **Stel een standaardwaarde in** | Assign `textBox.Value = "Enter your comments here";`. | +| **Maak het veld verplicht** | Set `textBox.Required = true;`. | +| **Plaats het veld op meerdere pagina's** | Call `textBox.AddWidgetAnnotation` for each additional rectangle on the target pages. | +| **Gebruik een aangepast lettertype** | Load the font with `FontRepository.AddFont("path/to/font.ttf")` and reference it in `DefaultAppearance`. | + +**Pro tip:** Valideer altijd de coördinaten van de rechthoek ten opzichte van de paginagrootte (`pdfDocument.Pages[1].Rect`). Als de widget buiten de paginaranden ligt, kunnen viewers het veld bijsnijden of verbergen. + +## Het formulier‑veld testen + +1. Open `output.pdf` in Adobe Acrobat Reader. +2. Klik in het “Comments”‑vak; de cursor zou moeten verschijnen. +3. Typ willekeurige tekst en druk op **Tab** of klik ergens anders. +4. Kies **Bestand → Opslaan als** om de ingevoerde waarde te behouden. +5. (Optioneel) Gebruik Aspose.PDF’s `Form`‑API om de waarde programmatisch op te halen: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Dit fragment toont aan dat het veld niet alleen zichtbaar is, maar ook via code kan worden opgehaald — essentieel voor server‑side verwerking. + +## Conclusie + +Je weet nu hoe je een **pdf-formulierveld** in C# van begin tot eind kunt **maken**. De tutorial behandelde het laden van een PDF, het configureren van een `TextBoxField`, het toevoegen van een widget‑annotatie, het registreren van het veld en het opslaan van het resultaat. Met deze bouwblokken kun je **tekstvak aan pdf** documenten **toevoegen**, **pdf aanpassen om tekstvak op te nemen**, en de aanpak uitbreiden naar andere veldtypen zoals selectievakjes, keuzerondjes of vervolgkeuzelijsten. + +Vervolgens kun je gerelateerde onderwerpen verkennen zoals **formuliervelden extraheren**, **PDF‑formulieren flatten**, of **velden stylen met randen en kleuren**. Elk van deze concepten bouwt voort op dezelfde kern‑API die je net onder de knie hebt, zodat je volledig interactieve PDF‑bestanden kunt maken in C#. + +Veel plezier met coderen, en voel je vrij om te experimenteren met verschillende rechthoeken, lettertypen en validatieregels om aan de behoeften van je applicatie te voldoen! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids zijn gedemonstreerd. Elke bron bevat complete 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. + +- [PDF-document maken met Aspose – Pagina, tekstvak en formulier toevoegen](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Hoe een PDF maken met Aspose – Formulierveld en pagina's toevoegen](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Hoe een tekststempel toevoegen aan PDF met Aspose.PDF .NET: Uitgebreide gids](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/programming-with-operators/_index.md b/pdf/dutch/net/programming-with-operators/_index.md index a58af1c622..bb836a1ad6 100644 --- a/pdf/dutch/net/programming-with-operators/_index.md +++ b/pdf/dutch/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ De tutorials "Programmeren met operatoren" van Aspose.PDF voor .NET begeleiden u | [XForm op pagina tekenen](./draw-xform-on-page/) | Leer hoe u XForms in PDF kunt tekenen met Aspose.PDF voor .NET met deze uitgebreide stapsgewijze handleiding. | | [PDF-operatoren](./pdf-operators/) | Stapsgewijze handleiding voor het gebruik van PDF-operatoren met Aspose.PDF voor .NET. Voeg een afbeelding toe aan een PDF-pagina en geef de positie ervan op. | | [Grafische objecten uit een PDF-bestand verwijderen](./remove-graphics-objects/) Leer in deze stapsgewijze handleiding hoe u grafische objecten uit een PDF-bestand verwijdert met Aspose.PDF voor .NET. Vereenvoudig uw PDF-bewerkingstaken. | +| [Lege PDF-dictionary maken in C# met Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Leer hoe u een lege PDF-dictionary maakt met Aspose.Pdf in C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/dutch/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..79d264abdf --- /dev/null +++ b/pdf/dutch/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-14 +description: Maak een lege PDF-dictionary in C# met Aspose.Pdf – leer hoe je een grafische + toestand toevoegt aan de ExtGState-collectie en PDF's programmatically wijzigt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: nl +lastmod: 2026-08-14 +og_description: Maak een lege PDF-dictionary in C# met Aspose.Pdf. Volg deze volledige + gids om een aangepaste grafische toestand toe te voegen aan de ExtGState-collectie + van een PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Maak een leeg PDF‑woordenboek in C# – Aspose.Pdf stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Maak een leeg PDF‑woordenboek in C# met Aspose.Pdf +url: /nl/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Maak een lege PDF-dictionary in C# met Aspose.Pdf + +Als je **lege PDF-dictionary** objecten moet maken tijdens het werken met PDF‑bestanden, laat deze gids je precies zien hoe je dat doet in C# met de Aspose.Pdf‑bibliotheek. Of je nu een aangepaste graphics‑state bouwt, een nieuwe resource toevoegt, of een sjabloon voorbereidt voor later gebruik, de onderstaande stappen bieden een complete, uitvoerbare oplossing. + +Je leert hoe je een PDF laadt, de resource‑dictionary van de eerste pagina benadert, een gloednieuwe `CosPdfDictionary` bouwt en deze in de `ExtGState`‑collectie invoegt. Aan het einde van de tutorial heb je een werkende `output.pdf` die de nieuw aangemaakte dictionary bevat. + +## Vereisten + +- .NET 6.0 of later (de code werkt ook met .NET Framework 4.6+) +- Visual Studio 2022 of een andere C#‑IDE naar keuze +- Een Aspose.Pdf for .NET‑licentie (of een tijdelijke evaluatiesleutel) +- Een voorbeeld‑PDF met de naam **input.pdf** geplaatst in een map die je beheert (het mappad wordt gebruikt als `dataDir`) + +Er zijn geen extra NuGet‑pakketten nodig naast `Aspose.Pdf`. + +## Stap 1: Zet het project op en verwijs naar Aspose.Pdf + +1. Maak een nieuw **Console App**‑project aan in Visual Studio. +2. Open de **NuGet Package Manager** en installeer `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Voeg de volgende `using`‑directieven toe bovenaan `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Waarom deze namespaces?* `Aspose.Pdf` bevat de kern‑`Document`‑klasse, terwijl `Aspose.Pdf.Operators.Gfx` `CosPdfDictionary`, `CosPdfNumber` en gerelateerde low‑level PDF‑objecten levert die nodig zijn om **lege PDF-dictionary** structuren te **maken**. + +## Stap 2: Laad de bron‑PDF + +De eerste handeling is het laden van het bestaande PDF‑bestand in een `Document`‑instantie. Dit geeft je toegang tot alle pagina's, resources en low‑level dictionaries. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Uitleg*: `Document` leest het bestand in het geheugen en bereidt interne structuren voor. De `using`‑statement zorgt ervoor dat de bestands‑handle wordt vrijgegeven nadat we klaar zijn met verwerken. + +## Stap 3: Benader de resource‑dictionary van de eerste pagina + +Elke PDF‑pagina heeft een **Resources**‑dictionary die lettertypen, afbeeldingen, ExtGState‑objecten en andere gedeelde resources groepeert. Om een nieuwe graphics‑state in te voegen moeten we deze dictionary bewerken. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` is een hulpprogrammaklasse die je een PDF‑dictionary laat behandelen als een C# `Dictionary`. + +## Stap 4: Haal (of maak) de ExtGState‑collectie op + +`ExtGState` bevat graphics‑state objecten zoals opacity, blend‑mode en lijnbreedte. Als de bron‑PDF al een `ExtGState`‑item bevat, gebruiken we die opnieuw; anders maken we een nieuwe lege dictionary. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Waarom deze controle?* Sommige PDF‑bestanden laten het `ExtGState`‑item volledig weg. Door beide gevallen af te handelen blijft de tutorial robuust voor elk invoerbestand. + +## Stap 5: **Maak een lege PDF-dictionary** voor een nieuwe graphics‑state + +Nu maken we daadwerkelijk **lege PDF-dictionary** objecten die de graphics‑state parameters definiëren. De dictionary begint leeg, en we voegen de vereiste sleutels toe: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Wat elke entry doet + +| Sleutel | Type | Betekenis | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Streep‑opacity (bereik 0‑1). | +| **ca** | `CosPdfNumber` | Vullings‑opacity (bereik 0‑1). | +| **BM** | `CosPdfName` | Blend‑mode; `"Normal"` is de meest voorkomende. | + +Omdat we begonnen met een **lege PDF-dictionary**, hebben we volledige controle over welke entries worden toegevoegd. Je kunt deze dictionary uitbreiden met extra graphics‑state parameters zoals `LW` (lijnbreedte) of `LC` (lijncap) wanneer nodig. + +## Stap 6: Voeg de nieuwe graphics‑state toe aan ExtGState + +De `ExtGState`‑dictionary werkt als een map waarbij elke entry wordt geïdentificeerd door een naam (bijv. `GS0`, `GS1`). We voegen onze zojuist gebouwde dictionary toe onder een unieke sleutel. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Als je van plan bent meerdere states toe te voegen, verhoog dan het achtervoegsel (`GS1`, `GS2`, …) om naamconflicten te voorkomen. + +## Stap 7: Sla de gewijzigde PDF op + +Tot slot schrijf je de wijzigingen terug naar schijf. De `Save`‑methode serialiseert automatisch de bijgewerkte dictionaries. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Open `output.pdf` in een PDF‑viewer en inspecteer de **Resources → ExtGState**‑entry (de meeste viewers verbergen dit, maar tools zoals Adobe Acrobat Preflight of PDF‑Tron kunnen het tonen). Je zou een `GS0`‑entry moeten zien die de door jou gedefinieerde opacity‑ en blend‑mode‑waarden bevat. + +## Volledig werkend voorbeeld + +Door alle onderdelen samen te voegen, hier is het volledige programma dat je kunt kopiëren‑plakken in `Program.cs` en uitvoeren: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Verwachte output** – De console geeft een bevestigingsregel weer, en `output.pdf` bevat de nieuwe `GS0`‑entry onder `ExtGState`. Wanneer je een pagina rendert die `GS0` aanroept (bijv. via een content‑stream operator `gs`), zullen strepen volledig ondoorzichtig zijn terwijl vullingen 50 % transparant zijn. + +## Veelgestelde vragen en edge‑case handling + +| Vraag | Antwoord | +|----------|--------| +| *Wat als de PDF meerdere pagina's heeft?* | Het voorbeeld richt zich op de eerste pagina (`Pages[1]`). Om alle pagina's te beïnvloeden, loop je door `pdfDocument.Pages` en herhaal je stappen 3‑5 voor de resources van elke pagina. | +| *Kan ik de dictionary toevoegen aan een pagina die al een ExtGState‑entry met de naam “GS0” heeft?* | Ja, maar je moet een andere sleutel gebruiken (`GS1`, `GS2`, …) om het bestaande item niet te overschrijven. | +| *Is het veilig om de dictionary te wijzigen na het opslaan?* | Zodra je `Save` aanroept, is de in‑memory representatie losgekoppeld van het bestand. Je kunt het `Document`‑object blijven bewerken en opnieuw `Save` aanroepen indien nodig. | +| *Heb ik een licentie voor Aspose.Pdf nodig om ` | + +## Wat kun 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 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 je gestippelde lijnen maakt in PDF's met Aspose.PDF voor .NET: Een stapsgewijze gids](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Hoe je graphics verwijdert uit PDF's met Aspose.PDF .NET: Een complete gids](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Hoe je multi‑layer PDF's maakt met Aspose.PDF voor .NET: Een uitgebreide gids](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/programming-with-security-and-signatures/_index.md b/pdf/dutch/net/programming-with-security-and-signatures/_index.md index 408ef8d5aa..dd2db2a12c 100644 --- a/pdf/dutch/net/programming-with-security-and-signatures/_index.md +++ b/pdf/dutch/net/programming-with-security-and-signatures/_index.md @@ -37,6 +37,7 @@ De tutorial geeft u een gedetailleerd overzicht van methoden en technieken om de | [Ondertekenen met smartcard met behulp van handtekeningveld](./sign-with-smart-card-using-signature-field/) | Leer hoe u PDF's veilig kunt ondertekenen met een smartcard met Aspose.PDF voor .NET. Volg onze stapsgewijze handleiding voor eenvoudige implementatie. | | [PDF-bestanden repareren – Complete C#-gids met Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Leer hoe u beschadigde PDF-bestanden kunt repareren met Aspose.PDF voor .NET in C#. Volg onze stapsgewijze handleiding. | | [PDF-handtekening verifiëren in C# – Complete programmeergids](./verify-pdf-signature-in-c-complete-programming-guide/) | Leer hoe u PDF-handtekeningen kunt verifiëren met Aspose.PDF voor .NET in C# met deze volledige programmeergids. | +| [Handtekeningopties maken in C# – volledige gids voor digitale ondertekening](./create-signature-options-in-c-full-guide-to-digital-signing/) | Leer hoe u handtekeningopties configureert en digitale ondertekeningen implementeert in C# met Aspose.PDF. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/dutch/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..f7ab29c6d3 --- /dev/null +++ b/pdf/dutch/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Maak handtekeningopties in C# om een digitale handtekening toe te passen. + Leer hoe je de handtekening configureert, een aangepaste hash‑functie implementeert + en documenten programmeermatig ondertekent. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: nl +lastmod: 2026-08-14 +og_description: Maak handtekeningopties in C# en pas een digitale handtekening toe. + Deze tutorial leidt je door het configureren van de handtekening, het toevoegen + van een aangepaste hash‑functie en het ondertekenen van een document. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Maak handtekeningopties in C# – stapsgewijze gids voor digitale ondertekening +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Maak handtekeningopties in C# – volledige gids voor digitale ondertekening +url: /nl/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Maak handtekeningopties in C# – volledige gids voor digitale ondertekening + +Maak handtekeningopties in C# om een digitale‑handtekening‑workflow te configureren. Deze tutorial laat zien hoe je een digitale handtekening toepast, een aangepaste hash‑functie implementeert en een document ondertekent met de `SignatureOptions`‑klasse. Als je ooit een PDF, XML of een willekeurige binaire payload vanuit een .NET‑applicatie moest ondertekenen, bieden de onderstaande stappen een kant‑en‑klaar werkende oplossing. + +Je leert hoe je: + +* `SignatureOptions` configureert met een aangepaste hash‑algoritme, +* de ondertekeningsmethode correct aanroept, +* verifieert dat de handtekening is toegepast, +* veelvoorkomende valkuilen bij het configureren van de handtekening vermijdt. + +De enige vereisten zijn een recente .NET SDK (≥ .NET 6) en een ondertekeningsbibliotheek die `SignatureOptions` beschikbaar stelt (bijvoorbeeld **GroupDocs.Signature**, **Aspose.Signature**, of een vergelijkbare API). Er zijn geen externe tools nodig. + +--- + +## Vereisten + +| Vereiste | Waarom het belangrijk is | +|----------|--------------------------| +| .NET 6 SDK of later | Biedt de moderne taalfeatures die in de voorbeelden worden gebruikt. | +| Een ondertekenings‑bibliotheek NuGet‑pakket (bijv. `GroupDocs.Signature`) | Levert het type `SignatureOptions` en de `Sign` extensiemethode. | +| Toegang tot een privésleutel of certificaat | Vereist om een verifieerbare digitale handtekening te genereren. | + +Installeer de bibliotheek met de standaard CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Stap 1: Maak handtekeningopties + +De eerste stap is het instantieren van `SignatureOptions` en het instellen van de eigenschappen die het ondertekeningsproces regelen. Dit object vertelt de bibliotheek *wat* er moet worden ondertekend en *hoe*. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Waarom dit belangrijk is:** `SignatureOptions` fungeert als een contract tussen jouw code en de ondertekeningsengine. Door het vooraf te configureren vermijd je herhaaldelijke boilerplate bij het ondertekenen van meerdere documenten. + +--- + +## Stap 2: Implementeer een aangepaste hash‑functie + +Een *aangepaste hash‑functie* geeft je volledige controle over de digest die het handtekeningalgoritme ondertekent. Dit is nuttig wanneer de standaard hash (SHA‑256) niet voldoet aan compliance‑eisen of wanneer je slechts een deel van het document moet hashen. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Waarom dit belangrijk is:** Door `CustomSignHash` toe te wijzen, vervang je de interne hash‑stap van de bibliotheek door `MyHash`. De ondertekeningsengine ondertekent nu de bytes die jouw functie retourneert, waardoor je voldoet aan elke aangepaste beleidsregel. + +--- + +## Stap 3: Laad het document en pas digitale handtekening toe + +Met de opties klaar kun je nu het doelbestand openen en de ondertekeningsmethode aanroepen. De methode `Sign` wordt door de bibliotheek geleverd en maakt gebruik van de geconfigureerde `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Waarom dit belangrijk is:** De aanroep van `Sign` voert intern drie acties uit: + +1. **Hash‑berekening** – nu gedelegeerd aan jouw aangepaste hash‑functie. +2. **Handtekeninggeneratie** – met de privésleutel die aan de configuratie van de bibliotheek is geleverd. +3. **Invoeging** – de gegenereerde handtekening wordt aan het uitvoerbestand toegevoegd. + +Als een stap faalt, retourneert de methode `false`, zodat je de fout op een nette manier kunt afhandelen. + +--- + +## Stap 4: Verifieer dat het document is ondertekend + +Een snelle verificatie bevestigt dat de handtekening correct is toegepast. De meeste bibliotheken bieden een `Verify`‑methode die de integriteit van het ondertekende bestand controleert. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Waarom dit belangrijk is:** Verificatie zorgt ervoor dat het ondertekende document niet is gemanipuleerd na ondertekening en dat de aangepaste hash een compatibele digest heeft opgeleverd. + +--- + +## Hoe handtekening configureren voor verschillende bestandstypen + +Hetzelfde `SignatureOptions`‑object kan opnieuw worden gebruikt voor PDF’s, Word‑documenten, afbeeldingen of ruwe binaire bestanden. Het enige wat je hoeft te wijzigen is de specifieke opties‑klasse (bijv. `PdfSignatureOptions`, `WordSignatureOptions`). Hieronder een kort voorbeeld voor een JPEG‑afbeelding: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Waarom dit belangrijk is:** Begrijpen hoe je *handtekening configureert* per formaat stelt je in staat om dezelfde codebasis over meerdere documenttypen uit te breiden zonder de hash‑logica opnieuw te schrijven. + +--- + +## Veelvoorkomende valkuilen en best practices + +| Valkuil | Aanbevolen oplossing | +|---------|----------------------| +| Vergeten `CustomSignHash` in te stellen na het maken van `SignatureOptions` | Wijs de delegate direct toe na het construeren van het opties‑object. | +| Een hash‑algoritme gebruiken dat het ondertekeningscertificaat niet ondersteunt | Controleer of het sleutelgebruik van het certificaat overeenkomt met de hash‑lengte (bijv. RSA‑2048 met SHA‑512). | +| Het niet vrijgeven van `Signature`‑objecten | Plaats de `Signature`‑instantie in een `using`‑blok om bestands‑handles vrij te geven. | +| Het ondertekende bestand overschrijven op de originele bron | Schrijf altijd naar een nieuw bestandspad (`outputPath`) om het originele document te behouden. | + +--- + +## Volledig werkend voorbeeld + +Hieronder vind je een zelfstandig programma dat alle onderdelen samenbrengt. Kopieer het naar een nieuw console‑project en voer het uit; de console geeft succes of falen weer. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Verwachte uitvoer** + +``` +Signature verified successfully. +``` + +Als de console “Signing failed.” of “Signature verification failed.” afdrukt, controleer dan de certificaatconfiguratie en zorg ervoor dat de aangepaste hash een byte‑array van de verwachte grootte retourneert. + +--- + +## Conclusie + +Je weet nu hoe je **handtekeningopties maakt** in C#, een **aangepaste hash‑functie** toevoegt, en een **digitale handtekening toepast** op elk ondersteund document. De tutorial besloeg de volledige levenscyclus: configureren van de opties, ondertekenen van het bestand en verifiëren van het resultaat. Door dezelfde `SignatureOptions`‑instantie te hergebruiken kun je ook **handtekening configureren** voor afbeeldingen, Word‑bestanden of ruwe binaire data. + +--- + +## Wat kun je hierna doen? + +* Verken extra `SignatureOptions`‑eigenschappen zoals visuele stempels, timestamp‑servers en certificaat‑ketens – deze sluiten aan bij het **apply digital signature**‑keyword. +* Experimenteer met andere hash‑algoritmen (bijv. Blake2b) door de implementatie binnen `MyHash` te vervangen. +* Integreer de ondertekeningsstroom in een web‑API om on‑the‑fly documentondertekening mogelijk te maken – een natuurlijke uitbreiding van **how to sign document** in een service‑georiënteerde architectuur. + +Voel je vrij om de code aan te passen aan je eigen beveiligingsbeleid, en deel je ervaringen in de reacties. Veel succes met ondertekenen! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken uit deze gids. Elke bron bevat complete werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementaties in je eigen projecten te verkennen. + +- [Hoe PDF-handtekeningtaal wijzigen met Aspose.PDF voor .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/programming-with-stamps-and-watermarks/_index.md b/pdf/dutch/net/programming-with-stamps-and-watermarks/_index.md index 57acd83866..ea3c0388c2 100644 --- a/pdf/dutch/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/dutch/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ De tutorials "Programmeren met stempels en watermerken" van Aspose.PDF voor .NET | [Tekst in voettekst van PDF-bestand](./text-in-footer/) | Leer hoe u tekst toevoegt in de voettekst van een PDF-bestand met Aspose.PDF voor .NET. | | [Tekst in koptekst van PDF-bestand](./text-in-header/) | Leer hoe u tekstkoppen aan PDF's toevoegt met Aspose.PDF voor .NET met deze stapsgewijze tutorial. Verbeter uw documenten efficiënt en effectief. | | [Bates-nummering toevoegen aan PDF in C# – Complete gids](./add-bates-numbering-pdf-in-c-complete-guide/) | Leer hoe u Bates-nummering aan PDF-documenten toevoegt met Aspose.PDF voor .NET in C# met deze stapsgewijze handleiding. | +| [Hoe batesnummering opties instellen in C# – volledige gids](./how-to-set-bates-numbering-options-in-c-complete-guide/) | | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/dutch/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..be8ec4e084 --- /dev/null +++ b/pdf/dutch/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,256 @@ +--- +category: general +date: 2026-08-14 +description: Hoe bates‑nummeringsopties in C# instellen met GroupDocs. Volg deze stapsgewijze + tutorial om aangepaste voorvoegsels en startnummers toe te voegen bij het converteren + van Word naar PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: nl +lastmod: 2026-08-14 +og_description: Hoe je snel batesnummeringsopties instelt in C#. Deze gids laat zien + hoe je aangepaste voorvoegsels en startnummers toevoegt bij het converteren van + Word naar PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Hoe bates‑nummeringsopties in C# in te stellen – stapsgewijze handleiding +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Hoe batesnummeringsopties in C# in te stellen – volledige gids +url: /nl/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe bates numbering options in C# in te stellen – volledige gids + +Als je **how to set bates numbering options** in C# nodig hebt, leidt deze gids je stap voor stap door het proces. Je leert hoe je het startnummer configureert, een prefix toevoegt en de nummering toepast tijdens het converteren van een Word‑document naar PDF met de GroupDocs API. + +Documentverwerking vereist vaak unieke identificatoren op elke pagina voor juridische of archiveringsdoeleinden. Aan het einde van deze tutorial heb je een herbruikbaar fragment dat je in elk .NET‑project kunt plaatsen, of je nu een tool voor juridische ondersteuning bouwt of een geautomatiseerde rapportgenerator. Er zijn geen externe tools nodig – alleen de GroupDocs.Conversion‑bibliotheek en een paar regels C#. + +## Wat je nodig hebt + +Voordat je begint, zorg dat je het volgende hebt: + +* .NET 6.0 SDK of later geïnstalleerd +* Visual Studio 2022 (of een IDE die .NET ondersteunt) +* Een geldige GroupDocs.Conversion‑licentie (de gratis proefversie werkt voor testen) +* Een voorbeeld‑Word‑document (`input.docx`) dat je wilt nummeren + +Deze voorwaarden zorgen ervoor dat de code zonder extra configuratie draait. + +## Hoe bates numbering options in te stellen – overzicht + +De kern van **how to set bates numbering options** bestaat uit drie objecten: + +1. `Document` – laadt het bronbestand. +2. `BatesNumberingOptions` – bevat het startnummer, de prefix en andere opmaakdetails. +3. `AddBatesNumbering` – de methode die de nummering in elke pagina injecteert. + +Begrijpen waarom elk onderdeel bestaat, helpt je de oplossing aan te passen aan complexere scenario's, zoals aangepaste lettertypen of meertalige nummering. + +## Stap 1: Installeer het GroupDocs.Conversion NuGet‑pakket + +Open een terminal in je solution‑map en voer uit: + +```bash +dotnet add package GroupDocs.Conversion +``` + +De **GroupDocs API** levert de `Document`‑klasse en de `AddBatesNumbering`‑extensiemethode die later in de tutorial worden gebruikt. + +## Stap 2: Laad het bron‑document + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Waarom deze stap?* +Het laden van het bestand creëert een in‑memory‑representatie die de conversie‑engine kan manipuleren. Zonder een `Document`‑instantie kun je geen Bates‑nummering of andere transformaties toepassen. + +## Stap 3: Maak de Bates‑nummeringsopties aan + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Waarom deze stap?* +`BatesNumberingOptions` omvat alle instellingen die je nodig kunt hebben bij **setting bates numbering options**. Het aanpassen van `StartNumber` en `Prefix` laat je de output afstemmen op je case‑managementsysteem. De eigenschap `Position` bepaalt de visuele plaatsing, wat vaak een compliance‑vereiste is. + +## Stap 4: Pas Bates‑nummering toe op het document + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +De `AddBatesNumbering`‑methode doorloopt elke pagina van het geladen `Document` en voegt de geconfigureerde string in. Omdat de methode werkt op de in‑memory‑representatie, kun je extra verwerkingsstappen (bijv. watermerken) ketenen voordat je opslaat. + +## Stap 5: Converteer en sla het resultaat op als PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Waarom deze stap?* +Opslaan als PDF is een veelgebruikt eindformaat voor juridische documenten. Het `PdfConvertOptions`‑object laat je de output fijn afstemmen, maar is niet vereist voor basisnummering. De `Save`‑aanroep schrijft de volledig genummerde PDF naar schijf. + +## Volledig, uitvoerbaar voorbeeld + +Alles samengevoegd, hier is een zelfstandige console‑applicatie die je kunt compileren en uitvoeren: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Verwachte output** + +Het uitvoeren van het programma maakt `output.pdf` aan waarin elke pagina een label toont zoals `CASE-1000`, `CASE-1001`, enz., geplaatst in de rechter voettekst. Open de PDF in een viewer om te verifiëren dat de nummers verschijnen zoals bedoeld. + +## Veelvoorkomende valkuilen en best practices + +| Probleem | Waarom het gebeurt | Hoe te voorkomen | +|----------|-------------------|-------------------| +| **Relatieve paden veroorzaken `FileNotFoundException`** | De werkmap van een console‑app kan verschillen van die van Visual Studio. | Gebruik absolute paden of `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Nummering overlapt bestaande voetteksten** | Als het bron‑document al inhoud heeft in het gekozen voettekstgebied, kan het nieuwe nummer verborgen worden. | Kies een andere `Position` (bijv. `HeaderLeft`) of pas de bron‑template aan. | +| **Grote documenten zijn traag** | Bates‑nummering iterereert over elke pagina; het geheugenverbruik groeit met de bestandsgrootte. | Verwerk het document in delen met `Document.Split` als je meer dan 500 pagina’s overschrijdt. | +| **Licentie‑verloop** | De gratis proefversie van GroupDocs verloopt na 30 dagen, wat een uitzondering veroorzaakt bij `AddBatesNumbering`. | Pas een geldige licentiesleutel toe vóór het laden van het document: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro‑tip:** Als je per zaak een ander nummerformaat nodig hebt (bijv. `2023-CASE-001`), bouw dan de prefix dynamisch op voordat je `BatesNumberingOptions` maakt. + +## De oplossing uitbreiden + +Dezelfde **Bates numbering C#**‑aanpak werkt met andere bronformaten zoals `.txt`, `.html` of zelfs afbeeldingen. Verander simpelweg de bestandsextensie bij het construeren van het `Document`‑object, en de conversie‑engine regelt de rest. + +Je kunt ook **document conversion C#** combineren met OCR voor gescande PDF’s: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusie + +Je weet nu **how to set bates numbering options** in C# van begin tot eind. Door een `BatesNumberingOptions`‑object te maken, toe te passen met `AddBatesNumbering` en het resultaat op te slaan als PDF, kun je de productie van juridisch conforme, uniek geïdentificeerde documenten automatiseren. + +Vanaf hier kun je gerelateerde onderwerpen verkennen zoals **C# PDF generation**, **document conversion C#**, of geavanceerde **GroupDocs API**‑functies zoals watermerken en digitale handtekeningen. Experimenteer met verschillende prefixes, posities en nummerformaten om ze in jouw workflow te passen. + +Happy coding! + + +## 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 complete werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑features onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/annotations/_index.md b/pdf/english/net/annotations/_index.md index ce222d67d0..1cea4d49d8 100644 --- a/pdf/english/net/annotations/_index.md +++ b/pdf/english/net/annotations/_index.md @@ -24,6 +24,7 @@ A comprehensive collection of tutorials showcasing how to work with annotations | [Add Swf File As PDF Annotation](./addswffileasannotation/) | Learn how to add SWF files as PDF annotations using Aspose.PDF for .NET. Enhance your PDFs with interactive multimedia content through this detailed, tutorial. | | [Delete All Annotations From Page](./deleteallannotationsfrompage/) | Learn how to delete all annotations from a PDF page using Aspose.PDF for .NET. Follow our step-by-step guide to clean up your PDFs efficiently. | | [Delete Particular Annotation In PDF File](./deleteparticularannotation/) | Learn how to delete a particular annotation in a PDF file using Aspose.PDF for .NET with this step-by-step guide. | +| [draw rectangle on pdf – step‑by‑step C# guide](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Step‑by‑step guide to draw rectangles on PDF files using Aspose.PDF for .NET in C#. | | [Extract Highlighted Text In PDF File](./extracthighlightedtext/) | Learn how to efficiently extract highlighted text from a PDF file using Aspose.PDF for .NET with this tutorial. Perfect for data analysis and content review. | | [Get All Annotations From Page](./getallannotationsfrompage/) | Learn how to extract annotations from PDF files using Aspose.PDF for .NET in this step-by-step guide. Perfect for developers of all levels. | | [Get Particular Annotation In PDF File](./getparticularannotation/) | Learn how to extract a specific annotation from a PDF file using Aspose.PDF for .NET in this detailed, 2000-word tutorial. Perfect for developers. | @@ -42,4 +43,4 @@ A comprehensive collection of tutorials showcasing how to work with annotations {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..6d787908f7 --- /dev/null +++ b/pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-08-14 +description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: en +lastmod: 2026-08-14 +og_description: draw rectangle on pdf with C# in seconds. This guide shows how to + define rectangle dimensions, add a shape, and verify page boundaries for reliable + PDF graphics. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: draw rectangle on pdf – complete C# tutorial +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: draw rectangle on pdf – step‑by‑step C# guide +url: /net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# draw rectangle on pdf – complete C# tutorial + +If you need to **draw rectangle on pdf** using C#, this guide shows you a concise, production‑ready solution. You’ll see exactly **how to define rectangle dimensions**, verify that the shape fits, and add it to a page with a single method call. + +The tutorial covers everything from creating a PDF document to rendering the rectangle, so you can copy‑paste the code into your own project and see results instantly. No external documentation is required—just the steps below. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 or later (the code also works with .NET Framework 4.7+) +* The **Aspose.PDF for .NET** NuGet package (`Install-Package Aspose.PDF`) +* A basic understanding of C# syntax +* An IDE such as Visual Studio or VS Code + +> **Pro tip:** Use the free evaluation license of Aspose.PDF for quick experiments; it adds a small watermark but lets you test all features. + +## How to draw rectangle on PDF with C# + +The core of the task is creating a `RectangleShape`, setting its size and stroke, and attaching it to a `Page`. The following H2 header contains the primary keyword, satisfying SEO requirements. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Explanation of each step + +| Step | Why it matters | +|------|----------------| +| **1️⃣ Create a new PDF document** | Initializes the container that will hold pages and graphics. | +| **2️⃣ Add a blank page** | You need a `Page` object because shapes are attached to a page, not directly to the document. | +| **3️⃣ Define the rectangle bounds** | This is where you **how to define rectangle dimensions**. The `Rectangle` constructor takes `x`, `y`, `width`, and `height` in points (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape` is the Aspose class that renders a rectangle. Setting `StrokeColor` defines the outline; you could also set `FillColor` for a solid fill. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` throws an exception if the rectangle exceeds the page size, preventing malformed PDFs. | +| **6️⃣ Add the shape to the page** | The shape becomes part of the page’s content stream. | +| **7️⃣ Save the PDF** | Persists the document to a file you can open with any PDF viewer. | + +The resulting `RectangleDemo.pdf` contains a black rectangle positioned at the top‑left corner of the page, exactly 500 pt wide and 700 pt tall. + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*Image alt text: draw rectangle on pdf example showing a black rectangle in the upper left corner of a PDF page.* + +## How to define rectangle dimensions for different page sizes + +The snippet above uses fixed values (`500 x 700`). In real applications you often need the rectangle to adapt to the page’s width and height. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Key points:** + +* Use `page.PageInfo.Width` and `Height` to read the actual page size. +* Multiplying by a factor (e.g., `0.8f`) lets you express dimensions as a percentage of the page. +* Centering is achieved by subtracting the rectangle size from the page size and halving the remainder. + +## Common pitfalls and how to avoid them + +| Pitfall | Why it happens | Fix | +|---------|----------------|-----| +| Rectangle extends beyond the page | Hard‑coded dimensions larger than the page size. | Call `page.CheckShapeBoundary` **before** adding the shape; adjust dimensions if an exception is thrown. | +| Stroke not visible | `StrokeColor` left at default (`Color.Empty`). | Explicitly set `StrokeColor` (e.g., `Color.Black`). | +| Rectangle appears off‑screen | Coordinates start at the bottom‑left in PDF space; using screen‑style top‑left coordinates causes a flip. | Remember that the origin `(0,0)` is the lower‑left corner. Adjust `y` accordingly or use `pageHeight - desiredY`. | +| Unexpected line thickness | The default line width may be too thin for printing. | Set `rectangleShape.LineWidth = 2;` to increase thickness. | + +## Extending the example + +Once you can **draw rectangle on pdf**, you can easily add other shapes: + +* **EllipseShape** – for circles or ovals. +* **PolygonShape** – for custom polygons. +* **TextFragment** – to label your rectangles. + +All shapes share the same workflow: define bounds, configure appearance, verify boundaries, then add to the page. + +## Complete, runnable program + +Below is the full program that combines the basic rectangle and the dynamic sizing example. Copy it into a new console project, restore the `Aspose.PDF` NuGet package, and run. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Expected output:** +Open `CombinedRectangles.pdf`. You’ll see a black rectangle anchored at the lower‑left corner and a centered dark‑blue rectangle with a light‑yellow fill. Both rectangles respect the page margins. + +## Conclusion + +You now know how to **draw rectangle on pdf** with C# and precisely **how to define rectangle dimensions** for both fixed and responsive layouts. The approach uses Aspose.PDF’s `RectangleShape`, boundary checking, and simple arithmetic to adapt to any page size. + +Next, you might explore: + +* Adding **fill colors** and **line styles** (dashed, dotted) – secondary keyword: how to define rectangle dimensions with style. +* Combining multiple shapes into a single `Page` to create charts or forms. +* Exporting the PDF to a stream for web APIs instead of saving to disk. + +Experiment with different sizes, colors, and positions to master PDF graphics in your .NET applications. 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. + +- [How to Customize PDFs with Aspose.PDF for .NET: Set Page Margins and Draw Lines](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [How to Add Page Number Stamps in PDFs Using Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/og-image.png b/pdf/english/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb8d8d16dd9fcf109348eb1b5c6b5c1405d6f58 GIT binary patch literal 45537 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + +If you need to **save PDF as HTML**, Aspose.Pdf makes the process straightforward. This tutorial also shows how to **convert PDF to PDF/X‑4**, list signature fields, and add a custom ExtGState, giving you a full end‑to‑end workflow. + +You’ll learn how to: + +* Export a PDF to clean HTML while skipping raster images. +* Convert a PDF document to the PDF/X‑4 standard for print‑ready output. +* Enumerate all signature fields in a PDF. +* Insert a custom graphics state (ExtGState) on the first page. + +All code runs on .NET 6 or later and requires the Aspose.Pdf for .NET NuGet package. + +## Prerequisites + +| Requirement | Reason | +|-------------|--------| +| .NET 6 SDK or newer | Provides the runtime for the C# sample. | +| Visual Studio 2022 (or any C# IDE) | Enables easy editing and debugging. | +| Aspose.Pdf for .NET (v23.12 or later) | Supplies the `Document`, `PdfFormatConversionOptions`, and `HtmlSaveOptions` classes used in the tutorial. | +| A sample PDF file (`sample.pdf`) | The source document that will be processed. | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +The program performs six logical steps: + +1. Load the source PDF. +2. List every signature field name. +3. **Convert PDF to PDF/X‑4** and save the result. +4. **Save PDF as HTML** while skipping raster images. +5. Add a custom ExtGState (graphics state) to the first page. +6. Save the modified PDF with the new graphics state. + +Each step is explained below, with complete code and the reasoning behind the choices. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` represents the entire PDF file. Loading it once lets you reuse the same object for all subsequent operations, which reduces I/O overhead. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: Knowing the signature field names is essential when you need to validate, remove, or replace digital signatures later. The `Signatures` collection provides a fast, read‑only view of the fields. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` tells Aspose.Pdf to embed all required resources (fonts, color profiles) and to enforce the PDF/X‑4 constraints. +* The conversion runs in memory; only the final file is written to disk, keeping the operation fast. + +> **Pro tip:** Verify the output with a PDF/X‑4 validator (e.g., Adobe Preflight) if your downstream workflow is strict about compliance. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Why you might want this**: HTML output is useful for web preview or content indexing. Skipping raster images (`SkipRasterImages = true`) keeps the HTML lightweight and improves load times, especially when the original PDF contains high‑resolution scans. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: An **ExtGState** object controls transparency, blend mode, and other graphics parameters. By adding `GS0`, you can later reference this state in content streams (e.g., for semi‑transparent overlays). The code uses the low‑level COS API because Aspose.Pdf does not expose a high‑level wrapper for ExtGState creation. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +The final file (`sample_with_extgstate.pdf`) contains: + +* All original pages and content. +* A compliant PDF/X‑4 version (`sample_pdfx4.pdf`). +* An HTML representation without raster images (`sample.html`). +* A custom ExtGState (`GS0`) attached to the first page’s resources. + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +If the source PDF has no signatures, the loop prints nothing but still proceeds without error. + +## Common variations and edge cases + +| Situation | Adjustment | +|-----------|------------| +| **PDF contains no pages** | Check `doc.Pages.Count` before accessing `doc.Pages[1]` to avoid `IndexOutOfRangeException`. | +| **You need PDF/A‑2b instead of PDF/X‑4** | Change `PdfStandard.PdfX4` to `PdfStandard.PdfA2b` in `PdfFormatConversionOptions`. | +| **You want to keep raster images** | Set `SkipRasterImages = false` (or omit the property) in `HtmlSaveOptions`. | +| **Multiple ExtGState objects** | Use unique keys (`GS1`, `GS2`, …) when adding to `extGStateDict`. | +| **Large PDFs (hundreds of MB)** | Enable `doc.OptimizeResources = true` before saving to reduce memory usage. | + +## Full source code (runnable) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Step 1: Load the PDF document + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Step 2: List all signature field names + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Step 3: Convert the PDF to PDF/X‑4 standard + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Step 4: Save the PDF as HTML while skipping raster images + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Step 5: Add a custom ExtGState (graphics state) to the first page + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## 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. + +- [Comprehensive Guide: Convert PDF to HTML Using Aspose.PDF .NET with Custom Strategies](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Convert PDF to HTML with Custom Image URLs Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF to HTML Conversion Using Aspose.PDF .NET: Save Images as External PNGs](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/og-image.png b/pdf/english/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..b9878da1d621c34537fe46d953f39f94b6037a9c GIT binary patch literal 49904 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

Pcl)rrTRNMxmUpeXVvcQG{O;ZW!%v_de%I&R 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

fGsD<3wb34le>h2 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 VwsVSS0bX-LO-1WTiSp~f{{gXtq)7k( literal 0 HcmV?d00001 diff --git a/pdf/english/net/programming-with-forms/_index.md b/pdf/english/net/programming-with-forms/_index.md index 19d17837f7..84ffc0a55f 100644 --- a/pdf/english/net/programming-with-forms/_index.md +++ b/pdf/english/net/programming-with-forms/_index.md @@ -25,6 +25,7 @@ These tutorials also provide detailed code examples, clear explanations, and ill | [Arabic Text Filling](./arabic-text-filling/) | Learn how to fill Arabic text in PDF forms using Aspose.PDF for .NET with this step-by-step tutorial. Enhance your PDF manipulation skills. | | [Combo Box](./combo-box/) | Learn how to add a Combo Box to a PDF using Aspose.PDF for .NET. Follow our step-by-step guide to create interactive PDF forms easily. | | [Create Document](./create-doc/) | Learn to create interactive PDF documents with radio buttons using Aspose.PDF for .NET in this comprehensive step-by-step guide. | +| [Create pdf form field in C# – step‑by‑step guide](./create-pdf-form-field-in-c-step-by-step-guide/) | Learn how to create PDF form fields in C# using Aspose.PDF for .NET with this step-by-step guide. | | [Delete Form Field In PDF Document](./delete-form-field/) | Learn how to delete form fields in PDF documents using Aspose.PDF for .NET with this step-by-step guide. Perfect for developers and PDF enthusiasts. | | [Determine Required Field In PDF Form](./determine-required-field/) | Learn how to determine required fields in a PDF form using Aspose.PDF for .NET. Our step-by-step guide simplifies form management and enhances your PDF automation workflow. | | [Dynamic XFA To Acro Form](./dynamic-xfa-to-acro-form/) | Learn how to convert dynamic XFA forms to standard AcroForms using Aspose.PDF for .NET in this step-by-step tutorial. | diff --git a/pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..112a867059 --- /dev/null +++ b/pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Create pdf form field quickly with C#. Learn how to add text box to pdf + and modify pdf to include text box using Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: en +lastmod: 2026-08-14 +og_description: Create pdf form field with C#. This tutorial shows how to add a text + box to a PDF and modify a PDF to include a text box using Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Create pdf form field in C# – complete programming guide +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Create pdf form field in C# – step‑by‑step guide +url: /net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create pdf form field in C# – step‑by‑step guide + +If you need to **create pdf form field** in a document, this guide walks you through the entire process. You’ll see exactly how to **add text box to pdf** pages, and how to **modify pdf to include text box** using the Aspose.PDF library for .NET. + +Working with PDF forms is a common requirement for invoicing systems, surveys, or any workflow that collects user input. By the end of this tutorial you’ll have a reusable code snippet that creates a fully functional text box field, places it where you want, and saves the updated PDF—all without leaving your C# project. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 or later (the code also works with .NET Framework 4.7+) +* Visual Studio 2022 or any IDE that supports C# +* An active Aspose.PDF for .NET license (the free trial works for development) +* A PDF file named `input.pdf` placed in a known directory (the tutorial uses `YOUR_DIRECTORY` as placeholder) + +> **Pro tip:** If you don’t have a license yet, you can request a temporary key from Aspose’s website; the library works in evaluation mode without code changes. + +## How to create pdf form field in C# (overview) + +1. Load the existing PDF document. +2. Instantiate a `TextBoxField` and configure its name and appearance. +3. Add a widget annotation that defines the visual rectangle on the target page. +4. Insert the field into the document’s form collection. +5. Save the modified PDF. + +Each step is explained in detail below, with full code examples and the reasoning behind the API calls. + +## Step 1: Load the PDF document + +The first operation is to read the source PDF. Aspose.PDF represents a PDF file with the `Document` class. Loading the document gives you access to its pages, form collection, and other structures. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Why this matters:** +Loading the file creates an in‑memory model of the PDF, allowing you to add, remove, or edit objects without corrupting the original file. The `Document` object also exposes the `Form` property, which is where you’ll later **add text box to pdf**. + +## Step 2: Create a text box field + +A text box field is a type of form field that lets users type free‑form text. In Aspose.PDF you create it by instantiating `TextBoxField`, passing the target page and a rectangle that defines the widget’s initial size. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Why this matters:** +* `PartialName` is the key that form‑processing tools (e.g., Adobe Acrobat, server‑side parsers) use to retrieve the entered value. +* The rectangle you pass here only defines the *initial* widget size; you can later adjust its visual location with a widget annotation (next step). +* Setting `DefaultAppearance` ensures the text inside the box renders consistently across viewers. + +## Step 3: Define the visual widget annotation + +A form field can have one or more **widget annotations** that control where the field appears on each page. By adding a widget you can place the same logical field in a different location or even on multiple pages. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Why this matters:** +The widget rectangle determines the on‑screen coordinates that users see. If you skip this step, the field may exist in the PDF’s data structure but won’t be visible to the end user. Adding a widget is the step that truly **adds text box to pdf**. + +## Step 4: Add the configured field to the document’s form + +Now that the `TextBoxField` is fully configured, you need to register it with the PDF’s form collection. This makes the field part of the interactive form and ensures it gets saved. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Why this matters:** +Without adding the field to `pdfDocument.Form`, the PDF viewer would ignore the widget annotation, and the field data would never be submitted. This line finalizes the **modify pdf to include text box** operation. + +## Step 5: Save the updated PDF + +Finally, write the changes back to disk. You can overwrite the original file or create a new one; the example saves to `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +When you open `output.pdf` in Adobe Acrobat Reader, you’ll see a rectangular text box labeled “Comments” on page 2. Users can click inside, type, and the entered text will be part of the PDF form data. + +## Full working example + +Putting all the pieces together, here’s a complete, ready‑to‑run program. Copy it into a new console project, replace `YOUR_DIRECTORY` with a real folder path, and run. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Expected output:** +Running the program prints two confirmation lines to the console. Opening `output.pdf` shows a text box on page 2 where the user can type comments. When the form is submitted (e.g., via Adobe Acrobat’s “Submit” button), the field name `Comments` appears in the exported FDF or XFDF data. + +## Common variations and edge cases + +| Situation | How to adapt the code | +|-----------|-----------------------| +| **Add the field to a different page** | Change `pdfDocument.Pages[1]` to the desired page index (`0`‑based). | +| **Create a multi‑line text box** | Set `textBox.Multiline = true;` before adding the widget. | +| **Set a default value** | Assign `textBox.Value = "Enter your comments here";`. | +| **Make the field required** | Set `textBox.Required = true;`. | +| **Place the field on multiple pages** | Call `textBox.AddWidgetAnnotation` for each additional rectangle on the target pages. | +| **Use a custom font** | Load the font with `FontRepository.AddFont("path/to/font.ttf")` and reference it in `DefaultAppearance`. | + +**Pro tip:** Always validate the rectangle coordinates against the page size (`pdfDocument.Pages[1].Rect`). If the widget lies outside the page bounds, viewers may clip or hide the field. + +## Testing the form field + +1. Open `output.pdf` in Adobe Acrobat Reader. +2. Click inside the “Comments” box; the cursor should appear. +3. Type any text and press **Tab** or click elsewhere. +4. Choose **File → Save As** to persist the entered value. +5. (Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +This snippet demonstrates that the field is not only visible but also retrievable via code—essential for server‑side processing. + +## Conclusion + +You now know how to **create pdf form field** in C# from start to finish. The tutorial covered loading a PDF, configuring a `TextBoxField`, adding a widget annotation, registering the field, and saving the result. With these building blocks you can **add text box to pdf** documents, **modify pdf to include text box**, and extend the approach to other field types such as checkboxes, radio buttons, or dropdowns. + +Next, explore related topics like **extracting form data**, **flattening PDF forms**, or **styling fields with borders and colors**. Each of these concepts builds on the same core API you just mastered, letting you create sophisticated interactive PDFs entirely in C#. + +Happy coding, and feel free to experiment with different rectangles, fonts, and validation rules to suit your application’s needs! + + +## 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. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/og-image.png b/pdf/english/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f8cf634de8718cc0b545f05623763b95d811ab GIT binary patch literal 44404 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 V4#Efs)!+ZCp{n~&Ipo>v{{e00RfGTl literal 0 HcmV?d00001 diff --git a/pdf/english/net/programming-with-operators/_index.md b/pdf/english/net/programming-with-operators/_index.md index 96ad036346..0f98058975 100644 --- a/pdf/english/net/programming-with-operators/_index.md +++ b/pdf/english/net/programming-with-operators/_index.md @@ -20,6 +20,7 @@ Aspose.PDF for .NET's "Programming with Operators" tutorials guide you through t ## Tutorials | Title | Description | | --- | --- | +| [Create empty PDF dictionary in C# with Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Learn how to create an empty PDF dictionary using Aspose.PDF for .NET in C#. | | [Draw XForm On Page](./draw-xform-on-page/) | earn how to draw XForms in PDF using Aspose.PDF for .NET with this comprehensive step-by-step guide. | | [PDF Operators](./pdf-operators/) | Step-by-step guide to using PDF operators with Aspose.PDF for .NET. Add an image to a PDF page and specify its position. | | [Remove Graphics Objects In PDF File](./remove-graphics-objects/) | Learn how to remove graphics objects from a PDF file using Aspose.PDF for .NET in this step-by-step guide. Simplify your PDF manipulation tasks. | @@ -30,4 +31,4 @@ Aspose.PDF for .NET's "Programming with Operators" tutorials guide you through t {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..16920a6dc1 --- /dev/null +++ b/pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: en +lastmod: 2026-08-14 +og_description: Create empty PDF dictionary in C# with Aspose.Pdf. Follow this complete + guide to add a custom graphics state to a PDF’s ExtGState collection. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Create empty PDF dictionary in C# – Aspose.Pdf step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Create empty PDF dictionary in C# with Aspose.Pdf +url: /net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create empty PDF dictionary in C# with Aspose.Pdf + +If you need to **create empty PDF dictionary** objects while working with PDF files, this guide shows you exactly how to do it in C# using the Aspose.Pdf library. Whether you are building a custom graphics state, adding a new resource, or preparing a template for later use, the steps below give you a complete, runnable solution. + +You’ll learn how to load a PDF, access the first page’s resource dictionary, build a brand‑new `CosPdfDictionary`, and insert it into the `ExtGState` collection. By the end of the tutorial you will have a working `output.pdf` that contains the newly created dictionary. + +## Prerequisites + +Before you start, make sure you have: + +- .NET 6.0 or later (the code also works with .NET Framework 4.6+) +- Visual Studio 2022 or any C# IDE you prefer +- An Aspose.Pdf for .NET license (or a temporary evaluation key) +- A sample PDF named **input.pdf** placed in a folder you control (the folder path will be used as `dataDir`) + +No additional NuGet packages are required beyond `Aspose.Pdf`. + +## Step 1: Set up the project and reference Aspose.Pdf + +1. Create a new **Console App** project in Visual Studio. +2. Open the **NuGet Package Manager** and install `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Add the following `using` directives at the top of `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Why these namespaces?* `Aspose.Pdf` contains the core `Document` class, while `Aspose.Pdf.Operators.Gfx` provides `CosPdfDictionary`, `CosPdfNumber`, and related low‑level PDF objects needed to **create empty PDF dictionary** structures. + +## Step 2: Load the source PDF + +The first operation is to load the existing PDF file into a `Document` instance. This gives you access to all pages, resources, and low‑level dictionaries. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Explanation*: `Document` reads the file into memory and prepares internal structures. The `using` statement ensures the file handle is released after we finish processing. + +## Step 3: Access the first page’s resource dictionary + +Every PDF page has a **Resources** dictionary that groups fonts, images, ExtGState objects, and other shared resources. To insert a new graphics state we need to edit this dictionary. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` is a helper class that lets you treat a PDF dictionary like a C# `Dictionary`. + +## Step 4: Retrieve (or create) the ExtGState collection + +`ExtGState` holds graphics state objects such as opacity, blend mode, and line width. If the source PDF already contains an `ExtGState` entry, we reuse it; otherwise we create a new empty dictionary. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Why this check?* Some PDFs omit the `ExtGState` entry altogether. By handling both cases, the tutorial remains robust for any input file. + +## Step 5: **Create empty PDF dictionary** for a new graphics state + +Now we actually **create empty PDF dictionary** objects that define the graphics state parameters. The dictionary starts empty, and we add the required keys: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### What each entry does + +| Key | Type | Meaning | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Stroke opacity (range 0‑1). | +| **ca** | `CosPdfNumber` | Fill opacity (range 0‑1). | +| **BM** | `CosPdfName` | Blend mode; `"Normal"` is the most common. | + +Because we started with an **empty PDF dictionary**, we have full control over which entries are added. You can extend this dictionary with additional graphics state parameters such as `LW` (line width) or `LC` (line cap) whenever needed. + +## Step 6: Insert the new graphics state into ExtGState + +The `ExtGState` dictionary works like a map where each entry is identified by a name (e.g., `GS0`, `GS1`). We add our freshly built dictionary under a unique key. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +If you plan to add multiple states, increment the suffix (`GS1`, `GS2`, …) to avoid name collisions. + +## Step 7: Save the modified PDF + +Finally, write the changes back to disk. The `Save` method automatically serializes the updated dictionaries. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Open `output.pdf` in any PDF viewer and inspect the **Resources → ExtGState** entry (most viewers hide this, but tools like Adobe Acrobat Preflight or PDF‑Tron can reveal it). You should see a `GS0` entry containing the opacity and blend mode values you defined. + +## Complete working example + +Putting all the pieces together, here is the full program you can copy‑paste into `Program.cs` and run: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Expected output** – The console prints a confirmation line, and `output.pdf` contains the new `GS0` entry under `ExtGState`. When you render a page that references `GS0` (e.g., via a content stream operator `gs`), strokes will be fully opaque while fills are 50 % transparent. + +## Common questions and edge‑case handling + +| Question | Answer | +|----------|--------| +| *What if the PDF has multiple pages?* | The example targets the first page (`Pages[1]`). To affect all pages, loop through `pdfDocument.Pages` and repeat steps 3‑5 for each page’s resources. | +| *Can I add the dictionary to a page that already has an ExtGState entry named “GS0”?* | Yes, but you must use a different key (`GS1`, `GS2`, …) to avoid overwriting the existing entry. | +| *Is it safe to modify the dictionary after saving?* | Once you call `Save`, the in‑memory representation is detached from the file. You can continue editing the `Document` object and call `Save` again if needed. | +| *Do I need a license for Aspose.Pdf to use ` + + +## 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 Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/og-image.png b/pdf/english/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a729a419edc63d348cb3f6d4645e1bef650e4d GIT binary patch literal 51464 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� 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 literal 0 HcmV?d00001 diff --git a/pdf/english/net/programming-with-security-and-signatures/_index.md b/pdf/english/net/programming-with-security-and-signatures/_index.md index e129a2f725..a46c7c3f27 100644 --- a/pdf/english/net/programming-with-security-and-signatures/_index.md +++ b/pdf/english/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ The tutorial gives you a detailed overview of methods and techniques to ensure t | [Check PDF Signatures in C# – How to Read Signed PDF Files](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Learn how to read and verify PDF signatures using Aspose.PDF for .NET in C#. Step-by-step guide for developers. | | [How to Repair PDF Files – Complete C# Guide with Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Learn how to repair corrupted PDF files using Aspose.PDF for .NET in a comprehensive C# guide. | | [Verify PDF Signature in C# – Complete Programming Guide](./verify-pdf-signature-in-c-complete-programming-guide/) | Learn how to verify PDF signatures using Aspose.PDF for .NET in C#. Comprehensive step-by-step programming guide. | +| [Create signature options in C# – full guide to digital signing](./create-signature-options-in-c-full-guide-to-digital-signing/) | Learn how to create and configure signature options in C# using Aspose.PDF for .NET. Full step-by-step digital signing guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..7eb173c835 --- /dev/null +++ b/pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-08-14 +description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: en +lastmod: 2026-08-14 +og_description: Create signature options in C# and apply a digital signature. This + tutorial walks you through configuring the signature, adding a custom hash function, + and signing a document. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Create signature options in C# – step‑by‑step digital signing guide +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Create signature options in C# – full guide to digital signing +url: /net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create signature options in C# – full guide to digital signing + +Create signature options in C# to configure a digital‑signature workflow. This tutorial shows how to apply digital signature, implement a custom hash function, and sign a document using the `SignatureOptions` class. If you have ever needed to sign a PDF, XML, or any binary payload from a .NET application, the steps below give you a ready‑to‑run solution. + +You will learn how to: + +* configure `SignatureOptions` with a custom hash algorithm, +* call the signing method correctly, +* verify that the signature was applied, +* avoid common pitfalls when configuring the signature. + +The only prerequisites are a recent .NET SDK (≥ .NET 6) and a signing library that exposes `SignatureOptions` (for example, **GroupDocs.Signature**, **Aspose.Signature**, or a similar API). No external tools are required. + +--- + +## Prerequisites + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6 SDK or later | Provides the modern language features used in the examples. | +| A signing‑library NuGet package (e.g., `GroupDocs.Signature`) | Supplies the `SignatureOptions` type and the `Sign` extension method. | +| Access to a private key or certificate | Required to generate a verifiable digital signature. | + +Install the library with the standard CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Step 1: Create signature options + +The first step is to instantiate `SignatureOptions` and set the properties that control the signing process. This object tells the library *what* to sign and *how* to sign it. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Why this matters:** `SignatureOptions` acts as a contract between your code and the signing engine. By configuring it up front you avoid repeated boilerplate when signing multiple documents. + +--- + +## Step 2: Implement a custom hash function + +A *custom hash function* gives you full control over the digest that the signature algorithm signs. This is useful when the default hash (SHA‑256) does not meet compliance requirements or when you need to hash a subset of the document. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Why this matters:** By assigning `CustomSignHash`, you replace the library’s internal hashing step with `MyHash`. The signing engine will now sign the bytes returned by your function, ensuring compliance with any custom policy. + +--- + +## Step 3: Load the document and apply digital signature + +With the options prepared, you can now open the target file and call the signing method. The method `Sign` is provided by the library and uses the configured `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Why this matters:** The call to `Sign` performs three actions internally: + +1. **Hash calculation** – now delegated to your custom hash function. +2. **Signature generation** – using the private key supplied to the library’s configuration. +3. **Embedding** – the generated signature is attached to the output file. + +If any step fails, the method returns `false`, allowing you to handle the error gracefully. + +--- + +## Step 4: Verify that the document is signed + +A quick verification confirms that the signature was correctly applied. Most libraries expose a `Verify` method that checks the integrity of the signed file. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Why this matters:** Verification ensures that the signed document has not been tampered with after signing and that the custom hash produced a compatible digest. + +--- + +## How to configure signature for different file types + +The same `SignatureOptions` object can be reused for PDFs, Word documents, images, or plain binaries. The only change required is the specific options class (e.g., `PdfSignatureOptions`, `WordSignatureOptions`). Here’s a quick example for a JPEG image: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Why this matters:** Understanding how to *configure signature* for each format lets you extend the same codebase across multiple document types without rewriting the hashing logic. + +--- + +## Common pitfalls and best practices + +| Pitfall | Recommended fix | +|---------|-----------------| +| Forgetting to set `CustomSignHash` after creating `SignatureOptions` | Assign the delegate immediately after constructing the options object. | +| Using a hash algorithm that the signing certificate does not support | Verify that the certificate’s key usage matches the hash length (e.g., RSA‑2048 with SHA‑512). | +| Overlooking the need to dispose `Signature` objects | Wrap the `Signature` instance in a `using` block to release file handles. | +| Saving the signed file over the original source | Always write to a new file path (`outputPath`) to preserve the original document. | + +--- + +## Full working example + +Below is a self‑contained program that puts all the pieces together. Copy it into a new console project and run it; the console will report success or failure. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Expected output** + +``` +Signature verified successfully. +``` + +If the console prints “Signing failed.” or “Signature verification failed.”, double‑check the certificate configuration and ensure the custom hash returns a byte array of the expected size. + +--- + +## Conclusion + +You now know how to **create signature options** in C#, attach a **custom hash function**, and **apply digital signature** to any supported document. The tutorial covered the full lifecycle: configuring the options, signing the file, and verifying the result. By reusing the same `SignatureOptions` instance you can also **how to configure signature** for images, Word files, or raw binaries. + +--- + +## What’s next? + +* Explore additional `SignatureOptions` properties such as visual stamps, timestamp servers, and certificate chains – these align with the **apply digital signature** keyword. +* Experiment with other hash algorithms (e.g., Blake2b) by swapping the implementation inside `MyHash`. +* Integrate the signing flow into a web API to enable on‑the‑fly document signing – a natural extension of **how to sign document** in a service‑oriented architecture. + +Feel free to adapt the code for your own security policies, and share your experience in the comments. Happy signing! + + +## 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 Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/og-image.png b/pdf/english/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..a26ecfac7f13044b92fb4e9cfe68bfed47ab58db GIT binary patch literal 44438 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 diff --git a/pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..fe0238e776 --- /dev/null +++ b/pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-08-14 +description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting Word + to PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: en +lastmod: 2026-08-14 +og_description: How to set bates numbering options in C# quickly. This guide shows + you how to add custom prefixes and start numbers when converting Word to PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: How to set bates numbering options in C# – step‑by‑step tutorial +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: How to set bates numbering options in C# – complete guide +url: /net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to set bates numbering options in C# – complete guide + +If you need **how to set bates numbering options** in C#, this guide walks you through the exact steps. You’ll learn how to configure the start number, add a prefix, and apply the numbering while converting a Word document to PDF using the GroupDocs API. + +Document processing often requires unique identifiers on each page for legal or archival purposes. By the end of this tutorial you will have a reusable snippet that you can drop into any .NET project, whether you’re building a litigation support tool or an automated report generator. No external tools are needed—just the GroupDocs.Conversion library and a few lines of C#. + +## What you’ll need + +Before you start, make sure you have: + +* .NET 6.0 SDK or later installed +* Visual Studio 2022 (or any IDE that supports .NET) +* A valid GroupDocs.Conversion license (the free trial works for testing) +* A sample Word document (`input.docx`) you want to number + +These prerequisites ensure the code runs without additional configuration. + +## How to set bates numbering options – overview + +The core of **how to set bates numbering options** lies in three objects: + +1. `Document` – loads the source file. +2. `BatesNumberingOptions` – holds the start number, prefix, and other formatting details. +3. `AddBatesNumbering` – the method that injects the numbering into each page. + +Understanding why each piece exists helps you adapt the solution to more complex scenarios, such as custom fonts or multi‑language numbering. + +## Step 1: Install the GroupDocs.Conversion NuGet package + +Open a terminal in your solution folder and run: + +```bash +dotnet add package GroupDocs.Conversion +``` + +The **GroupDocs API** provides the `Document` class and the `AddBatesNumbering` extension method used later in the tutorial. + +## Step 2: Load the source document + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Why this step?* +Loading the file creates an in‑memory representation that the conversion engine can manipulate. Without a `Document` instance you cannot apply Bates numbering or any other transformation. + +## Step 3: Create the Bates numbering options + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Why this step?* +`BatesNumberingOptions` encapsulates all the settings you might need when **setting bates numbering options**. Adjusting `StartNumber` and `Prefix` lets you align the output with your case‑management system. The `Position` property controls visual placement, which is often a compliance requirement. + +## Step 4: Apply Bates numbering to the document + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +The `AddBatesNumbering` method walks through each page of the loaded `Document` and inserts the configured string. Because the method works on the in‑memory representation, you can chain additional processing steps (e.g., watermarking) before saving. + +## Step 5: Convert and save the result as PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Why this step?* +Saving as PDF is a common final format for legal documents. The `PdfConvertOptions` object lets you fine‑tune the output, but it isn’t required for basic numbering. The `Save` call writes the fully numbered PDF to disk. + +## Complete, runnable example + +Putting everything together, here is a self‑contained console application you can compile and run: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Expected output** + +Running the program creates `output.pdf` where every page shows a label such as `CASE-1000`, `CASE-1001`, etc., positioned in the right footer. Open the PDF in any viewer to verify the numbers appear as intended. + +## Common pitfalls and best practices + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| **Relative paths cause `FileNotFoundException`** | The working directory of a console app may differ from Visual Studio’s. | Use absolute paths or `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numbering overlaps existing footers** | If the source document already has content in the chosen footer area, the new number can be hidden. | Choose a different `Position` (e.g., `HeaderLeft`) or adjust the source template. | +| **Large documents are slow** | Bates numbering iterates over each page; memory usage grows with file size. | Process the document in chunks using `Document.Split` if you exceed 500 pages. | +| **License expiration** | The free trial of GroupDocs expires after 30 days, causing an exception on `AddBatesNumbering`. | Apply a valid license key before loading the document: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tip:** If you need a different number format per case (e.g., `2023-CASE-001`), build the prefix dynamically before creating `BatesNumberingOptions`. + +## Extending the solution + +The same **Bates numbering C#** approach works with other source formats such as `.txt`, `.html`, or even images. Simply change the file extension when constructing the `Document` object, and the conversion engine will handle the rest. + +You might also combine **document conversion C#** with OCR for scanned PDFs: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusion + +You now know **how to set bates numbering options** in C# from start to finish. By creating a `BatesNumberingOptions` object, applying it with `AddBatesNumbering`, and saving the result as PDF, you can automate the production of legally compliant, uniquely identified documents. + +From here you can explore related topics such as **C# PDF generation**, **document conversion C#**, or advanced **GroupDocs API** features like watermarking and digital signatures. Experiment with different prefixes, positions, and number formats to fit your workflow. + +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. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/og-image.png b/pdf/english/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..baa8f863eda437c2cfb0598cd9dc2745a3b28ffa GIT binary patch literal 48644 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 diff --git a/pdf/french/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/french/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..629f6e1369 --- /dev/null +++ b/pdf/french/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Dessinez un rectangle sur un PDF rapidement avec C#. Apprenez à définir + les dimensions du rectangle et à ajouter des formes à une page PDF en quelques lignes + seulement. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: fr +lastmod: 2026-08-14 +og_description: Dessinez un rectangle sur un PDF avec C# en quelques secondes. Ce + guide montre comment définir les dimensions du rectangle, ajouter une forme et vérifier + les limites de la page pour des graphiques PDF fiables. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: dessiner un rectangle sur un PDF – tutoriel complet C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Dessiner un rectangle sur un PDF – guide C# étape par étape +url: /fr/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# dessiner un rectangle sur pdf – tutoriel complet C# + +Si vous devez **dessiner un rectangle sur pdf** avec C#, ce guide vous présente une solution concise et prête pour la production. Vous verrez exactement **comment définir les dimensions d'un rectangle**, vérifier que la forme s'adapte, et l'ajouter à une page avec un seul appel de méthode. + +Le tutoriel couvre tout, de la création d'un document PDF au rendu du rectangle, afin que vous puissiez copier‑coller le code dans votre propre projet et voir les résultats immédiatement. Aucune documentation externe n'est requise — seulement les étapes ci‑dessous. + +## Prérequis + +Avant de commencer, assurez‑vous d'avoir : + +* .NET 6.0 ou version ultérieure (le code fonctionne également avec .NET Framework 4.7+) +* Le package NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Une compréhension de base de la syntaxe C# +* Un IDE tel que Visual Studio ou VS Code + +> **Astuce :** Utilisez la licence d'évaluation gratuite d'Aspose.PDF pour des expériences rapides ; elle ajoute un petit filigrane mais vous permet de tester toutes les fonctionnalités. + +## Comment dessiner un rectangle sur PDF avec C# + +L'essentiel de la tâche consiste à créer un `RectangleShape`, définir sa taille et son contour, puis l'attacher à une `Page`. Le titre H2 suivant contient le mot‑clé principal, répondant aux exigences SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Explication de chaque étape + +| Étape | Pourquoi c'est important | +|------|---------------------------| +| **1️⃣ Créer un nouveau document PDF** | Initialise le conteneur qui contiendra les pages et les graphiques. | +| **2️⃣ Ajouter une page vierge** | Vous avez besoin d'un objet `Page` car les formes sont attachées à une page, pas directement au document. | +| **3️⃣ Définir les limites du rectangle** | C’est ici que vous **comment définir les dimensions d'un rectangle**. Le constructeur `Rectangle` prend `x`, `y`, `width` et `height` en points (1 pt = 1/72 in). | +| **4️⃣ Créer la forme rectangle** | `RectangleShape` est la classe Aspose qui rend un rectangle. Définir `StrokeColor` indique le contour ; vous pouvez aussi définir `FillColor` pour un remplissage plein. | +| **5️⃣ Vérifier les limites de la page** | `CheckShapeBoundary` lève une exception si le rectangle dépasse la taille de la page, évitant ainsi des PDF mal formés. | +| **6️⃣ Ajouter la forme à la page** | La forme devient partie du flux de contenu de la page. | +| **7️⃣ Enregistrer le PDF** | Persiste le document dans un fichier que vous pouvez ouvrir avec n'importe quel lecteur PDF. | + +Le `RectangleDemo.pdf` résultant contient un rectangle noir positionné dans le coin supérieur gauche de la page, exactement 500 pt de large et 700 pt de haut. + +![dessiner un rectangle sur pdf exemple](https://example.com/rectangle-demo.png "dessiner un rectangle sur pdf exemple") + +*Texte alternatif de l'image : exemple de dessin d'un rectangle sur pdf montrant un rectangle noir dans le coin supérieur gauche d'une page PDF.* + +## Comment définir les dimensions d'un rectangle pour différentes tailles de page + +L'extrait ci‑dessus utilise des valeurs fixes (`500 x 700`). Dans les applications réelles, vous devez souvent que le rectangle s'adapte à la largeur et à la hauteur de la page. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Points clés :** + +* Utilisez `page.PageInfo.Width` et `Height` pour lire la taille réelle de la page. +* Multiplier par un facteur (par ex., `0.8f`) vous permet d'exprimer les dimensions en pourcentage de la page. +* Le centrage s'obtient en soustrayant la taille du rectangle de la taille de la page et en divisant le reste par deux. + +## Pièges courants et comment les éviter + +| Piège | Pourquoi cela se produit | Solution | +|-------|--------------------------|----------| +| Le rectangle dépasse la page | Dimensions codées en dur plus grandes que la taille de la page. | Appelez `page.CheckShapeBoundary` **avant** d'ajouter la forme ; ajustez les dimensions si une exception est levée. | +| Le contour n'est pas visible | `StrokeColor` laissé à la valeur par défaut (`Color.Empty`). | Définissez explicitement `StrokeColor` (par ex., `Color.Black`). | +| Le rectangle apparaît hors écran | Les coordonnées commencent en bas‑gauche dans l'espace PDF ; utiliser des coordonnées style écran (haut‑gauche) provoque un renversement. | Rappelez‑vous que l'origine `(0,0)` est le coin inférieur gauche. Ajustez `y` en conséquence ou utilisez `pageHeight - desiredY`. | +| Épaisseur de ligne inattendue | L'épaisseur de ligne par défaut peut être trop fine pour l'impression. | Définissez `rectangleShape.LineWidth = 2;` pour augmenter l'épaisseur. | + +## Étendre l'exemple + +Une fois que vous pouvez **dessiner un rectangle sur pdf**, vous pouvez facilement ajouter d'autres formes : + +* **EllipseShape** – pour des cercles ou des ovales. +* **PolygonShape** – pour des polygones personnalisés. +* **TextFragment** – pour étiqueter vos rectangles. + +Toutes les formes partagent le même flux de travail : définir les limites, configurer l'apparence, vérifier les limites, puis ajouter à la page. + +## Programme complet et exécutable + +Voici le programme complet qui combine le rectangle de base et l'exemple de dimensionnement dynamique. Copiez‑le dans un nouveau projet console, restaurez le package NuGet `Aspose.PDF`, puis exécutez. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Sortie attendue :** +Ouvrez `CombinedRectangles.pdf`. Vous verrez un rectangle noir ancré dans le coin inférieur gauche et un rectangle bleu foncé centré avec un remplissage jaune clair. Les deux rectangles respectent les marges de la page. + +## Conclusion + +Vous savez maintenant comment **dessiner un rectangle sur pdf** avec C# et précisément **comment définir les dimensions d'un rectangle** pour des mises en page fixes et réactives. L'approche utilise `RectangleShape` d'Aspose.PDF, la vérification des limites et des calculs simples pour s'adapter à n'importe quelle taille de page. + +Ensuite, vous pourriez explorer : + +* Ajouter des **couleurs de remplissage** et des **styles de ligne** (pointillés, tirets) – mot‑clé secondaire : comment définir les dimensions d'un rectangle avec style. +* Combiner plusieurs formes dans une même `Page` pour créer des graphiques ou des formulaires. +* Exporter le PDF vers un flux pour des API web au lieu de l'enregistrer sur disque. + +Expérimentez avec différentes tailles, couleurs et positions pour maîtriser les graphiques PDF dans vos applications .NET. Bon codage ! + +## 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 et fonctionnels avec des explications pas à pas pour vous aider à maîtriser des fonctionnalités API supplémentaires et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Comment personnaliser les PDF avec Aspose.PDF pour .NET : définir les marges de page et tracer des lignes](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Comment ajouter des tampons de page dans les PDF en utilisant Aspose.PDF pour .NET : guide complet](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Comment ajouter des tampons de numéro de page dans les PDF en utilisant Aspose.PDF pour .NET | Tampons et arrière‑plans](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/conversion-export/_index.md b/pdf/french/net/conversion-export/_index.md index b221518c00..e98b1eaf0a 100644 --- a/pdf/french/net/conversion-export/_index.md +++ b/pdf/french/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Apprenez à convertir des documents PDF en images TIFF avec Aspose.PDF pour .NET ### [Comment enregistrer un PDF avec Aspose – Guide étape par étape](./how-to-save-pdf-with-aspose-step-by-step-guide/) Apprenez à enregistrer un fichier PDF en utilisant Aspose avec un guide détaillé étape par étape. +### [Enregistrer un PDF en HTML et le convertir en PDF/X‑4 avec Aspose.PDF en C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Apprenez à sauvegarder un PDF au format HTML puis à le convertir en PDF/X‑4 avec Aspose.PDF en C#. + ## Ressources supplémentaires - [Aspose.PDF pour la documentation réseau](https://docs.aspose.com/pdf/net/) diff --git a/pdf/french/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/french/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..ae9407284c --- /dev/null +++ b/pdf/french/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-14 +description: Enregistrez le PDF au format HTML et convertissez le PDF en PDF/X‑4 à + l’aide d’Aspose.PDF pour C#. Le code pas à pas montre l’exportation HTML, la liste + des signatures et la modification de l’état graphique. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: fr +lastmod: 2026-08-14 +og_description: Enregistrez le PDF au format HTML et convertissez le PDF en PDF/X‑4 + à l’aide d’Aspose.PDF pour C#. Suivez ce guide complet pour exporter le HTML, lister + les signatures et modifier les états graphiques. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Enregistrer un PDF en HTML et le convertir en PDF/X‑4 avec Aspose.PDF – + Guide C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Sauvegarder le PDF au format HTML et le convertir en PDF/X‑4 avec Aspose.PDF + en C# +url: /fr/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Enregistrer un PDF en HTML et le convertir en PDF/X‑4 avec Aspose.PDF en C# + +Si vous devez **enregistrer un PDF en HTML**, Aspose.Pdf rend le processus simple. Ce tutoriel montre également comment **convertir un PDF en PDF/X‑4**, lister les champs de signature et ajouter un ExtGState personnalisé, vous offrant un flux de travail complet de bout en bout. + +Vous apprendrez à : + +* Exporter un PDF en HTML propre tout en ignorant les images raster. +* Convertir un document PDF au standard PDF/X‑4 pour une sortie prête à l’impression. +* Énumérer tous les champs de signature dans un PDF. +* Insérer un état graphique personnalisé (ExtGState) sur la première page. + +Tout le code s’exécute sur .NET 6 ou version ultérieure et nécessite le package NuGet Aspose.Pdf for .NET. + +## Prérequis + +| Exigence | Raison | +|----------|--------| +| .NET 6 SDK ou version plus récente | Fournit le runtime pour l'exemple C#. | +| Visual Studio 2022 (ou tout IDE C#) | Permet une édition et un débogage faciles. | +| Aspose.Pdf for .NET (v23.12 ou ultérieur) | Fournit les classes `Document`, `PdfFormatConversionOptions` et `HtmlSaveOptions` utilisées dans le tutoriel. | +| Un fichier PDF d’exemple (`sample.pdf`) | Le document source qui sera traité. | + +Installez la bibliothèque avec : + +```bash +dotnet add package Aspose.Pdf +``` + +## Vue d'ensemble de la solution + +Le programme effectue six étapes logiques : + +1. Charger le PDF source. +2. Lister chaque nom de champ de signature. +3. **Convertir le PDF en PDF/X‑4** et enregistrer le résultat. +4. **Enregistrer le PDF en HTML** tout en ignorant les images raster. +5. Ajouter un ExtGState personnalisé (état graphique) à la première page. +6. Enregistrer le PDF modifié avec le nouvel état graphique. + +Chaque étape est expliquée ci‑dessous, avec le code complet et le raisonnement derrière les choix. + +## Étape 1 : Charger le document PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Pourquoi c’est important* : `Document` représente le fichier PDF complet. Le charger une fois vous permet de réutiliser le même objet pour toutes les opérations suivantes, ce qui réduit la surcharge d’E/S. + +## Étape 2 : Lister tous les noms de champs de signature + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Pourquoi c’est important* : Connaître les noms des champs de signature est essentiel lorsque vous devez valider, supprimer ou remplacer des signatures numériques ultérieurement. La collection `Signatures` fournit une vue rapide en lecture seule des champs. + +## Étape 3 : Convertir le PDF en PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Points clés** + +* `PdfStandard.PdfX4` indique à Aspose.Pdf d’incorporer toutes les ressources requises (polices, profils colorimétriques) et d’appliquer les contraintes PDF/X‑4. +* La conversion s’effectue en mémoire ; seul le fichier final est écrit sur le disque, ce qui rend l’opération rapide. + +> **Conseil pro** : Vérifiez la sortie avec un validateur PDF/X‑4 (par ex., Adobe Preflight) si votre flux de travail en aval est strict concernant la conformité. + +## Étape 4 : Enregistrer le PDF en HTML tout en ignorant les images raster + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Pourquoi vous pourriez vouloir cela** : La sortie HTML est utile pour l’aperçu web ou l’indexation de contenu. Ignorer les images raster (`SkipRasterImages = true`) garde le HTML léger et améliore les temps de chargement, surtout lorsque le PDF d’origine contient des numérisations haute résolution. + +## Étape 5 : Ajouter un ExtGState personnalisé à la première page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explication* : Un objet **ExtGState** contrôle la transparence, le mode de fusion et d’autres paramètres graphiques. En ajoutant `GS0`, vous pouvez ensuite référencer cet état dans les flux de contenu (par ex., pour des superpositions semi‑transparentes). Le code utilise l’API COS bas‑niveau car Aspose.Pdf n’expose pas de wrapper haut‑niveau pour la création d’ExtGState. + +## Étape 6 : Enregistrer le PDF modifié avec le nouvel ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Le fichier final (`sample_with_extgstate.pdf`) contient : + +* Toutes les pages et le contenu d’origine. +* Une version conforme PDF/X‑4 (`sample_pdfx4.pdf`). +* Une représentation HTML sans images raster (`sample.html`). +* Un ExtGState personnalisé (`GS0`) attaché aux ressources de la première page. + +### Sortie console attendue + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Si le PDF source ne contient aucune signature, la boucle n’affiche rien mais continue sans erreur. + +## Variations courantes et cas limites + +| Situation | Ajustement | +|-----------|------------| +| **Le PDF ne contient aucune page** | Vérifiez `doc.Pages.Count` avant d’accéder à `doc.Pages[1]` pour éviter `IndexOutOfRangeException`. | +| **Vous avez besoin de PDF/A‑2b au lieu de PDF/X‑4** | Modifiez `PdfStandard.PdfX4` en `PdfStandard.PdfA2b` dans `PdfFormatConversionOptions`. | +| **Vous souhaitez conserver les images raster** | Définissez `SkipRasterImages = false` (ou omettez la propriété) dans `HtmlSaveOptions`. | +| **Plusieurs objets ExtGState** | Utilisez des clés uniques (`GS1`, `GS2`, …) lors de l’ajout à `extGStateDict`. | +| **PDF volumineux (des centaines de Mo)** | Activez `doc.OptimizeResources = true` avant l’enregistrement pour réduire l’utilisation de la mémoire. | + +## Code complet (exécutable) + + + +## 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 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. + +- [Guide complet : Convertir un PDF en HTML avec Aspose.PDF .NET et des stratégies personnalisées](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Convertir un PDF en HTML avec des URL d’image personnalisées en utilisant Aspose.PDF .NET : Guide complet](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Conversion de PDF en HTML avec Aspose.PDF .NET : Enregistrer les images en PNG externes](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/programming-with-forms/_index.md b/pdf/french/net/programming-with-forms/_index.md index 65a1447c87..398937c750 100644 --- a/pdf/french/net/programming-with-forms/_index.md +++ b/pdf/french/net/programming-with-forms/_index.md @@ -25,6 +25,7 @@ Ces tutoriels proposent également des exemples de code détaillés, des explica | [Remplissage de texte arabe](./arabic-text-filling/) | Apprenez à saisir du texte arabe dans des formulaires PDF avec Aspose.PDF pour .NET grâce à ce tutoriel étape par étape. Améliorez vos compétences en manipulation de PDF. | | [Zone de liste déroulante](./combo-box/) Apprenez à ajouter une zone de liste déroulante à un PDF avec Aspose.PDF pour .NET. Suivez notre guide étape par étape pour créer facilement des formulaires PDF interactifs. | | [Créer un document](./create-doc/) | Apprenez à créer des documents PDF interactifs avec des boutons radio à l'aide d'Aspose.PDF pour .NET dans ce guide complet étape par étape. | +| [Créer un champ de formulaire PDF en C# – guide étape par étape](./create-pdf-form-field-in-c-step-by-step-guide/) | Apprenez à créer un champ de formulaire PDF en C# avec Aspose.PDF pour .NET, guide complet étape par étape. | | [Supprimer un champ de formulaire dans un document PDF](./delete-form-field/) | Découvrez comment supprimer des champs de formulaire dans des documents PDF avec Aspose.PDF pour .NET grâce à ce guide étape par étape. Idéal pour les développeurs et les passionnés de PDF. | | [Déterminer le champ obligatoire dans le formulaire PDF](./determine-required-field/) | Apprenez à déterminer les champs obligatoires d'un formulaire PDF avec Aspose.PDF pour .NET. Notre guide étape par étape simplifie la gestion des formulaires et optimise votre flux de travail d'automatisation PDF. | | [Conversion dynamique de XFA en Acro](./dynamic-xfa-to-acro-form/) | Apprenez à convertir des formulaires XFA dynamiques en AcroForms standard à l'aide d'Aspose.PDF pour .NET dans ce didacticiel étape par étape. | diff --git a/pdf/french/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/french/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..c7f4ce607c --- /dev/null +++ b/pdf/french/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Créez rapidement un champ de formulaire PDF avec C#. Apprenez comment + ajouter une zone de texte à un PDF et modifier le PDF pour y inclure une zone de + texte en utilisant Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: fr +lastmod: 2026-08-14 +og_description: Créer un champ de formulaire PDF avec C#. Ce tutoriel montre comment + ajouter une zone de texte à un PDF et modifier un PDF pour y inclure une zone de + texte en utilisant Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Créer un champ de formulaire PDF en C# – guide complet de programmation +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Créer un champ de formulaire PDF en C# – guide étape par étape +url: /fr/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Créer un champ de formulaire PDF en C# – guide étape par étape + +Si vous devez **create pdf form field** dans un document, ce guide vous accompagne tout au long du processus. Vous verrez exactement comment **add text box to pdf** aux pages, et comment **modify pdf to include text box** en utilisant la bibliothèque Aspose.PDF pour .NET. + +Travailler avec les formulaires PDF est une exigence courante pour les systèmes de facturation, les enquêtes ou tout flux de travail qui collecte des entrées utilisateur. À la fin de ce tutoriel, vous disposerez d’un extrait de code réutilisable qui crée un champ de zone de texte pleinement fonctionnel, le place où vous le souhaitez, et enregistre le PDF mis à jour—le tout sans quitter votre projet C#. + +## Prérequis + +Avant de commencer, assurez‑vous d’avoir : + +* .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework 4.7+) +* Visual Studio 2022 ou tout IDE supportant C# +* Une licence active d’Aspose.PDF pour .NET (l’essai gratuit suffit pour le développement) +* Un fichier PDF nommé `input.pdf` placé dans un répertoire connu (le tutoriel utilise `YOUR_DIRECTORY` comme espace réservé) + +> **Astuce pro :** Si vous n’avez pas encore de licence, vous pouvez demander une clé temporaire sur le site d’Aspose ; la bibliothèque fonctionne en mode évaluation sans modification du code. + +## Comment créer un champ de formulaire PDF en C# (aperçu) + +1. Charger le document PDF existant. +2. Instancier un `TextBoxField` et configurer son nom et son apparence. +3. Ajouter une annotation widget qui définit le rectangle visuel sur la page cible. +4. Insérer le champ dans la collection de formulaires du document. +5. Enregistrer le PDF modifié. + +Chaque étape est détaillée ci‑dessous, avec des exemples de code complets et les raisons des appels d’API. + +## Étape 1 : Charger le document PDF + +La première opération consiste à lire le PDF source. Aspose.PDF représente un fichier PDF avec la classe `Document`. Charger le document vous donne accès à ses pages, à sa collection de formulaires et à d’autres structures. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Pourquoi cela importe :** +Le chargement du fichier crée un modèle du PDF en mémoire, vous permettant d’ajouter, de supprimer ou de modifier des objets sans corrompre le fichier original. L’objet `Document` expose également la propriété `Form`, qui est l’endroit où vous **add text box to pdf** ultérieurement. + +## Étape 2 : Créer un champ de zone de texte + +Un champ de zone de texte est un type de champ de formulaire qui permet aux utilisateurs de saisir du texte libre. Dans Aspose.PDF, vous le créez en instanciant `TextBoxField`, en passant la page cible et un rectangle qui définit la taille initiale du widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Pourquoi cela importe :** +* `PartialName` est la clé que les outils de traitement de formulaires (par ex., Adobe Acrobat, analyseurs côté serveur) utilisent pour récupérer la valeur saisie. +* Le rectangle que vous passez ici ne définit que la taille *initiale* du widget ; vous pourrez ajuster sa position visuelle avec une annotation widget (étape suivante). +* Définir `DefaultAppearance` garantit que le texte à l’intérieur de la zone s’affiche de façon cohérente dans tous les visionneurs. + +## Étape 3 : Définir l’annotation widget visuelle + +Un champ de formulaire peut posséder une ou plusieurs **widget annotations** qui contrôlent où le champ apparaît sur chaque page. En ajoutant un widget, vous pouvez placer le même champ logique à un emplacement différent ou même sur plusieurs pages. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Pourquoi cela importe :** +Le rectangle du widget détermine les coordonnées à l’écran que les utilisateurs voient. Si vous sautez cette étape, le champ existera dans la structure de données du PDF mais ne sera pas visible pour l’utilisateur final. L’ajout d’un widget est l’étape qui **adds text box to pdf** réellement. + +## Étape 4 : Ajouter le champ configuré au formulaire du document + +Maintenant que le `TextBoxField` est entièrement configuré, vous devez l’enregistrer dans la collection de formulaires du PDF. Cela rend le champ partie intégrante du formulaire interactif et assure qu’il sera sauvegardé. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Pourquoi cela importe :** +Sans ajouter le champ à `pdfDocument.Form`, le visionneur PDF ignorerait l’annotation widget, et les données du champ ne seraient jamais soumises. Cette ligne finalise l’opération **modify pdf to include text box**. + +## Étape 5 : Enregistrer le PDF mis à jour + +Enfin, écrivez les modifications sur le disque. Vous pouvez écraser le fichier original ou en créer un nouveau ; l’exemple enregistre sous `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Lorsque vous ouvrez `output.pdf` avec Adobe Acrobat Reader, vous verrez une zone de texte rectangulaire intitulée « Comments » à la page 2. Les utilisateurs peuvent cliquer à l’intérieur, taper, et le texte saisi fera partie des données du formulaire PDF. + +## Exemple complet fonctionnel + +En assemblant tous les morceaux, voici un programme complet, prêt à être exécuté. Copiez‑le dans un nouveau projet console, remplacez `YOUR_DIRECTORY` par un chemin réel, puis lancez‑le. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Sortie attendue :** +L’exécution du programme affiche deux lignes de confirmation dans la console. L’ouverture de `output.pdf` montre une zone de texte à la page 2 où l’utilisateur peut saisir des commentaires. Lorsque le formulaire est soumis (par ex., via le bouton « Submit » d’Adobe Acrobat), le nom du champ `Comments` apparaît dans les données FDF ou XFDF exportées. + +## Variations courantes et cas limites + +| Situation | Comment adapter le code | +|-----------|--------------------------| +| **Ajouter le champ à une page différente** | Changez `pdfDocument.Pages[1]` par l’indice de la page souhaitée (index 0‑based). | +| **Créer une zone de texte multi‑ligne** | Définissez `textBox.Multiline = true;` avant d’ajouter le widget. | +| **Définir une valeur par défaut** | Assignez `textBox.Value = "Enter your comments here";`. | +| **Rendre le champ obligatoire** | Définissez `textBox.Required = true;`. | +| **Placer le champ sur plusieurs pages** | Appelez `textBox.AddWidgetAnnotation` pour chaque rectangle supplémentaire sur les pages cibles. | +| **Utiliser une police personnalisée** | Chargez la police avec `FontRepository.AddFont("path/to/font.ttf")` et référencez‑la dans `DefaultAppearance`. | + +**Astuce pro :** Validez toujours les coordonnées du rectangle par rapport à la taille de la page (`pdfDocument.Pages[1].Rect`). Si le widget se trouve en dehors des limites de la page, les visionneurs peuvent le couper ou le masquer. + +## Tester le champ de formulaire + +1. Ouvrez `output.pdf` avec Adobe Acrobat Reader. +2. Cliquez à l’intérieur de la zone « Comments » ; le curseur doit apparaître. +3. Saisissez du texte et appuyez sur **Tab** ou cliquez ailleurs. +4. Choisissez **File → Save As** pour enregistrer la valeur saisie. +5. (Optionnel) Utilisez l’API `Form` d’Aspose.PDF pour extraire la valeur par programme : + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Cet extrait montre que le champ n’est pas seulement visible, mais aussi récupérable via le code—essentiel pour le traitement côté serveur. + +## Conclusion + +Vous savez maintenant comment **create pdf form field** en C# du début à la fin. Le tutoriel a couvert le chargement d’un PDF, la configuration d’un `TextBoxField`, l’ajout d’une annotation widget, l’enregistrement du champ, et la sauvegarde du résultat. Avec ces blocs de construction, vous pouvez **add text box to pdf** des documents, **modify pdf to include text box**, et étendre l’approche à d’autres types de champs tels que les cases à cocher, les boutons radio ou les listes déroulantes. + +Ensuite, explorez des sujets connexes comme **extraction des données de formulaire**, **aplatir les formulaires PDF**, ou **styliser les champs avec des bordures et des couleurs**. Chacun de ces concepts s’appuie sur la même API de base que vous venez de maîtriser, vous permettant de créer des PDF interactifs sophistiqués entièrement en C#. + +Bon codage, et n’hésitez pas à expérimenter avec différents rectangles, polices et règles de validation pour répondre aux besoins de votre application ! + +## 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 é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. + +- [Créer un document PDF avec Aspose – Ajouter une page, une zone de texte et un formulaire](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Comment créer un PDF avec Aspose – Ajouter un champ de formulaire et des pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Comment ajouter un tampon texte à un PDF avec Aspose.PDF .NET : Guide complet](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/programming-with-operators/_index.md b/pdf/french/net/programming-with-operators/_index.md index 3b71167812..6b3f577fa2 100644 --- a/pdf/french/net/programming-with-operators/_index.md +++ b/pdf/french/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Les tutoriels « Programmation avec opérateurs » d'Aspose.PDF pour .NET vous | [Dessiner XForm sur la page](./draw-xform-on-page/) | Apprenez à dessiner des XForms au format PDF à l'aide d'Aspose.PDF pour .NET avec ce guide complet étape par étape. | | [Opérateurs PDF](./pdf-operators/) | Guide étape par étape pour utiliser les opérateurs PDF avec Aspose.PDF pour .NET. Ajoutez une image à une page PDF et spécifiez sa position. | | [Supprimer les objets graphiques dans un fichier PDF](./remove-graphics-objects/) Découvrez comment supprimer des objets graphiques d'un fichier PDF avec Aspose.PDF pour .NET dans ce guide étape par étape. Simplifiez vos manipulations PDF. | +| [Créer un dictionnaire PDF vide en C# avec Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Apprenez à créer un dictionnaire PDF vide en C# avec Aspose.Pdf. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/french/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..8650a60d80 --- /dev/null +++ b/pdf/french/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Créer un dictionnaire PDF vide en C# avec Aspose.Pdf – apprenez à ajouter + un état graphique à la collection ExtGState et à modifier les PDF de façon programmatique. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: fr +lastmod: 2026-08-14 +og_description: Créer un dictionnaire PDF vide en C# avec Aspose.Pdf. Suivez ce guide + complet pour ajouter un état graphique personnalisé à la collection ExtGState d’un + PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Créer un dictionnaire PDF vide en C# – Guide pas à pas Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Créer un dictionnaire PDF vide en C# avec Aspose.Pdf +url: /fr/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Créer un dictionnaire PDF vide en C# avec Aspose.Pdf + +Si vous devez **créer des dictionnaires PDF vides** lors de la manipulation de fichiers PDF, ce guide vous montre exactement comment le faire en C# en utilisant la bibliothèque Aspose.Pdf. Que vous construisiez un état graphique personnalisé, ajoutiez une nouvelle ressource ou prépariez un modèle pour une utilisation ultérieure, les étapes ci‑dessous vous offrent une solution complète et exécutable. + +Vous apprendrez comment charger un PDF, accéder au dictionnaire des ressources de la première page, créer un tout nouveau `CosPdfDictionary` et l’insérer dans la collection `ExtGState`. À la fin du tutoriel, vous disposerez d’un fichier `output.pdf` fonctionnel contenant le dictionnaire nouvellement créé. + +## Prérequis + +Avant de commencer, assurez‑vous d’avoir : + +- .NET 6.0 ou supérieur (le code fonctionne également avec .NET Framework 4.6+) +- Visual Studio 2022 ou tout autre IDE C# de votre choix +- Une licence Aspose.Pdf for .NET (ou une clé d’évaluation temporaire) +- Un PDF d’exemple nommé **input.pdf** placé dans un dossier que vous contrôlez (le chemin du dossier sera utilisé comme `dataDir`) + +Aucun package NuGet supplémentaire n’est requis au‑delà de `Aspose.Pdf`. + +## Étape 1 : Configurer le projet et référencer Aspose.Pdf + +1. Créez un nouveau projet **Console App** dans Visual Studio. +2. Ouvrez le **Gestionnaire de packages NuGet** et installez `Aspose.Pdf` : + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Ajoutez les directives `using` suivantes en haut de `Program.cs` : + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Pourquoi ces espaces de noms ?* `Aspose.Pdf` contient la classe principale `Document`, tandis que `Aspose.Pdf.Operators.Gfx` fournit `CosPdfDictionary`, `CosPdfNumber` et d’autres objets PDF de bas niveau nécessaires pour **créer des dictionnaires PDF vides**. + +## Étape 2 : Charger le PDF source + +La première opération consiste à charger le fichier PDF existant dans une instance `Document`. Cela vous donne accès à toutes les pages, ressources et dictionnaires de bas niveau. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Explication* : `Document` lit le fichier en mémoire et prépare les structures internes. L’instruction `using` garantit que le handle du fichier est libéré après le traitement. + +## Étape 3 : Accéder au dictionnaire des ressources de la première page + +Chaque page PDF possède un dictionnaire **Resources** qui regroupe polices, images, objets ExtGState et autres ressources partagées. Pour insérer un nouvel état graphique, nous devons modifier ce dictionnaire. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` est une classe d’aide qui vous permet de traiter un dictionnaire PDF comme un `Dictionary` en C#. + +## Étape 4 : Récupérer (ou créer) la collection ExtGState + +`ExtGState` contient les objets d’état graphique tels que l’opacité, le mode de fusion et l’épaisseur de trait. Si le PDF source possède déjà une entrée `ExtGState`, nous la réutilisons ; sinon nous créons un nouveau dictionnaire vide. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Pourquoi cette vérification ?* Certains PDF omettent complètement l’entrée `ExtGState`. En gérant les deux cas, le tutoriel reste robuste quel que soit le fichier d’entrée. + +## Étape 5 : **Créer un dictionnaire PDF vide** pour un nouvel état graphique + +Nous allons maintenant **créer des dictionnaires PDF vides** qui définissent les paramètres de l’état graphique. Le dictionnaire commence vide, puis nous y ajoutons les clés requises : + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Ce que fait chaque entrée + +| Clé | Type | Signification | +|-----|------|----------------| +| **CA** | `CosPdfNumber` | Opacité du trait (plage 0‑1). | +| **ca** | `CosPdfNumber` | Opacité du remplissage (plage 0‑1). | +| **BM** | `CosPdfName` | Mode de fusion ; `"Normal"` est le plus courant. | + +Comme nous avons commencé avec un **dictionnaire PDF vide**, nous contrôlons entièrement les entrées ajoutées. Vous pouvez étendre ce dictionnaire avec d’autres paramètres d’état graphique tels que `LW` (épaisseur de trait) ou `LC` (extrémité de trait) selon vos besoins. + +## Étape 6 : Insérer le nouvel état graphique dans ExtGState + +Le dictionnaire `ExtGState` fonctionne comme une table de correspondance où chaque entrée est identifiée par un nom (par ex., `GS0`, `GS1`). Nous ajoutons notre dictionnaire fraîchement construit sous une clé unique. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Si vous prévoyez d’ajouter plusieurs états, incrémentez le suffixe (`GS1`, `GS2`, …) afin d’éviter les collisions de noms. + +## Étape 7 : Enregistrer le PDF modifié + +Enfin, écrivez les modifications sur le disque. La méthode `Save` sérialise automatiquement les dictionnaires mis à jour. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Ouvrez `output.pdf` dans n’importe quel lecteur PDF et inspectez l’entrée **Resources → ExtGState** (la plupart des lecteurs la masquent, mais des outils comme Adobe Acrobat Preflight ou PDF‑Tron peuvent la révéler). Vous devriez voir une entrée `GS0` contenant les valeurs d’opacité et de mode de fusion que vous avez définies. + +## Exemple complet fonctionnel + +En rassemblant tous les éléments, voici le programme complet que vous pouvez copier‑coller dans `Program.cs` et exécuter : + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Résultat attendu** – La console affiche une ligne de confirmation, et `output.pdf` contient la nouvelle entrée `GS0` sous `ExtGState`. Lorsque vous rendez une page qui référence `GS0` (par ex., via l’opérateur de flux de contenu `gs`), les traits seront totalement opaques tandis que les remplissages seront à 50 % de transparence. + +## Questions fréquentes et gestion des cas limites + +| Question | Réponse | +|----------|---------| +| *Et si le PDF comporte plusieurs pages ?* | L’exemple cible la première page (`Pages[1]`). Pour affecter toutes les pages, parcourez `pdfDocument.Pages` et répétez les étapes 3‑5 pour les ressources de chaque page. | +| *Puis‑je ajouter le dictionnaire à une page qui possède déjà une entrée ExtGState nommée « GS0 » ?* | Oui, mais vous devez utiliser une clé différente (`GS1`, `GS2`, …) afin de ne pas écraser l’entrée existante. | +| *Est‑il sûr de modifier le dictionnaire après l’enregistrement ?* | Une fois que vous appelez `Save`, la représentation en mémoire est détachée du fichier. Vous pouvez continuer à modifier l’objet `Document` et appeler à nouveau `Save` si nécessaire. | +| *Ai‑je besoin d’une licence pour Aspose.Pdf afin d’utiliser ` | | + +## 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 des fonctionnalités API supplémentaires et explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment créer des lignes pointillées dans les PDF avec Aspose.PDF pour .NET : guide étape par étape](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Comment supprimer des graphiques des PDF avec Aspose.PDF .NET : guide complet](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Comment créer des PDF multi‑couches avec Aspose.PDF pour .NET : guide complet](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/programming-with-security-and-signatures/_index.md b/pdf/french/net/programming-with-security-and-signatures/_index.md index e0b01d8bf6..8e52151f05 100644 --- a/pdf/french/net/programming-with-security-and-signatures/_index.md +++ b/pdf/french/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Ce tutoriel vous offre un aperçu détaillé des méthodes et techniques permett | [Vérifier les signatures PDF en C# – Lire les fichiers PDF signés](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Apprenez à lire et analyser les signatures numériques des PDF avec Aspose.PDF pour .NET en C#. | | [Comment réparer les fichiers PDF – Guide complet C# avec Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Apprenez à réparer les fichiers PDF corrompus avec Aspose.PDF pour .NET en suivant ce guide complet étape par étape en C#. | | [Vérifier la signature PDF en C# – Guide complet de programmation](./verify-pdf-signature-in-c-complete-programming-guide/) | Apprenez à vérifier les signatures PDF en C# avec Aspose.PDF, étape par étape, pour garantir l'authenticité de vos documents. | +| [Créer des options de signature en C# – guide complet de la signature numérique](./create-signature-options-in-c-full-guide-to-digital-signing/) | Apprenez à créer et configurer des options de signature numérique en C# avec Aspose.PDF, étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/french/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..6ed39154e2 --- /dev/null +++ b/pdf/french/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-08-14 +description: Créer des options de signature en C# pour appliquer une signature numérique. + Apprenez comment configurer la signature, implémenter une fonction de hachage personnalisée + et signer des documents de façon programmatique. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: fr +lastmod: 2026-08-14 +og_description: Créez des options de signature en C# et appliquez une signature numérique. + Ce tutoriel vous guide à travers la configuration de la signature, l’ajout d’une + fonction de hachage personnalisée et la signature d’un document. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Créer des options de signature en C# – guide de signature numérique étape + par étape +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Créer des options de signature en C# – guide complet de la signature numérique +url: /fr/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Créer des options de signature en C# – guide complet de la signature numérique + +Créer des options de signature en C# pour configurer un flux de travail de signature numérique. Ce tutoriel montre comment appliquer une signature numérique, implémenter une fonction de hachage personnalisée et signer un document en utilisant la classe `SignatureOptions`. Si vous avez déjà eu besoin de signer un PDF, un XML ou toute charge binaire depuis une application .NET, les étapes ci‑dessous vous offrent une solution prête à l’emploi. + +Vous apprendrez à : + +* configurer `SignatureOptions` avec un algorithme de hachage personnalisé, +* appeler correctement la méthode de signature, +* vérifier que la signature a été appliquée, +* éviter les pièges courants lors de la configuration de la signature. + +Les seules prérequis sont un SDK .NET récent (≥ .NET 6) et une bibliothèque de signature qui expose `SignatureOptions` (par exemple, **GroupDocs.Signature**, **Aspose.Signature**, ou une API similaire). Aucun outil externe n’est requis. + +--- + +## Prérequis + +| Exigence | Pourquoi c’est important | +|----------|---------------------------| +| .NET 6 SDK ou version ultérieure | Fournit les fonctionnalités modernes du langage utilisées dans les exemples. | +| Un package NuGet de bibliothèque de signature (p. ex., `GroupDocs.Signature`) | Fournit le type `SignatureOptions` et la méthode d’extension `Sign`. | +| Accès à une clé privée ou à un certificat | Nécessaire pour générer une signature numérique vérifiable. | + +Installez la bibliothèque avec la CLI standard : + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Étape 1 : Créer des options de signature + +La première étape consiste à instancier `SignatureOptions` et à définir les propriétés qui contrôlent le processus de signature. Cet objet indique à la bibliothèque *quoi* signer et *comment* le signer. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Pourquoi c’est important :** `SignatureOptions` agit comme un contrat entre votre code et le moteur de signature. En le configurant dès le départ, vous évitez de répéter du code boilerplate lors de la signature de plusieurs documents. + +--- + +## Étape 2 : Implémenter une fonction de hachage personnalisée + +Une *fonction de hachage personnalisée* vous donne un contrôle total sur le condensat que l’algorithme de signature signe. Cela est utile lorsque le hachage par défaut (SHA‑256) ne répond pas aux exigences de conformité ou lorsque vous devez hacher une sous‑partie du document. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Pourquoi c’est important :** En assignant `CustomSignHash`, vous remplacez l’étape de hachage interne de la bibliothèque par `MyHash`. Le moteur de signature signera désormais les octets retournés par votre fonction, garantissant la conformité à toute politique personnalisée. + +--- + +## Étape 3 : Charger le document et appliquer la signature numérique + +Avec les options prêtes, vous pouvez maintenant ouvrir le fichier cible et appeler la méthode de signature. La méthode `Sign` est fournie par la bibliothèque et utilise les `SignatureOptions` configurées. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Pourquoi c’est important :** L’appel à `Sign` effectue trois actions en interne : + +1. **Calcul du hachage** – désormais délégué à votre fonction de hachage personnalisée. +2. **Génération de la signature** – en utilisant la clé privée fournie à la configuration de la bibliothèque. +3. **Intégration** – la signature générée est attachée au fichier de sortie. + +Si une étape échoue, la méthode renvoie `false`, vous permettant de gérer l’erreur de manière élégante. + +--- + +## Étape 4 : Vérifier que le document est signé + +Une vérification rapide confirme que la signature a été correctement appliquée. La plupart des bibliothèques exposent une méthode `Verify` qui contrôle l’intégrité du fichier signé. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Pourquoi c’est important :** La vérification garantit que le document signé n’a pas été altéré après la signature et que le hachage personnalisé a produit un condensat compatible. + +--- + +## Comment configurer la signature pour différents types de fichiers + +Le même objet `SignatureOptions` peut être réutilisé pour les PDF, les documents Word, les images ou les binaires simples. Le seul changement requis est la classe d’options spécifique (p. ex., `PdfSignatureOptions`, `WordSignatureOptions`). Voici un exemple rapide pour une image JPEG : + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Pourquoi c’est important :** Comprendre comment *configurer la signature* pour chaque format vous permet d’étendre la même base de code à plusieurs types de documents sans réécrire la logique de hachage. + +--- + +## Pièges courants et bonnes pratiques + +| Piège | Solution recommandée | +|-------|----------------------| +| Oublier de définir `CustomSignHash` après la création de `SignatureOptions` | Assignez le délégué immédiatement après la construction de l’objet d’options. | +| Utiliser un algorithme de hachage que le certificat de signature ne supporte pas | Vérifiez que l’usage de la clé du certificat correspond à la longueur du hachage (p. ex., RSA‑2048 avec SHA‑512). | +| Négliger la nécessité de libérer les objets `Signature` | Encapsulez l’instance `Signature` dans un bloc `using` pour libérer les poignées de fichiers. | +| Sauvegarder le fichier signé en écrasant la source originale | Écrivez toujours vers un nouveau chemin de fichier (`outputPath`) pour préserver le document d’origine. | + +--- + +## Exemple complet fonctionnel + +Voici un programme autonome qui assemble toutes les pièces. Copiez‑le dans un nouveau projet console et exécutez‑le ; la console indiquera le succès ou l’échec. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Sortie attendue** + +``` +Signature verified successfully. +``` + +Si la console affiche « Signing failed. » ou « Signature verification failed. », revérifiez la configuration du certificat et assurez‑vous que le hachage personnalisé renvoie un tableau d’octets de la taille attendue. + +--- + +## Conclusion + +Vous savez maintenant comment **créer des options de signature** en C#, attacher une **fonction de hachage personnalisée**, et **appliquer une signature numérique** à tout document pris en charge. Le tutoriel a couvert le cycle complet : configuration des options, signature du fichier, et vérification du résultat. En réutilisant la même instance `SignatureOptions`, vous pouvez également **configurer la signature** pour des images, des fichiers Word ou des binaires bruts. + +--- + +## Prochaines étapes + +* Explorer les propriétés supplémentaires de `SignatureOptions` telles que les tampons visuels, les serveurs d’horodatage et les chaînes de certificats – elles correspondent au mot‑clé **apply digital signature**. +* Expérimenter d’autres algorithmes de hachage (par ex., Blake2b) en remplaçant l’implémentation dans `MyHash`. +* Intégrer le flux de signature dans une API web pour permettre la signature de documents à la volée – une extension naturelle de **how to sign document** dans une architecture orientée services. + +N’hésitez pas à adapter le code à vos propres politiques de sécurité, et partagez votre expérience dans les commentaires. Bonne signature ! + +## 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 pas à pas pour vous aider à maîtriser des fonctionnalités API supplémentaires et explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment changer la langue de la signature PDF avec Aspose.PDF pour .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Tutoriel de signature numérique Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutoriel de signature numérique Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/programming-with-stamps-and-watermarks/_index.md b/pdf/french/net/programming-with-stamps-and-watermarks/_index.md index 1e25380e69..679f02d460 100644 --- a/pdf/french/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/french/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Les tutoriels « Programmation avec tampons et filigranes » d'Aspose.PDF pour | [Texte dans le pied de page du fichier PDF](./text-in-footer/) | Apprenez à ajouter du texte dans le pied de page d'un fichier PDF avec Aspose.PDF pour .NET. | | [Texte dans l'en-tête du fichier PDF](./text-in-header/) | Apprenez à ajouter des en-têtes de texte à vos PDF avec Aspose.PDF pour .NET grâce à ce tutoriel étape par étape. Améliorez vos documents efficacement. | | [Ajouter une numérotation Bates PDF en C# – Guide complet](./add-bates-numbering-pdf-in-c-complete-guide/) | Apprenez à ajouter une numérotation Bates à vos fichiers PDF avec Aspose.PDF pour .NET en suivant ce guide complet étape par étape. | +| [Comment définir les options de numérotation Bates en C# – guide complet](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Apprenez à configurer les options de numérotation Bates dans vos PDF avec Aspose.PDF pour .NET en C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/french/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..70e89db594 --- /dev/null +++ b/pdf/french/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-08-14 +description: Comment définir les options de numérotation Bates en C# avec GroupDocs. + Suivez ce tutoriel étape par étape pour ajouter des préfixes personnalisés et des + numéros de départ lors de la conversion de Word en PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: fr +lastmod: 2026-08-14 +og_description: Comment configurer rapidement les options de numérotation Bates en + C#. Ce guide vous montre comment ajouter des préfixes personnalisés et des numéros + de départ lors de la conversion de Word en PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Comment configurer les options de numérotation Bates en C# – tutoriel étape + par étape +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Comment configurer les options de numérotation Bates en C# – guide complet +url: /fr/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment définir les options de numérotation Bates en C# – guide complet + +Si vous avez besoin de **how to set bates numbering options** en C#, ce guide vous accompagne pas à pas. Vous apprendrez à configurer le numéro de départ, ajouter un préfixe et appliquer la numérotation lors de la conversion d’un document Word en PDF à l’aide de l’API GroupDocs. + +Le traitement de documents nécessite souvent des identifiants uniques sur chaque page à des fins juridiques ou d’archivage. À la fin de ce tutoriel, vous disposerez d’un extrait réutilisable que vous pourrez intégrer à n’importe quel projet .NET, que vous développiez un outil d’assistance juridique ou un générateur de rapports automatisé. Aucun outil externe n’est requis — seulement la bibliothèque GroupDocs.Conversion et quelques lignes de C#. + +## Ce dont vous avez besoin + +* .NET 6.0 SDK ou version ultérieure installé +* Visual Studio 2022 (ou tout IDE supportant .NET) +* Une licence valide GroupDocs.Conversion (l’essai gratuit fonctionne pour les tests) +* Un document Word d’exemple (`input.docx`) que vous souhaitez numéroter + +Ces prérequis garantissent que le code s’exécute sans configuration supplémentaire. + +## Comment définir les options de numérotation Bates – aperçu + +Le cœur de **how to set bates numbering options** repose sur trois objets : + +1. `Document` – charge le fichier source. +2. `BatesNumberingOptions` – contient le numéro de départ, le préfixe et d’autres détails de formatage. +3. `AddBatesNumbering` – la méthode qui injecte la numérotation dans chaque page. + +Comprendre pourquoi chaque élément existe vous aide à adapter la solution à des scénarios plus complexes, comme des polices personnalisées ou une numérotation multilingue. + +## Étape 1 : Installer le package NuGet GroupDocs.Conversion + +Ouvrez un terminal dans le dossier de votre solution et exécutez : + +```bash +dotnet add package GroupDocs.Conversion +``` + +L’**API GroupDocs** fournit la classe `Document` et la méthode d’extension `AddBatesNumbering` utilisée plus tard dans le tutoriel. + +## Étape 2 : Charger le document source + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Pourquoi cette étape ?* +Le chargement du fichier crée une représentation en mémoire que le moteur de conversion peut manipuler. Sans instance de `Document`, vous ne pouvez pas appliquer la numérotation Bates ni aucune autre transformation. + +## Étape 3 : Créer les options de numérotation Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Pourquoi cette étape ?* +`BatesNumberingOptions` encapsule tous les paramètres dont vous pourriez avoir besoin lors de **setting bates numbering options**. Ajuster `StartNumber` et `Prefix` vous permet d’aligner la sortie avec votre système de gestion de dossiers. La propriété `Position` contrôle le placement visuel, ce qui est souvent une exigence de conformité. + +## Étape 4 : Appliquer la numérotation Bates au document + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +La méthode `AddBatesNumbering` parcourt chaque page du `Document` chargé et insère la chaîne configurée. Comme la méthode agit sur la représentation en mémoire, vous pouvez chaîner des étapes de traitement supplémentaires (par ex., filigrane) avant l’enregistrement. + +## Étape 5 : Convertir et enregistrer le résultat au format PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Pourquoi cette étape ?* +Enregistrer en PDF est un format final courant pour les documents juridiques. L’objet `PdfConvertOptions` vous permet d’ajuster finement la sortie, mais il n’est pas requis pour une numérotation de base. L’appel `Save` écrit le PDF entièrement numéroté sur le disque. + +## Exemple complet et exécutable + +En rassemblant tous les éléments, voici une application console autonome que vous pouvez compiler et exécuter : + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Sortie attendue** + +L’exécution du programme crée `output.pdf` où chaque page affiche une étiquette telle que `CASE-1000`, `CASE-1001`, etc., positionnée dans le pied de page droit. Ouvrez le PDF dans n’importe quel lecteur pour vérifier que les numéros apparaissent comme prévu. + +## Pièges courants et bonnes pratiques + +| Problème | Pourquoi cela se produit | Comment l’éviter | +|----------|--------------------------|------------------| +| **Les chemins relatifs provoquent `FileNotFoundException`** | Le répertoire de travail d’une application console peut différer de celui de Visual Studio. | Utilisez des chemins absolus ou `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **La numérotation chevauche les pieds de page existants** | Si le document source contient déjà du contenu dans la zone de pied de page choisie, le nouveau numéro peut être masqué. | Choisissez une autre `Position` (par ex., `HeaderLeft`) ou ajustez le modèle source. | +| **Les gros documents sont lents** | La numérotation Bates parcourt chaque page ; l’utilisation de la mémoire augmente avec la taille du fichier. | Traitez le document par morceaux en utilisant `Document.Split` si vous dépassez 500 pages. | +| **Expiration de la licence** | L’essai gratuit de GroupDocs expire après 30 jours, provoquant une exception sur `AddBatesNumbering`. | Appliquez une clé de licence valide avant de charger le document : `License license = new License(); license.SetLicense("license.lic");`. | + +**Astuce :** Si vous avez besoin d’un format de numéro différent par dossier (par ex., `2023-CASE-001`), construisez le préfixe dynamiquement avant de créer `BatesNumberingOptions`. + +## Étendre la solution + +La même approche **Bates numbering C#** fonctionne avec d’autres formats source tels que `.txt`, `.html` ou même des images. Il suffit de changer l’extension du fichier lors de la construction de l’objet `Document`, et le moteur de conversion se chargera du reste. + +Vous pouvez également combiner **document conversion C#** avec l’OCR pour les PDF numérisés : + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusion + +Vous savez maintenant **how to set bates numbering options** en C# du début à la fin. En créant un objet `BatesNumberingOptions`, en l’appliquant avec `AddBatesNumbering` et en enregistrant le résultat au format PDF, vous pouvez automatiser la production de documents légalement conformes et identifiés de façon unique. + +À partir de là, vous pouvez explorer des sujets connexes tels que **C# PDF generation**, **document conversion C#**, ou les fonctionnalités avancées de l’**API GroupDocs** comme le filigrane et les signatures numériques. Expérimentez différents préfixes, positions et formats de numéros pour adapter à votre flux de travail. + +Bon codage ! + +## 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. + +- [Ajouter la numérotation Bates PDF en C# – Guide complet](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Comment ajouter et personnaliser les numéros de page dans les PDF avec Aspose.PDF pour .NET | Guide de manipulation de documents](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Comment ajouter un pied de page de tampon texte dans les PDF avec Aspose.PDF pour .NET: Guide étape par étape](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/annotations/_index.md b/pdf/german/net/annotations/_index.md index 3063db4f94..f793882133 100644 --- a/pdf/german/net/annotations/_index.md +++ b/pdf/german/net/annotations/_index.md @@ -35,6 +35,7 @@ Eine umfassende Sammlung von Tutorials zeigt, wie Sie mit Aspose.PDF für .NET m | [Festlegen der Formatierung für freie Textanmerkungen](./setfreetextannotationformatting/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET die Formatierung von Freitextanmerkungen in PDF-Dokumenten festlegen. | | [Wörter durchstreichen](./strikeoutwords/) | Erfahren Sie in dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET Wörter in einer PDF-Datei durchstreichen. Verbessern Sie Ihre Fähigkeiten zur Dokumentbearbeitung. | | [Freitext-PDF-Anmerkungen aktualisieren](./updatefreetextannotation/) Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET Freitextanmerkungen in PDF-Dokumenten aktualisieren. | +| [Rechteck im PDF zeichnen – Schritt‑für‑Schritt‑C#‑Leitfaden](./draw-rectangle-on-pdf-step-by-step-c-guide/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET ein Rechteck in ein PDF einfügen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/german/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..706a75d91b --- /dev/null +++ b/pdf/german/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Zeichnen Sie schnell ein Rechteck in ein PDF mit C#. Erfahren Sie, wie + Sie Rechtecksmaße definieren und Formen zu einer PDF‑Seite in nur wenigen Zeilen + hinzufügen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: de +lastmod: 2026-08-14 +og_description: Rechteck in PDF mit C# in Sekunden zeichnen. Dieser Leitfaden zeigt, + wie man Rechteckabmessungen definiert, eine Form hinzufügt und Seitenränder überprüft, + um zuverlässige PDF‑Grafiken zu erstellen. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Rechteck auf PDF zeichnen – vollständiges C#‑Tutorial +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Rechteck in PDF zeichnen – Schritt‑für‑Schritt C#‑Leitfaden +url: /de/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Rechteck auf PDF zeichnen – vollständiges C#‑Tutorial + +Wenn Sie **ein Rechteck auf PDF** mit C# zeichnen möchten, zeigt Ihnen dieser Leitfaden eine kompakte, produktionsreife Lösung. Sie sehen genau **wie man Rechteck‑Abmessungen definiert**, prüft, ob die Form passt, und fügt sie mit einem einzigen Methodenaufruf einer Seite hinzu. + +Das Tutorial deckt alles ab, vom Erstellen eines PDF‑Dokuments bis zum Rendern des Rechtecks, sodass Sie den Code einfach in Ihr Projekt kopieren und sofort Ergebnisse sehen können. Keine externe Dokumentation nötig – nur die nachfolgenden Schritte. + +## 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+) +* Das **Aspose.PDF for .NET** NuGet‑Paket (`Install-Package Aspose.PDF`) +* Grundlegende Kenntnisse der C#‑Syntax +* Eine IDE wie Visual Studio oder VS Code + +> **Pro‑Tipp:** Nutzen Sie die kostenlose Evaluierungslizenz von Aspose.PDF für schnelle Experimente; sie fügt ein kleines Wasserzeichen hinzu, lässt Sie aber alle Funktionen testen. + +## Wie man ein Rechteck auf PDF mit C# zeichnet + +Der Kern der Aufgabe besteht darin, ein `RectangleShape` zu erstellen, seine Größe und Kontur zu setzen und es an eine `Page` anzuhängen. Die folgende H2‑Überschrift enthält das Haupt‑Keyword und erfüllt damit die SEO‑Anforderungen. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Erklärung jedes Schrittes + +| Schritt | Warum das wichtig ist | +|------|----------------| +| **1️⃣ Neues PDF‑Dokument erstellen** | Initialisiert den Container, der Seiten und Grafiken hält. | +| **2️⃣ Leere Seite hinzufügen** | Sie benötigen ein `Page`‑Objekt, weil Formen an eine Seite, nicht direkt an das Dokument, angehängt werden. | +| **3️⃣ Rechteckgrenzen definieren** | Hier erfahren Sie **wie man Rechteck‑Abmessungen definiert**. Der `Rectangle`‑Konstruktor nimmt `x`, `y`, `width` und `height` in Punkten (1 pt = 1/72 in). | +| **4️⃣ Rechteckform erstellen** | `RectangleShape` ist die Aspose‑Klasse, die ein Rechteck rendert. Das Setzen von `StrokeColor` definiert die Kontur; Sie können auch `FillColor` für eine Füllung setzen. | +| **5️⃣ Seitenränder prüfen** | `CheckShapeBoundary` wirft eine Ausnahme, wenn das Rechteck die Seitengröße überschreitet, und verhindert fehlerhafte PDFs. | +| **6️⃣ Form zur Seite hinzufügen** | Die Form wird Teil des Inhaltsstroms der Seite. | +| **7️⃣ PDF speichern** | Persistiert das Dokument in einer Datei, die Sie mit jedem PDF‑Betrachter öffnen können. | + +Das resultierende `RectangleDemo.pdf` enthält ein schwarzes Rechteck, das in der oberen linken Ecke der Seite positioniert ist und exakt 500 pt breit sowie 700 pt hoch ist. + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*Bild‑Alt‑Text: draw rectangle on pdf example zeigt ein schwarzes Rechteck in der oberen linken Ecke einer PDF‑Seite.* + +## Wie man Rechteck‑Abmessungen für verschiedene Seitengrößen definiert + +Das obige Snippet verwendet feste Werte (`500 x 700`). In realen Anwendungen muss das Rechteck häufig an die Breite und Höhe der Seite angepasst werden. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Wichtige Punkte:** + +* Verwenden Sie `page.PageInfo.Width` und `Height`, um die tatsächliche Seitengröße zu lesen. +* Durch Multiplikation mit einem Faktor (z. B. `0.8f`) können Sie Abmessungen als Prozentsatz der Seite ausdrücken. +* Das Zentrieren erfolgt, indem Sie die Rechteckgröße von der Seitengröße subtrahieren und den Rest halbieren. + +## Häufige Stolperfallen und wie man sie vermeidet + +| Stolperfalle | Warum sie auftritt | Lösung | +|---------|----------------|-----| +| Rechteck reicht über die Seite hinaus | Fest codierte Abmessungen, die größer sind als die Seitengröße. | Rufen Sie `page.CheckShapeBoundary` **vor** dem Hinzufügen der Form auf; passen Sie die Abmessungen an, wenn eine Ausnahme geworfen wird. | +| Kontur nicht sichtbar | `StrokeColor` bleibt beim Standard (`Color.Empty`). | Setzen Sie `StrokeColor` explizit (z. B. `Color.Black`). | +| Rechteck erscheint außerhalb des Bildschirms | Koordinaten beginnen im PDF‑Raum unten links; die Verwendung von Bildschirm‑Koordinaten (oben links) führt zu einer Umkehr. | Denken Sie daran, dass der Ursprung `(0,0)` die linke untere Ecke ist. Passen Sie `y` entsprechend an oder verwenden Sie `pageHeight - desiredY`. | +| Unerwartete Linienstärke | Die Standard‑Linienbreite kann für den Druck zu dünn sein. | Setzen Sie `rectangleShape.LineWidth = 2;`, um die Stärke zu erhöhen. | + +## Erweiterung des Beispiels + +Sobald Sie **ein Rechteck auf PDF** zeichnen können, lassen sich leicht weitere Formen hinzufügen: + +* **EllipseShape** – für Kreise oder Ovale. +* **PolygonShape** – für benutzerdefinierte Polygone. +* **TextFragment** – um Ihre Rechtecke zu beschriften. + +Alle Formen folgen demselben Ablauf: Grenzen definieren, Aussehen konfigurieren, Grenzen prüfen und dann zur Seite hinzufügen. + +## Komplettes, ausführbares Programm + +Unten finden Sie das vollständige Programm, das das einfache Rechteck‑Beispiel und das dynamische Größen‑Beispiel kombiniert. Kopieren Sie es in ein neues Konsolen‑Projekt, stellen Sie das `Aspose.PDF`‑NuGet‑Paket wieder her und führen Sie es aus. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Erwartete Ausgabe:** +Öffnen Sie `CombinedRectangles.pdf`. Sie sehen ein schwarzes Rechteck, das an der unteren linken Ecke verankert ist, sowie ein zentriertes dunkelblaues Rechteck mit einer hellgelben Füllung. Beide Rechtecke respektieren die Seitenränder. + +## Fazit + +Sie wissen jetzt, wie man **ein Rechteck auf PDF** mit C# zeichnet und genau **wie man Rechteck‑Abmessungen** für feste und responsive Layouts definiert. Der Ansatz nutzt Aspose.PDFs `RectangleShape`, die Grenzprüfung und einfache Mathematik, um sich an jede Seitengröße anzupassen. + +Als Nächstes könnten Sie folgendes erkunden: + +* Hinzufügen von **Füllfarben** und **Linienstilen** (gestrichelt, gepunktet) – sekundäres Keyword: how to define rectangle dimensions with style. +* Kombinieren mehrerer Formen zu einer einzigen `Page`, um Diagramme oder Formulare zu erstellen. +* Exportieren des PDFs in einen Stream für Web‑APIs anstatt in eine Datei zu speichern. + +Experimentieren Sie mit verschiedenen Größen, Farben und Positionen, um PDF‑Grafiken in Ihren .NET‑Anwendungen zu meistern. 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 beherrschen und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [How to Customize PDFs with Aspose.PDF for .NET: Set Page Margins and Draw Lines](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [How to Add Page Number Stamps in PDFs Using Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/conversion-export/_index.md b/pdf/german/net/conversion-export/_index.md index c3cda0300c..8f5a40a488 100644 --- a/pdf/german/net/conversion-export/_index.md +++ b/pdf/german/net/conversion-export/_index.md @@ -228,7 +228,8 @@ Ein Code-Tutorial für Aspose.PDF Net Erfahren Sie, wie Sie PDF-Dokumente mit Aspose.PDF für .NET in TIFF-Bilder konvertieren. Beherrschen Sie benutzerdefinierte Farbtiefen und erweiterte Bildverarbeitungstechniken. ### [Wie man PDF mit Aspose speichert – Schritt‑für‑Schritt‑Anleitung](./how-to-save-pdf-with-aspose-step-by-step-guide/) -Erfahren Sie, wie Sie PDFs mithilfe von Aspose in .NET speichern, inklusive Codebeispielen und bewährten Methoden. + +### [PDF als HTML speichern und in PDF/X‑4 konvertieren mit Aspose.PDF in C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) ## Weitere Ressourcen diff --git a/pdf/german/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/german/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..9cf3046e30 --- /dev/null +++ b/pdf/german/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Speichern Sie PDF als HTML und konvertieren Sie PDF zu PDF/X‑4 mit Aspose.PDF + für C#. Der Schritt‑für‑Schritt‑Code zeigt den HTML‑Export, die Auflistung von Signaturen + und die Bearbeitung des Grafik‑Zustands. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: de +lastmod: 2026-08-14 +og_description: Speichern Sie PDF als HTML und konvertieren Sie PDF zu PDF/X‑4 mit + Aspose.PDF für C#. Folgen Sie dieser umfassenden Anleitung, um HTML zu exportieren, + Signaturen aufzulisten und Grafikzustände zu bearbeiten. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: PDF als HTML speichern und in PDF/X‑4 konvertieren mit Aspose.PDF – C#‑Leitfaden +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: PDF als HTML speichern und in PDF/X‑4 konvertieren mit Aspose.PDF in C# +url: /de/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF als HTML speichern und in PDF/X‑4 konvertieren mit Aspose.PDF in C# + +Wenn Sie **PDF als HTML speichern** müssen, macht Aspose.Pdf den Vorgang unkompliziert. Dieses Tutorial zeigt außerdem, wie man **PDF in PDF/X‑4 konvertiert**, Signaturfelder auflistet und ein benutzerdefiniertes ExtGState hinzufügt, wodurch Sie einen vollständigen End‑zu‑End‑Workflow erhalten. + +Sie lernen, wie man: + +* Ein PDF in sauberes HTML exportiert und dabei Rasterbilder überspringt. +* Ein PDF‑Dokument in den PDF/X‑4‑Standard für druckfertige Ausgaben konvertiert. +* Alle Signaturfelder in einem PDF aufzählt. +* Einen benutzerdefinierten Grafik‑Zustand (ExtGState) auf der ersten Seite einfügt. + +Der gesamte Code läuft auf .NET 6 oder höher und erfordert das NuGet‑Paket **Aspose.Pdf for .NET**. + +## Voraussetzungen + +| Anforderung | Grund | +|-------------|-------| +| .NET 6 SDK oder neuer | Stellt die Laufzeit für das C#‑Beispiel bereit. | +| Visual Studio 2022 (oder jede C#‑IDE) | Ermöglicht einfaches Bearbeiten und Debuggen. | +| Aspose.Pdf for .NET (v23.12 oder später) | Liefert die Klassen `Document`, `PdfFormatConversionOptions` und `HtmlSaveOptions`, die im Tutorial verwendet werden. | +| Eine Beispiel‑PDF‑Datei (`sample.pdf`) | Das Quell‑Dokument, das verarbeitet wird. | + +Installieren Sie die Bibliothek mit: + +```bash +dotnet add package Aspose.Pdf +``` + +## Überblick über die Lösung + +Das Programm führt sechs logische Schritte aus: + +1. Laden des Quell‑PDFs. +2. Auflisten jedes Signaturfeld‑Namens. +3. **PDF in PDF/X‑4 konvertieren** und das Ergebnis speichern. +4. **PDF als HTML speichern**, dabei Rasterbilder überspringen. +5. Ein benutzerdefiniertes ExtGState (Grafik‑Zustand) zur ersten Seite hinzufügen. +6. Das modifizierte PDF mit dem neuen Grafik‑Zustand speichern. + +Jeder Schritt wird unten erklärt, inklusive vollständigem Code und der Begründung für die jeweiligen Entscheidungen. + +## Schritt 1: PDF‑Dokument laden + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Warum das wichtig ist*: `Document` repräsentiert die gesamte PDF‑Datei. Das einmalige Laden ermöglicht die Wiederverwendung desselben Objekts für alle nachfolgenden Vorgänge, wodurch I/O‑Overhead reduziert wird. + +## Schritt 2: Alle Signaturfeld‑Namen auflisten + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Warum das wichtig ist*: Das Wissen um die Signaturfeld‑Namen ist entscheidend, wenn Sie später digitale Signaturen validieren, entfernen oder ersetzen müssen. Die `Signatures`‑Sammlung liefert eine schnelle, schreibgeschützte Ansicht der Felder. + +## Schritt 3: PDF in PDF/X‑4 konvertieren + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Wichtige Punkte** + +* `PdfStandard.PdfX4` weist Aspose.Pdf an, alle erforderlichen Ressourcen (Schriften, Farbprofile) einzubetten und die PDF/X‑4‑Beschränkungen durchzusetzen. +* Die Konvertierung erfolgt im Speicher; nur die endgültige Datei wird auf die Festplatte geschrieben, was den Vorgang beschleunigt. + +> **Pro‑Tipp:** Überprüfen Sie die Ausgabe mit einem PDF/X‑4‑Validator (z. B. Adobe Preflight), falls Ihr nachgelagerter Workflow strenge Konformität erfordert. + +## Schritt 4: PDF als HTML speichern und Rasterbilder überspringen + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Warum Sie das wollen könnten**: HTML‑Ausgabe ist nützlich für Web‑Vorschauen oder Inhalts‑Indexierung. Das Überspringen von Rasterbildern (`SkipRasterImages = true`) hält das HTML leichtgewichtig und verbessert die Ladezeiten, besonders wenn das ursprüngliche PDF hochauflösende Scans enthält. + +## Schritt 5: Ein benutzerdefiniertes ExtGState zur ersten Seite hinzufügen + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Erläuterung*: Ein **ExtGState**‑Objekt steuert Transparenz, Mischmodus und andere Grafik‑Parameter. Durch das Hinzufügen von `GS0` können Sie diesen Zustand später in Inhalts‑Streams referenzieren (z. B. für halbtransparente Overlays). Der Code nutzt die Low‑Level‑COS‑API, weil Aspose.Pdf keinen High‑Level‑Wrapper für die Erstellung von ExtGState bereitstellt. + +## Schritt 6: Das modifizierte PDF mit dem neuen ExtGState speichern + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Die endgültige Datei (`sample_with_extgstate.pdf`) enthält: + +* Alle ursprünglichen Seiten und Inhalte. +* Eine konforme PDF/X‑4‑Version (`sample_pdfx4.pdf`). +* Eine HTML‑Darstellung ohne Rasterbilder (`sample.html`). +* Ein benutzerdefiniertes ExtGState (`GS0`), das den Ressourcen der ersten Seite zugeordnet ist. + +### Erwartete Konsolenausgabe + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Falls das Quell‑PDF keine Signaturen enthält, gibt die Schleife nichts aus, fährt aber ohne Fehler fort. + +## Häufige Varianten und Randfälle + +| Situation | Anpassung | +|-----------|-----------| +| **PDF enthält keine Seiten** | Prüfen Sie `doc.Pages.Count`, bevor Sie auf `doc.Pages[1]` zugreifen, um `IndexOutOfRangeException` zu vermeiden. | +| **Sie benötigen PDF/A‑2b statt PDF/X‑4** | Ändern Sie `PdfStandard.PdfX4` zu `PdfStandard.PdfA2b` in `PdfFormatConversionOptions`. | +| **Sie möchten Rasterbilder behalten** | Setzen Sie `SkipRasterImages = false` (oder lassen Sie die Eigenschaft weg) in `HtmlSaveOptions`. | +| **Mehrere ExtGState‑Objekte** | Verwenden Sie eindeutige Schlüssel (`GS1`, `GS2`, …) beim Hinzufügen zu `extGStateDict`. | +| **Große PDFs (Hunderte MB)** | Aktivieren Sie `doc.OptimizeResources = true` vor dem Speichern, um den Speicherverbrauch zu reduzieren. | + +## Vollständiger Quellcode (ausführbar) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Schritt 1: PDF‑Dokument laden + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Schritt 2: Alle Signaturfeld‑Namen auflisten + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Schritt 3: PDF in PDF/X‑4‑Standard konvertieren + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Schritt 4: PDF als HTML speichern und Rasterbilder überspringen + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Schritt 5: Ein benutzerdefiniertes ExtGState (Grafik‑Zustand) zur ersten Seite hinzufügen + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## 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, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Umfassender Leitfaden: PDF in HTML konvertieren mit Aspose.PDF .NET und benutzerdefinierten Strategien](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [PDF in HTML konvertieren mit benutzerdefinierten Bild-URLs mit Aspose.PDF .NET: Ein umfassender Leitfaden](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF-zu-HTML-Konvertierung mit Aspose.PDF .NET: Bilder als externe PNGs speichern](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/programming-with-forms/_index.md b/pdf/german/net/programming-with-forms/_index.md index 4e32e64560..1e9cdaddda 100644 --- a/pdf/german/net/programming-with-forms/_index.md +++ b/pdf/german/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Diese Tutorials bieten detaillierte Codebeispiele, klare Erklärungen und Illust | [Beschriftung des Optionsfelds festlegen](./set-radio-button-caption/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET Optionsfeldbeschriftungen in PDFs festlegen. Diese Schritt-für-Schritt-Anleitung führt Sie durch das Laden, Ändern und Speichern Ihrer PDF-Formulare. | | [Textfeld](./text-box/) | Entdecken Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET mühelos Textfelder zu PDFs hinzufügen. Verbessern Sie die Benutzerinteraktion. | | [PDF mit Aspose erstellen – Formularfeld und Seiten hinzufügen](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.PDF für .NET ein PDF erstellen und Formularfelder sowie Seiten hinzufügen. | +| [PDF-Formularfeld in C# erstellen – Schritt‑für‑Schritt‑Anleitung](./create-pdf-form-field-in-c-step-by-step-guide/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET ein PDF-Formularfeld in C# Schritt für Schritt erstellen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/german/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..fbb6b40223 --- /dev/null +++ b/pdf/german/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-08-14 +description: Erstellen Sie PDF-Formularfelder schnell mit C#. Erfahren Sie, wie Sie + ein Textfeld zu einem PDF hinzufügen und das PDF so ändern, dass es ein Textfeld + enthält, mithilfe von Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: de +lastmod: 2026-08-14 +og_description: Erstelle ein PDF‑Formularfeld mit C#. Dieses Tutorial zeigt, wie man + ein Textfeld zu einem PDF hinzufügt und ein PDF so modifiziert, dass ein Textfeld + mit Aspose.PDF enthalten ist. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: PDF-Formularfeld in C# erstellen – vollständiger Programmierleitfaden +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: PDF-Formularfeld in C# erstellen – Schritt‑für‑Schritt‑Anleitung +url: /de/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-Formularfeld in C# erstellen – Schritt‑für‑Schritt‑Anleitung + +Wenn Sie ein **PDF-Formularfeld** in einem Dokument **erstellen** müssen, führt Sie diese Anleitung durch den gesamten Prozess. Sie sehen genau, wie Sie ein **Textfeld zu PDF**‑Seiten **hinzufügen** und wie Sie ein **PDF modifizieren, um ein Textfeld einzufügen** mithilfe der Aspose.PDF‑Bibliothek für .NET. + +Die Arbeit mit PDF‑Formularen ist ein häufiges Bedürfnis für Rechnungssysteme, Umfragen oder jeden Workflow, der Benutzereingaben sammelt. Am Ende dieses Tutorials verfügen Sie über ein wiederverwendbares Code‑Snippet, das ein voll funktionsfähiges Textfeld erstellt, es an die gewünschte Stelle setzt und das aktualisierte PDF speichert – alles ohne Ihr C#‑Projekt zu verlassen. + +## 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+) +* Visual Studio 2022 oder eine beliebige IDE, die C# unterstützt +* Eine aktive Aspose.PDF‑für‑.NET‑Lizenz (die kostenlose Testversion reicht für die Entwicklung) +* Eine PDF‑Datei namens `input.pdf` in einem bekannten Verzeichnis (im Tutorial wird `YOUR_DIRECTORY` als Platzhalter verwendet) + +> **Profi‑Tipp:** Wenn Sie noch keine Lizenz besitzen, können Sie einen temporären Schlüssel von Asposes Website anfordern; die Bibliothek funktioniert im Evaluierungsmodus ohne Code‑Änderungen. + +## Wie man ein PDF‑Formularfeld in C# erstellt (Übersicht) + +1. Laden Sie das vorhandene PDF‑Dokument. +2. Instanziieren Sie ein `TextBoxField` und konfigurieren Sie dessen Namen und Aussehen. +3. Fügen Sie eine Widget‑Annotation hinzu, die das visuelle Rechteck auf der Zielseite definiert. +4. Insertieren Sie das Feld in die Form‑Sammlung des Dokuments. +5. Speichern Sie das modifizierte PDF. + +Jeder Schritt wird im Folgenden detailliert erklärt, inklusive vollständiger Code‑Beispiele und der Begründung für die jeweiligen API‑Aufrufe. + +## Schritt 1: PDF‑Dokument laden + +Der erste Vorgang besteht darin, das Quell‑PDF zu lesen. Aspose.PDF repräsentiert eine PDF‑Datei mit der Klasse `Document`. Das Laden des Dokuments gibt Ihnen Zugriff auf dessen Seiten, Form‑Sammlung und weitere Strukturen. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Warum das wichtig ist:** +Das Laden der Datei erstellt ein In‑Memory‑Modell des PDFs, sodass Sie Objekte hinzufügen, entfernen oder bearbeiten können, ohne die Originaldatei zu beschädigen. Das `Document`‑Objekt stellt zudem die Eigenschaft `Form` bereit, in der Sie später **Textfeld zu PDF** **hinzufügen**. + +## Schritt 2: Ein Textfeld erstellen + +Ein Textfeld ist eine Art Formularfeld, das Benutzern erlaubt, freien Text einzugeben. In Aspose.PDF erstellen Sie es, indem Sie `TextBoxField` instanziieren und dabei die Zielseite sowie ein Rechteck übergeben, das die anfängliche Größe des Widgets definiert. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Warum das wichtig ist:** +* `PartialName` ist der Schlüssel, den Formularverarbeitungs‑Tools (z. B. Adobe Acrobat, serverseitige Parser) verwenden, um den eingegebenen Wert abzurufen. +* Das hier übergebene Rechteck definiert nur die *initiale* Widget‑Größe; Sie können die visuelle Position später mit einer Widget‑Annotation anpassen (nächster Schritt). +* Das Setzen von `DefaultAppearance` sorgt dafür, dass der Text im Feld in allen Viewer‑Programmen konsistent dargestellt wird. + +## Schritt 3: Die visuelle Widget‑Annotation definieren + +Ein Formularfeld kann ein oder mehrere **Widget‑Annotations** besitzen, die bestimmen, wo das Feld auf jeder Seite erscheint. Durch das Hinzufügen eines Widgets können Sie dasselbe logische Feld an einer anderen Position oder sogar auf mehreren Seiten platzieren. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Warum das wichtig ist:** +Das Widget‑Rechteck bestimmt die Bildschirme‑Koordinaten, die der Benutzer sieht. Wenn Sie diesen Schritt überspringen, existiert das Feld zwar in der Datenstruktur des PDFs, ist jedoch für den Endbenutzer nicht sichtbar. Das Hinzufügen eines Widgets ist der Schritt, der tatsächlich **Textfeld zu PDF** **hinzufügt**. + +## Schritt 4: Das konfigurierte Feld zur Form des Dokuments hinzufügen + +Jetzt, wo das `TextBoxField` vollständig konfiguriert ist, müssen Sie es in die Form‑Sammlung des PDFs registrieren. Dadurch wird das Feld Teil des interaktiven Formulars und beim Speichern berücksichtigt. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Warum das wichtig ist:** +Ohne das Hinzufügen des Feldes zu `pdfDocument.Form` würde der PDF‑Viewer die Widget‑Annotation ignorieren und die Feld‑Daten würden nie übermittelt. Diese Zeile finalisiert die **PDF‑Modifikation, um ein Textfeld einzufügen**‑Operation. + +## Schritt 5: Das aktualisierte PDF speichern + +Abschließend schreiben Sie die Änderungen zurück auf die Festplatte. Sie können die Originaldatei überschreiben oder eine neue Datei erstellen; das Beispiel speichert nach `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Wenn Sie `output.pdf` in Adobe Acrobat Reader öffnen, sehen Sie ein rechteckiges Textfeld mit der Beschriftung „Comments“ auf Seite 2. Benutzer können hinein klicken, tippen, und der eingegebene Text wird Teil der PDF‑Formulardaten. + +## Vollständiges funktionierendes Beispiel + +Alle Bausteine zusammengefügt, hier ein komplettes, sofort ausführbares Programm. Kopieren Sie es in ein neues Konsolen‑Projekt, ersetzen Sie `YOUR_DIRECTORY` durch einen echten Ordnerpfad und führen Sie es aus. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Erwartete Ausgabe:** +Das Ausführen des Programms gibt zwei Bestätigungszeilen in der Konsole aus. Das Öffnen von `output.pdf` zeigt ein Textfeld auf Seite 2, in das der Benutzer Kommentare eingeben kann. Wenn das Formular über die „Submit“-Schaltfläche von Adobe Acrobat gesendet wird, erscheint der Feldname `Comments` in den exportierten FDF‑ oder XFDF‑Daten. + +## Häufige Varianten und Sonderfälle + +| Situation | Wie der Code anzupassen ist | +|-----------|-----------------------------| +| **Feld auf einer anderen Seite hinzufügen** | Ändern Sie `pdfDocument.Pages[1]` auf den gewünschten Seiten‑Index (0‑basiert). | +| **Mehrzeiliges Textfeld erstellen** | Setzen Sie `textBox.Multiline = true;` bevor Sie das Widget hinzufügen. | +| **Standardwert festlegen** | `textBox.Value = "Enter your comments here";` zuweisen. | +| **Feld als Pflichtfeld markieren** | `textBox.Required = true;` setzen. | +| **Feld auf mehreren Seiten platzieren** | `textBox.AddWidgetAnnotation` für jedes zusätzliche Rechteck auf den Zielseiten aufrufen. | +| **Benutzerdefinierte Schriftart verwenden** | Schriftart mit `FontRepository.AddFont("path/to/font.ttf")` laden und in `DefaultAppearance` referenzieren. | + +**Profi‑Tipp:** Validieren Sie die Rechteck‑Koordinaten stets gegen die Seitengröße (`pdfDocument.Pages[1].Rect`). Liegt das Widget außerhalb der Seitenränder, können Viewer das Feld abschneiden oder verbergen. + +## Das Formularfeld testen + +1. Öffnen Sie `output.pdf` in Adobe Acrobat Reader. +2. Klicken Sie in das Feld „Comments“; der Cursor sollte erscheinen. +3. Geben Sie beliebigen Text ein und drücken Sie **Tab** oder klicken Sie woanders hin. +4. Wählen Sie **Datei → Speichern unter**, um den eingegebenen Wert zu sichern. +5. (Optional) Verwenden Sie Aspose.PDF’s `Form`‑API, um den Wert programmgesteuert auszulesen: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Dieses Snippet zeigt, dass das Feld nicht nur sichtbar, sondern auch per Code abrufbar ist – essenziell für serverseitige Verarbeitung. + +## Fazit + +Sie wissen nun, wie man **PDF-Formularfeld** in C# von Anfang bis Ende **erstellt**. Das Tutorial behandelte das Laden eines PDFs, das Konfigurieren eines `TextBoxField`, das Hinzufügen einer Widget‑Annotation, das Registrieren des Feldes und das Speichern des Ergebnisses. Mit diesen Bausteinen können Sie **Textfeld zu PDF**‑Dokumenten **hinzufügen**, **PDF modifizieren, um ein Textfeld einzufügen** und den Ansatz auf andere Feldtypen wie Kontrollkästchen, Optionsschalter oder Dropdown‑Listen ausweiten. + +Als Nächstes können Sie verwandte Themen wie **Formulardaten extrahieren**, **PDF‑Formulare flachlegen** oder **Felder mit Rahmen und Farben stylen** erkunden. All diese Konzepte bauen auf derselben Kern‑API auf, die Sie gerade gemeistert haben, und ermöglichen Ihnen, anspruchsvolle interaktive PDFs vollständig in C# zu erstellen. + +Viel Spaß beim Coden und experimentieren Sie gern mit verschiedenen Rechtecken, Schriftarten und Validierungsregeln, um den Anforderungen Ihrer Anwendung gerecht zu werden! + +## 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. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/programming-with-operators/_index.md b/pdf/german/net/programming-with-operators/_index.md index 4969bb117c..1c67281524 100644 --- a/pdf/german/net/programming-with-operators/_index.md +++ b/pdf/german/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Die Tutorials „Programmieren mit Operatoren“ von Aspose.PDF für .NET führe | [XForm auf der Seite zeichnen](./draw-xform-on-page/) | Lernen Sie mit dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET XForms in PDF zeichnen. | | [PDF-Operatoren](./pdf-operators/) | Schritt-für-Schritt-Anleitung zur Verwendung von PDF-Operatoren mit Aspose.PDF für .NET. Fügen Sie einer PDF-Seite ein Bild hinzu und geben Sie seine Position an. | | [Grafikobjekte in PDF-Datei entfernen](./remove-graphics-objects/) Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET Grafikobjekte aus einer PDF-Datei entfernen. Vereinfachen Sie Ihre PDF-Bearbeitungsaufgaben. | +| [Leeres PDF-Wörterbuch in C# mit Aspose.Pdf erstellen](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET ein leeres PDF-Wörterbuch in C# erstellen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/german/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..aff45be9bc --- /dev/null +++ b/pdf/german/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: Erstellen Sie ein leeres PDF-Wörterbuch in C# mit Aspose.Pdf – erfahren + Sie, wie Sie einen Grafikzustand zur ExtGState‑Sammlung hinzufügen und PDFs programmgesteuert + ändern. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: de +lastmod: 2026-08-14 +og_description: Erstellen Sie ein leeres PDF‑Wörterbuch in C# mit Aspose.Pdf. Folgen + Sie dieser vollständigen Anleitung, um einen benutzerdefinierten Grafikzustand zur + ExtGState‑Sammlung eines PDFs hinzuzufügen. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Leeres PDF‑Wörterbuch in C# erstellen – Aspose.Pdf Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Leeres PDF‑Wörterbuch in C# mit Aspose.Pdf erstellen +url: /de/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Leeres PDF‑Wörterbuch in C# mit Aspose.Pdf erstellen + +Wenn Sie **leere PDF‑Wörterbuch**‑Objekte benötigen, während Sie mit PDF‑Dateien arbeiten, zeigt Ihnen diese Anleitung genau, wie Sie das in C# mit der Aspose.Pdf‑Bibliothek tun. Egal, ob Sie einen benutzerdefinierten Grafik‑Zustand erstellen, eine neue Ressource hinzufügen oder eine Vorlage für die spätere Verwendung vorbereiten – die nachfolgenden Schritte liefern eine vollständige, ausführbare Lösung. + +Sie lernen, wie Sie ein PDF laden, das Ressourcen‑Wörterbuch der ersten Seite öffnen, ein brandneues `CosPdfDictionary` erstellen und es in die `ExtGState`‑Sammlung einfügen. Am Ende des Tutorials haben Sie ein funktionierendes `output.pdf`, das das neu erstellte Wörterbuch enthält. + +## 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.6+) +- Visual Studio 2022 oder eine andere C#‑IDE Ihrer Wahl +- Eine Aspose.Pdf‑für‑.NET‑Lizenz (oder einen temporären Evaluierungsschlüssel) +- Eine Beispiel‑PDF‑Datei namens **input.pdf**, die in einem von Ihnen kontrollierten Ordner liegt (der Ordnerpfad wird als `dataDir` verwendet) + +Keine zusätzlichen NuGet‑Pakete sind über `Aspose.Pdf` hinaus erforderlich. + +## Schritt 1: Projekt einrichten und Aspose.Pdf referenzieren + +1. Erstellen Sie ein neues **Console App**‑Projekt in Visual Studio. +2. Öffnen Sie den **NuGet Package Manager** und installieren Sie `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Fügen Sie die folgenden `using`‑Direktiven am Anfang von `Program.cs` hinzu: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Warum diese Namespaces?* `Aspose.Pdf` enthält die Kernklasse `Document`, während `Aspose.Pdf.Operators.Gfx` `CosPdfDictionary`, `CosPdfNumber` und verwandte Low‑Level‑PDF‑Objekte bereitstellt, die zum **Erstellen leerer PDF‑Wörterbuch**‑Strukturen nötig sind. + +## Schritt 2: Quell‑PDF laden + +Der erste Vorgang besteht darin, die vorhandene PDF‑Datei in eine `Document`‑Instanz zu laden. Dadurch erhalten Sie Zugriff auf alle Seiten, Ressourcen und Low‑Level‑Wörterbücher. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Erklärung*: `Document` liest die Datei in den Speicher und bereitet interne Strukturen vor. Die `using`‑Anweisung sorgt dafür, dass das Dateihandle nach Abschluss der Verarbeitung freigegeben wird. + +## Schritt 3: Ressourcen‑Wörterbuch der ersten Seite öffnen + +Jede PDF‑Seite besitzt ein **Resources**‑Wörterbuch, das Schriften, Bilder, ExtGState‑Objekte und andere gemeinsam genutzte Ressourcen gruppiert. Um einen neuen Grafik‑Zustand einzufügen, müssen wir dieses Wörterbuch bearbeiten. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` ist eine Hilfsklasse, die es Ihnen ermöglicht, ein PDF‑Wörterbuch wie ein C#‑`Dictionary` zu behandeln. + +## Schritt 4: ExtGState‑Sammlung abrufen (oder erstellen) + +`ExtGState` enthält Grafik‑Zustandsobjekte wie Opazität, Mischmodus und Linienstärke. Wenn das Quell‑PDF bereits einen `ExtGState`‑Eintrag enthält, verwenden wir ihn; andernfalls erstellen wir ein neues leeres Wörterbuch. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Warum diese Prüfung?* Einige PDFs lassen den `ExtGState`‑Eintrag komplett weg. Durch die Behandlung beider Fälle bleibt das Tutorial für jede Eingabedatei robust. + +## Schritt 5: **Leeres PDF‑Wörterbuch** für einen neuen Grafik‑Zustand erstellen + +Jetzt erstellen wir tatsächlich **leere PDF‑Wörterbuch**‑Objekte, die die Grafik‑Zustandsparameter definieren. Das Wörterbuch startet leer, und wir fügen die erforderlichen Schlüssel hinzu: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Was jeder Eintrag bewirkt + +| Schlüssel | Typ | Bedeutung | +|-----------|-----|------------| +| **CA** | `CosPdfNumber` | Strich‑Opazität (Wertbereich 0‑1). | +| **ca** | `CosPdfNumber` | Füll‑Opazität (Wertbereich 0‑1). | +| **BM** | `CosPdfName` | Mischmodus; `"Normal"` ist am gebräuchlichsten. | + +Da wir mit einem **leeren PDF‑Wörterbuch** begonnen haben, haben wir die volle Kontrolle darüber, welche Einträge hinzugefügt werden. Sie können dieses Wörterbuch jederzeit um weitere Grafik‑Zustandsparameter wie `LW` (Linienstärke) oder `LC` (Linien‑Ende) erweitern. + +## Schritt 6: Neuen Grafik‑Zustand in ExtGState einfügen + +Das `ExtGState`‑Wörterbuch funktioniert wie eine Map, bei der jeder Eintrag durch einen Namen (z. B. `GS0`, `GS1`) identifiziert wird. Wir fügen unser frisch gebautes Wörterbuch unter einem eindeutigen Schlüssel hinzu. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Wenn Sie mehrere Zustände hinzufügen möchten, erhöhen Sie das Suffix (`GS1`, `GS2`, …), um Namenskollisionen zu vermeiden. + +## Schritt 7: Modifiziertes PDF speichern + +Abschließend schreiben wir die Änderungen zurück auf die Festplatte. Die `Save`‑Methode serialisiert die aktualisierten Wörterbücher automatisch. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Öffnen Sie `output.pdf` in einem beliebigen PDF‑Betrachter und prüfen Sie den Eintrag **Resources → ExtGState** (die meisten Betrachter verbergen diesen, aber Werkzeuge wie Adobe Acrobat Preflight oder PDF‑Tron können ihn anzeigen). Sie sollten einen `GS0`‑Eintrag sehen, der die von Ihnen definierten Opazitäts‑ und Mischmodus‑Werte enthält. + +## Vollständiges funktionierendes Beispiel + +Alle Teile zusammengefügt, hier das komplette Programm, das Sie in `Program.cs` einfügen und ausführen können: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Erwartete Ausgabe** – Die Konsole gibt eine Bestätigungszeile aus, und `output.pdf` enthält den neuen `GS0`‑Eintrag unter `ExtGState`. Wenn Sie eine Seite rendern, die `GS0` (z. B. über den Inhalts‑Stream‑Operator `gs`) referenziert, sind Striche vollständig undurchsichtig, während Füllungen zu 50 % transparent sind. + +## Häufige Fragen und Sonderfall‑Behandlung + +| Frage | Antwort | +|-------|----------| +| *Was, wenn das PDF mehrere Seiten hat?* | Das Beispiel richtet sich an die erste Seite (`Pages[1]`). Um alle Seiten zu beeinflussen, iterieren Sie über `pdfDocument.Pages` und wiederholen die Schritte 3‑5 für jede Seiten‑Ressource. | +| *Kann ich das Wörterbuch zu einer Seite hinzufügen, die bereits einen ExtGState‑Eintrag namens „GS0“ hat?* | Ja, Sie müssen jedoch einen anderen Schlüssel (`GS1`, `GS2`, …) verwenden, um das bestehende Element nicht zu überschreiben. | +| *Ist es sicher, das Wörterbuch nach dem Speichern weiter zu ändern?* | Sobald Sie `Save` aufrufen, ist die In‑Memory‑Repräsentation von der Datei getrennt. Sie können das `Document`‑Objekt weiter bearbeiten und bei Bedarf erneut `Save` aufrufen. | +| *Benötige ich eine Lizenz für Aspose.Pdf, um ` | | + +## 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 Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/programming-with-security-and-signatures/_index.md b/pdf/german/net/programming-with-security-and-signatures/_index.md index 70b23029c1..b528308c07 100644 --- a/pdf/german/net/programming-with-security-and-signatures/_index.md +++ b/pdf/german/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Das Tutorial gibt Ihnen einen detaillierten Überblick über Methoden und Techni | [PDF-Signaturen in C# prüfen – So lesen Sie signierte PDF-Dateien](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET PDF-Signaturen auslesen und signierte PDF-Dateien analysieren. | | [PDF-Dateien reparieren – Vollständiger C#-Leitfaden mit Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Erfahren Sie, wie Sie beschädigte PDF-Dateien mit Aspose.PDF für .NET in C# reparieren und wiederherstellen. | | [PDF-Signatur in C# überprüfen – Vollständiger Programmierleitfaden](./verify-pdf-signature-in-c-complete-programming-guide/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET PDF-Signaturen in C# vollständig prüfen und verifizieren. | +| [Signaturoptionen in C# erstellen – vollständiger Leitfaden zum digitalen Signieren](./create-signature-options-in-c-full-guide-to-digital-signing/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET umfassende Signaturoptionen in C# implementieren und digitale Signaturen erstellen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/german/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..3991d44068 --- /dev/null +++ b/pdf/german/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,314 @@ +--- +category: general +date: 2026-08-14 +description: Erstellen Sie Signaturoptionen in C#, um digitale Signaturen anzuwenden. + Erfahren Sie, wie Sie die Signatur konfigurieren, eine benutzerdefinierte Hash‑Funktion + implementieren und Dokumente programmgesteuert signieren. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: de +lastmod: 2026-08-14 +og_description: Erstellen Sie Signaturoptionen in C# und wenden Sie eine digitale + Signatur an. Dieses Tutorial führt Sie durch die Konfiguration der Signatur, das + Hinzufügen einer benutzerdefinierten Hash‑Funktion und das Signieren eines Dokuments. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Signaturoptionen in C# erstellen – Schritt‑für‑Schritt-Anleitung zum digitalen + Signieren +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Erstellen von Signaturoptionen in C# – vollständiger Leitfaden zum digitalen + Signieren +url: /de/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Signaturoptionen in C# erstellen – vollständige Anleitung zum digitalen Signieren + +Erstellen Sie Signaturoptionen in C#, um einen digitalen Signatur‑Workflow zu konfigurieren. Dieses Tutorial zeigt, wie man eine digitale Signatur anwendet, eine benutzerdefinierte Hash‑Funktion implementiert und ein Dokument mit der `SignatureOptions`‑Klasse signiert. Wenn Sie jemals ein PDF, XML oder irgendeine Binär‑Payload aus einer .NET‑Anwendung signieren mussten, bieten die nachfolgenden Schritte eine sofort einsetzbare Lösung. + +Sie lernen, wie man: + +* `SignatureOptions` mit einem benutzerdefinierten Hash‑Algorithmus konfiguriert, +* die Signatur‑Methode korrekt aufruft, +* überprüft, dass die Signatur angewendet wurde, +* häufige Fallstricke bei der Konfiguration der Signatur vermeidet. + +Die einzigen Voraussetzungen sind ein aktuelles .NET‑SDK (≥ .NET 6) und eine Signatur‑Bibliothek, die `SignatureOptions` bereitstellt (z. B. **GroupDocs.Signature**, **Aspose.Signature** oder eine ähnliche API). Es werden keine externen Werkzeuge benötigt. + +--- + +## Prerequisites + +| Anforderung | Warum es wichtig ist | +|-------------|----------------------| +| .NET 6 SDK oder neuer | Stellt die in den Beispielen verwendeten modernen Sprachfeatures bereit. | +| Ein Signatur‑Bibliothek‑NuGet‑Paket (z. B. `GroupDocs.Signature`) | Stellt den Typ `SignatureOptions` und die Erweiterungsmethode `Sign` bereit. | +| Zugriff auf einen privaten Schlüssel oder ein Zertifikat | Erforderlich, um eine überprüfbare digitale Signatur zu erzeugen. | + +Installieren Sie die Bibliothek mit dem Standard‑CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Schritt 1: Signaturoptionen erstellen + +Der erste Schritt besteht darin, `SignatureOptions` zu instanziieren und die Eigenschaften zu setzen, die den Signatur‑Prozess steuern. Dieses Objekt teilt der Bibliothek *was* zu signieren ist und *wie* es zu signieren ist. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Warum das wichtig ist:** `SignatureOptions` wirkt als Vertrag zwischen Ihrem Code und der Signatur‑Engine. Durch die vorherige Konfiguration vermeiden Sie wiederholten Boilerplate‑Code beim Signieren mehrerer Dokumente. + +--- + +## Schritt 2: Eine benutzerdefinierte Hash‑Funktion implementieren + +Eine *benutzerdefinierte Hash‑Funktion* gibt Ihnen die volle Kontrolle über den Digest, den der Signatur‑Algorithmus signiert. Das ist nützlich, wenn der Standard‑Hash (SHA‑256) nicht den Compliance‑Anforderungen entspricht oder wenn Sie nur einen Teil des Dokuments hashen müssen. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Warum das wichtig ist:** Durch das Zuweisen von `CustomSignHash` ersetzen Sie den internen Hash‑Schritt der Bibliothek durch `MyHash`. Die Signatur‑Engine signiert nun die von Ihrer Funktion zurückgegebenen Bytes, wodurch die Einhaltung jeder benutzerdefinierten Richtlinie sichergestellt wird. + +--- + +## Schritt 3: Dokument laden und digitale Signatur anwenden + +Nachdem die Optionen vorbereitet sind, können Sie die Zieldatei öffnen und die Signatur‑Methode aufrufen. Die Methode `Sign` wird von der Bibliothek bereitgestellt und verwendet die konfigurierten `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Warum das wichtig ist:** Der Aufruf von `Sign` führt intern drei Aktionen aus: + +1. **Hash‑Berechnung** – jetzt an Ihre benutzerdefinierte Hash‑Funktion delegiert. +2. **Signatur‑Erzeugung** – unter Verwendung des privaten Schlüssels, der in der Bibliothekskonfiguration bereitgestellt wurde. +3. **Einbettung** – die erzeugte Signatur wird an die Ausgabedatei angehängt. + +Falls ein Schritt fehlschlägt, gibt die Methode `false` zurück, sodass Sie den Fehler elegant behandeln können. + +--- + +## Schritt 4: Überprüfen, ob das Dokument signiert ist + +Eine schnelle Verifizierung bestätigt, dass die Signatur korrekt angewendet wurde. Die meisten Bibliotheken stellen eine `Verify`‑Methode bereit, die die Integrität der signierten Datei prüft. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Warum das wichtig ist:** Die Verifizierung stellt sicher, dass das signierte Dokument nach dem Signieren nicht manipuliert wurde und dass der benutzerdefinierte Hash einen kompatiblen Digest erzeugt hat. + +--- + +## Wie man Signaturen für verschiedene Dateitypen konfiguriert + +Das gleiche `SignatureOptions`‑Objekt kann für PDFs, Word‑Dokumente, Bilder oder reine Binärdateien wiederverwendet werden. Die einzige erforderliche Änderung ist die spezifische Options‑Klasse (z. B. `PdfSignatureOptions`, `WordSignatureOptions`). Hier ein kurzes Beispiel für ein JPEG‑Bild: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Warum das wichtig ist:** Das Verständnis, wie man *Signatur konfiguriert* für jedes Format, ermöglicht es Ihnen, denselben Code‑Base über mehrere Dokumenttypen hinweg zu erweitern, ohne die Hash‑Logik neu zu schreiben. + +--- + +## Häufige Fallstricke und bewährte Vorgehensweisen + +| Fallstrick | Empfohlene Lösung | +|------------|-------------------| +| Vergessen, `CustomSignHash` nach dem Erstellen von `SignatureOptions` zu setzen | Den Delegaten sofort nach dem Erzeugen des Options‑Objekts zuweisen. | +| Verwendung eines Hash‑Algorithmus, den das Signaturzertifikat nicht unterstützt | Überprüfen Sie, dass die Schlüsselverwendung des Zertifikats zur Hash‑Länge passt (z. B. RSA‑2048 mit SHA‑512). | +| Übersehen, dass `Signature`‑Objekte freigegeben werden müssen | Umwickeln Sie die `Signature`‑Instanz mit einem `using`‑Block, um Dateihandles freizugeben. | +| Speichern der signierten Datei über die ursprüngliche Quelle | Immer in einen neuen Dateipfad (`outputPath`) schreiben, um das Originaldokument zu erhalten. | + +--- + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie ein eigenständiges Programm, das alle Bausteine zusammenführt. Kopieren Sie es in ein neues Konsolenprojekt und führen Sie es aus; die Konsole meldet Erfolg oder Misserfolg. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Erwartete Ausgabe** + +``` +Signature verified successfully. +``` + +Falls die Konsole „Signing failed.“ oder „Signature verification failed.“ ausgibt, überprüfen Sie die Zertifikatskonfiguration und stellen Sie sicher, dass die benutzerdefinierte Hash‑Funktion ein Byte‑Array der erwarteten Größe zurückgibt. + +--- + +## Fazit + +Sie wissen jetzt, wie man in C# **Signaturoptionen erstellt**, eine **benutzerdefinierte Hash‑Funktion anhängt** und **digitale Signaturen** auf jedes unterstützte Dokument anwendet. Das Tutorial behandelte den gesamten Lebenszyklus: Konfiguration der Optionen, Signieren der Datei und Verifizierung des Ergebnisses. Durch die Wiederverwendung derselben `SignatureOptions`‑Instanz können Sie zudem **wie man Signaturen konfiguriert** für Bilder, Word‑Dateien oder rohe Binärdateien. + +--- + +## Was kommt als Nächstes? + +* Erkunden Sie weitere `SignatureOptions`‑Eigenschaften wie visuelle Stempel, Zeitstempeldienste und Zertifikatsketten – diese passen zum Schlüsselwort **apply digital signature**. +* Experimentieren Sie mit anderen Hash‑Algorithmen (z. B. Blake2b), indem Sie die Implementierung in `MyHash` austauschen. +* Integrieren Sie den Signatur‑Ablauf in eine Web‑API, um das Dokumenten‑Signieren on‑the‑fly zu ermöglichen – eine natürliche Erweiterung von **how to sign document** in einer serviceorientierten Architektur. + +Passen Sie den Code gerne an Ihre eigenen Sicherheitsrichtlinien an und teilen Sie Ihre Erfahrungen in den Kommentaren. Viel Spaß beim Signieren! + +## 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, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/programming-with-stamps-and-watermarks/_index.md b/pdf/german/net/programming-with-stamps-and-watermarks/_index.md index 48c54efcc7..3f51c41736 100644 --- a/pdf/german/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/german/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Die Tutorials „Programmieren mit Stempeln und Wasserzeichen“ von Aspose.PDF | [Text in der Fußzeile einer PDF-Datei](./text-in-footer/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET Text in die Fußzeile einer PDF-Datei einfügen. | | [Text im Header der PDF-Datei](./text-in-header/) | Lernen Sie in diesem Schritt-für-Schritt-Tutorial, wie Sie mit Aspose.PDF für .NET Textüberschriften zu PDFs hinzufügen. Optimieren Sie Ihre Dokumente effizient und effektiv. | | [Bates-Nummerierung zu PDF in C# hinzufügen – Komplettanleitung](./add-bates-numbering-pdf-in-c-complete-guide/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET Bates-Nummern zu PDF-Dokumenten hinzufügen. | +| [Bates-Nummerierungsoptionen in C# festlegen – Komplettanleitung](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET die Optionen der Bates-Nummerierung in C# konfigurieren. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/german/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..91e975d46c --- /dev/null +++ b/pdf/german/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,256 @@ +--- +category: general +date: 2026-08-14 +description: Wie man Bates‑Nummerierungsoptionen in C# mit GroupDocs festlegt. Folgen + Sie dieser Schritt‑für‑Schritt‑Anleitung, um benutzerdefinierte Präfixe und Startnummern + beim Konvertieren von Word zu PDF hinzuzufügen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: de +lastmod: 2026-08-14 +og_description: Wie man die Bates-Nummerierungsoptionen in C# schnell einstellt. Dieser + Leitfaden zeigt, wie man benutzerdefinierte Präfixe und Startnummern beim Konvertieren + von Word zu PDF hinzufügt. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Wie man Bates‑Nummerierungsoptionen in C# einstellt – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Wie man Bates‑Nummerierungsoptionen in C# einstellt – vollständige Anleitung +url: /de/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Bates‑Nummerierungsoptionen in C# festlegt – vollständige Anleitung + +Wenn Sie **wie man Bates‑Nummerierungsoptionen festlegt** in C# benötigen, führt Sie diese Anleitung Schritt für Schritt durch. Sie lernen, wie Sie die Startnummer festlegen, ein Präfix hinzufügen und die Nummerierung beim Konvertieren eines Word‑Dokuments in PDF mit der GroupDocs API anwenden. + +Die Dokumentenverarbeitung erfordert häufig eindeutige Kennzeichnungen auf jeder Seite zu rechtlichen oder archivierenden Zwecken. Am Ende dieses Tutorials besitzen Sie ein wiederverwendbares Snippet, das Sie in jedes .NET‑Projekt einbinden können, egal ob Sie ein Litigation‑Support‑Tool oder einen automatisierten Berichtsgenerator bauen. Keine externen Werkzeuge sind nötig – nur die GroupDocs.Conversion‑Bibliothek und ein paar Zeilen C#. + +## Was Sie benötigen + +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 unterstützt) +* Eine gültige GroupDocs.Conversion‑Lizenz (die kostenlose Testversion reicht für Tests) +* Ein Beispiel‑Word‑Dokument (`input.docx`), das Sie nummerieren möchten + +Diese Voraussetzungen stellen sicher, dass der Code ohne zusätzliche Konfiguration läuft. + +## Wie man Bates‑Nummerierungsoptionen festlegt – Überblick + +Der Kern von **wie man Bates‑Nummerierungsoptionen festlegt** liegt in drei Objekten: + +1. `Document` – lädt die Quelldatei. +2. `BatesNumberingOptions` – enthält die Startnummer, das Präfix und weitere Formatierungsdetails. +3. `AddBatesNumbering` – die Methode, die die Nummerierung in jede Seite einfügt. + +Das Verständnis, warum jedes Bauteil existiert, hilft Ihnen, die Lösung an komplexere Szenarien anzupassen, etwa benutzerdefinierte Schriftarten oder mehrsprachige Nummerierung. + +## Schritt 1: Installieren Sie das GroupDocs.Conversion‑NuGet‑Paket + +Öffnen Sie ein Terminal im Ordner Ihrer Lösung und führen Sie aus: + +```bash +dotnet add package GroupDocs.Conversion +``` + +Die **GroupDocs API** stellt die Klasse `Document` und die Erweiterungsmethode `AddBatesNumbering` bereit, die später im Tutorial verwendet werden. + +## Schritt 2: Laden Sie das Quelldokument + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Warum dieser Schritt?* +Das Laden der Datei erzeugt eine In‑Memory‑Repräsentation, die die Konvertierungs‑Engine manipulieren kann. Ohne eine `Document`‑Instanz können Sie keine Bates‑Nummerierung oder andere Transformationen anwenden. + +## Schritt 3: Erstellen Sie die Bates‑Nummerierungsoptionen + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Warum dieser Schritt?* +`BatesNumberingOptions` fasst alle Einstellungen zusammen, die Sie benötigen, wenn Sie **Bates‑Nummerierungsoptionen festlegen**. Durch Anpassen von `StartNumber` und `Prefix` können Sie die Ausgabe an Ihr Fall‑Management‑System anpassen. Die Eigenschaft `Position` steuert die visuelle Platzierung, was häufig eine Compliance‑Anforderung ist. + +## Schritt 4: Wenden Sie die Bates‑Nummerierung auf das Dokument an + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Die Methode `AddBatesNumbering` durchläuft jede Seite des geladenen `Document` und fügt die konfigurierte Zeichenkette ein. Da die Methode auf der In‑Memory‑Repräsentation arbeitet, können Sie weitere Verarbeitungsschritte (z. B. Wasserzeichen) vor dem Speichern anketten. + +## Schritt 5: Konvertieren und speichern Sie das Ergebnis als PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Warum dieser Schritt?* +Das Speichern als PDF ist ein gängiges Endformat für juristische Dokumente. Das Objekt `PdfConvertOptions` ermöglicht Feineinstellungen der Ausgabe, ist aber für die Grund‑Nummerierung nicht zwingend erforderlich. Der Aufruf `Save` schreibt das vollständig nummerierte PDF auf die Festplatte. + +## Vollständiges, ausführbares Beispiel + +Alles zusammengeführt, hier eine eigenständige Konsolenanwendung, die Sie kompilieren und ausführen können: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Erwartete Ausgabe** + +Beim Ausführen des Programms wird `output.pdf` erzeugt, in dem jede Seite ein Etikett wie `CASE-1000`, `CASE-1001` usw. im rechten Fußbereich anzeigt. Öffnen Sie das PDF in einem beliebigen Viewer, um zu prüfen, dass die Nummern wie gewünscht erscheinen. + +## Häufige Stolperfallen und bewährte Praktiken + +| Problem | Warum es passiert | Wie man es vermeidet | +|---------|-------------------|----------------------| +| **Relative Pfade verursachen `FileNotFoundException`** | Das Arbeitsverzeichnis einer Konsolen‑App kann vom Visual‑Studio‑Verzeichnis abweichen. | Verwenden Sie absolute Pfade oder `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Nummerierung überlappt vorhandene Fußzeilen** | Befindet das Quell‑Dokument bereits Inhalt im gewählten Fußzeilenbereich, kann die neue Nummer verdeckt werden. | Wählen Sie eine andere `Position` (z. B. `HeaderLeft`) oder passen Sie die Quell‑Vorlage an. | +| **Große Dokumente sind langsam** | Bates‑Nummerierung iteriert über jede Seite; der Speicherverbrauch steigt mit der Dateigröße. | Verarbeiten Sie das Dokument in Teilen mit `Document.Split`, wenn Sie 500 Seiten überschreiten. | +| **Lizenzablauf** | Die kostenlose Testversion von GroupDocs läuft nach 30 Tagen ab und löst eine Ausnahme bei `AddBatesNumbering` aus. | Setzen Sie vor dem Laden des Dokuments einen gültigen Lizenzschlüssel: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro‑Tipp:** Wenn Sie pro Fall ein anderes Zahlenformat benötigen (z. B. `2023-CASE-001`), bauen Sie das Präfix dynamisch, bevor Sie `BatesNumberingOptions` erstellen. + +## Erweiterung der Lösung + +Der gleiche **Bates‑Numbering‑C#‑Ansatz** funktioniert mit anderen Quellformaten wie `.txt`, `.html` oder sogar Bildern. Ändern Sie einfach die Dateierweiterung beim Erzeugen des `Document`‑Objekts, und die Konvertierungs‑Engine übernimmt den Rest. + +Sie können **Document‑Conversion‑C#** auch mit OCR für gescannte PDFs kombinieren: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Fazit + +Sie wissen jetzt **wie man Bates‑Nummerierungsoptionen in C#** von Anfang bis Ende festlegt. Durch Erzeugen eines `BatesNumberingOptions`‑Objekts, Anwenden mit `AddBatesNumbering` und Speichern als PDF können Sie die Produktion rechtlich konformer, eindeutig identifizierter Dokumente automatisieren. + +Ab hier können Sie verwandte Themen wie **C# PDF‑Generierung**, **Document‑Conversion‑C#** oder erweiterte **GroupDocs API**‑Funktionen wie Wasserzeichen und digitale Signaturen erkunden. Experimentieren Sie mit verschiedenen Präfixen, Positionen und Zahlenformaten, um sie an Ihren Workflow anzupassen. + +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. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/annotations/_index.md b/pdf/greek/net/annotations/_index.md index 6d21b7803f..8c72a7e71b 100644 --- a/pdf/greek/net/annotations/_index.md +++ b/pdf/greek/net/annotations/_index.md @@ -35,6 +35,7 @@ | [Ορισμός ελεύθερης μορφοποίησης σχολίων κειμένου](./setfreetextannotationformatting/) | Μάθετε πώς να ορίσετε μορφοποίηση σχολίων ελεύθερου κειμένου σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. | | [Διαγράψτε λέξεις](./strikeoutwords/) | Μάθετε πώς να διαγράφετε λέξεις σε ένα PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. Βελτιώστε τις δεξιότητές σας στην επεξεργασία εγγράφων. | | [Ενημέρωση σχολίων PDF ελεύθερου κειμένου](./updatefreetextannotation/) Μάθετε πώς να ενημερώνετε τις σχολιασμοί ελεύθερου κειμένου σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. | +| [Σχεδίαση ορθογωνίου σε PDF – βήμα‑βήμα οδηγός C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) Μάθετε πώς να σχεδιάζετε ορθογώνια σε αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα‑βήμα. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/greek/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..f70089290f --- /dev/null +++ b/pdf/greek/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: Σχεδιάστε γρήγορα ένα ορθογώνιο σε PDF χρησιμοποιώντας C#. Μάθετε πώς + να ορίζετε τις διαστάσεις του ορθογωνίου και να προσθέτετε σχήματα σε μια σελίδα + PDF με λίγες μόνο γραμμές. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: el +lastmod: 2026-08-14 +og_description: Σχεδιάστε ορθογώνιο σε PDF με C# σε δευτερόλεπτα. Αυτός ο οδηγός δείχνει + πώς να ορίσετε τις διαστάσεις του ορθογωνίου, να προσθέσετε ένα σχήμα και να επαληθεύσετε + τα όρια της σελίδας για αξιόπιστα γραφικά PDF. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Σχεδίαση ορθογωνίου σε PDF – πλήρες σεμινάριο C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Σχεδίαση ορθογωνίου σε PDF – βήμα‑βήμα οδηγός C# +url: /el/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Σχεδίαση ορθογωνίου σε PDF – πλήρης οδηγός C# + +Αν χρειάζεστε **draw rectangle on pdf** χρησιμοποιώντας C#, αυτός ο οδηγός σας παρουσιάζει μια σύντομη, έτοιμη για παραγωγή λύση. Θα δείτε ακριβώς **πώς να ορίσετε τις διαστάσεις του ορθογωνίου**, να επαληθεύσετε ότι το σχήμα ταιριάζει, και να το προσθέσετε σε μια σελίδα με μία κλήση μεθόδου. + +Ο οδηγός καλύπτει όλα, από τη δημιουργία ενός εγγράφου PDF μέχρι την απόδοση του ορθογωνίου, ώστε να μπορείτε να αντιγράψετε‑και‑επικολλήσετε τον κώδικα στο δικό σας έργο και να δείτε τα αποτελέσματα αμέσως. Δεν απαιτείται εξωτερική τεκμηρίωση—απλώς τα παρακάτω βήματα. + +## Προαπαιτούμενα + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7+) +* Το **Aspose.PDF for .NET** πακέτο NuGet (`Install-Package Aspose.PDF`) +* Βασική κατανόηση της σύνταξης C# +* Ένα IDE όπως το Visual Studio ή το VS Code + +> **Pro tip:** Χρησιμοποιήστε την δωρεάν άδεια αξιολόγησης του Aspose.PDF για γρήγορα πειράματα· προσθέτει ένα μικρό υδατογράφημα αλλά σας επιτρέπει να δοκιμάσετε όλες τις δυνατότητες. + +## Πώς να σχεδιάσετε ορθογώνιο σε PDF με C# + +Ο πυρήνας της εργασίας είναι η δημιουργία ενός `RectangleShape`, ο καθορισμός του μεγέθους και του περιγράμματος, και η προσάρτησή του σε μια `Page`. Η παρακάτω επικεφαλίδα H2 περιέχει τη βασική λέξη‑κλειδί, ικανοποιώντας τις απαιτήσεις SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Εξήγηση κάθε βήματος + +| Βήμα | Γιατί είναι σημαντικό | +|------|-----------------------| +| **1️⃣ Create a new PDF document** | Αρχικοποιεί το κοντέινερ που θα κρατήσει τις σελίδες και τα γραφικά. | +| **2️⃣ Add a blank page** | Χρειάζεστε ένα αντικείμενο `Page` επειδή τα σχήματα προσδένονται σε μια σελίδα, όχι απευθείας στο έγγραφο. | +| **3️⃣ Define the rectangle bounds** | Εδώ είναι που **how to define rectangle dimensions**. Ο κατασκευαστής `Rectangle` δέχεται `x`, `y`, `width` και `height` σε μονάδες σημείου (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape` είναι η κλάση Aspose που αποδίδει ένα ορθογώνιο. Ορίζοντας `StrokeColor` καθορίζετε το περίγραμμα· μπορείτε επίσης να ορίσετε `FillColor` για γεμιστό χρώμα. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` ρίχνει εξαίρεση αν το ορθογώνιο υπερβαίνει το μέγεθος της σελίδας, αποτρέποντας κατεστραμμένα PDFs. | +| **6️⃣ Add the shape to the page** | Το σχήμα γίνεται μέρος του ρεύματος περιεχομένου της σελίδας. | +| **7️⃣ Save the PDF** | Αποθηκεύει το έγγραφο σε αρχείο που μπορείτε να ανοίξετε με οποιονδήποτε προβολέα PDF. | + +Το παραγόμενο `RectangleDemo.pdf` περιέχει ένα μαύρο ορθογώνιο τοποθετημένο στην επάνω‑αριστερή γωνία της σελίδας, ακριβώς 500 pt πλάτος και 700 pt ύψος. + +![παράδειγμα σχεδίασης ορθογωνίου σε pdf](https://example.com/rectangle-demo.png "παράδειγμα σχεδίασης ορθογωνίου σε pdf") + +*Κείμενο alt εικόνας: παράδειγμα σχεδίασης ορθογωνίου σε pdf που δείχνει ένα μαύρο ορθογώνιο στην επάνω αριστερή γωνία μιας σελίδας PDF.* + +## Πώς να ορίσετε τις διαστάσεις του ορθογωνίου για διαφορετικά μεγέθη σελίδας + +Το παραπάνω απόσπασμα χρησιμοποιεί σταθερές τιμές (`500 x 700`). Σε πραγματικές εφαρμογές συχνά χρειάζεται το ορθογώνιο να προσαρμόζεται στο πλάτος και το ύψος της σελίδας. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Κύρια σημεία:** + +* Χρησιμοποιήστε `page.PageInfo.Width` και `Height` για να διαβάσετε το πραγματικό μέγεθος της σελίδας. +* Ο πολλαπλασιασμός με έναν παράγοντα (π.χ., `0.8f`) σας επιτρέπει να εκφράσετε τις διαστάσεις ως ποσοστό της σελίδας. +* Η κεντράρισμα επιτυγχάνεται αφαιρώντας το μέγεθος του ορθογωνίου από το μέγεθος της σελίδας και διαιρώντας το υπόλοιπο δια του 2. + +## Συνηθισμένα λάθη και πώς να τα αποφύγετε + +| Λάθος | Γιατί συμβαίνει | Διόρθωση | +|-------|----------------|----------| +| Το ορθογώνιο εκτείνεται πέρα από τη σελίδα | Σταθερές διαστάσεις μεγαλύτερες από το μέγεθος της σελίδας. | Καλέστε `page.CheckShapeBoundary` **πριν** προσθέσετε το σχήμα· προσαρμόστε τις διαστάσεις αν ριχτεί εξαίρεση. | +| Το περίγραμμα δεν είναι ορατό | `StrokeColor` παραμένει στην προεπιλογή (`Color.Empty`). | Ορίστε ρητά `StrokeColor` (π.χ., `Color.Black`). | +| Το ορθογώνιο εμφανίζεται εκτός οθόνης | Οι συντεταγμένες ξεκινούν από το κάτω‑αριστερό σημείο στο χώρο PDF· η χρήση συντεταγμένων τύπου οθόνης (πάνω‑αριστερά) προκαλεί αντιστροφή. | Θυμηθείτε ότι το αρχικό σημείο `(0,0)` είναι η κάτω‑αριστερή γωνία. Προσαρμόστε το `y` αναλόγως ή χρησιμοποιήστε `pageHeight - desiredY`. | +| Μη αναμενόμενο πάχος γραμμής | Το προεπιλεγμένο πάχος γραμμής μπορεί να είναι πολύ λεπτό για εκτύπωση. | Ορίστε `rectangleShape.LineWidth = 2;` για να αυξήσετε το πάχος. | + +## Επέκταση του παραδείγματος + +Μόλις μπορείτε να **draw rectangle on pdf**, μπορείτε εύκολα να προσθέσετε και άλλα σχήματα: + +* **EllipseShape** – για κύκλους ή έλλειπτες. +* **PolygonShape** – για προσαρμοσμένα πολύγωνα. +* **TextFragment** – για να ετικετοποιήσετε τα ορθογώνια σας. + +Όλα τα σχήματα ακολουθούν την ίδια ροή εργασίας: ορίστε τα όρια, διαμορφώστε την εμφάνιση, ελέγξτε τα όρια, και, τέλος, προσθέστε τα στη σελίδα. + +## Πλήρες, εκτελέσιμο πρόγραμμα + +Παρακάτω είναι το πλήρες πρόγραμμα που συνδυάζει το βασικό ορθογώνιο και το παράδειγμα δυναμικού μεγέθους. Αντιγράψτε το σε ένα νέο έργο κονσόλας, επαναφέρετε το πακέτο NuGet `Aspose.PDF`, και τρέξτε. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Αναμενόμενο αποτέλεσμα:** +Ανοίξτε το `CombinedRectangles.pdf`. Θα δείτε ένα μαύρο ορθογώνιο αγκυροβολημένο στην κάτω‑αριστερή γωνία και ένα κεντραρισμένο σκούρο‑μπλε ορθογώνιο με ανοιχτό‑κίτρινο γέμισμα. Και τα δύο ορθογώνια σέβονται τα περιθώρια της σελίδας. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **draw rectangle on pdf** με C# και ακριβώς **how to define rectangle dimensions** για σταθερές και προσαρμοστικές διατάξεις. Η προσέγγιση χρησιμοποιεί το `RectangleShape` του Aspose.PDF, τον έλεγχο ορίων, και απλή αριθμητική για προσαρμογή σε οποιοδήποτε μέγεθος σελίδας. + +Στη συνέχεια, μπορείτε να εξερευνήσετε: + +* Προσθήκη **χρωμάτων γεμίσματος** και **στυλ γραμμής** (διακεκομμένες, με κουκκίδες) – δευτερεύουσα λέξη‑κλειδί: how to define rectangle dimensions with style. +* Συνδυασμός πολλαπλών σχημάτων σε μια ενιαία `Page` για δημιουργία διαγραμμάτων ή φορμών. +* Εξαγωγή του PDF σε ροή (stream) για web APIs αντί για αποθήκευση σε δίσκο. + +Πειραματιστείτε με διαφορετικά μεγέθη, χρώματα και θέσεις για να κυριαρχήσετε τα γραφικά PDF στις .NET εφαρμογές σας. Καλή προγραμματιστική! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Οι παρακάτω οδηγοί καλύπτουν στενά σχετιζόμενα θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να προσαρμόσετε τα PDF με Aspose.PDF για .NET: Ορισμός περιθωρίων σελίδας και σχεδίαση γραμμών](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Πώς να προσθέσετε σφραγίδες σελίδας σε PDF χρησιμοποιώντας Aspose.PDF για .NET: Πλήρης οδηγός](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Πώς να προσθέσετε σφραγίδες αριθμού σελίδας σε PDF χρησιμοποιώντας Aspose.PDF για .NET | Υδατογραφήματα & Υπόβαθρα](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/conversion-export/_index.md b/pdf/greek/net/conversion-export/_index.md index 197c64ab88..1f68c3c0f8 100644 --- a/pdf/greek/net/conversion-export/_index.md +++ b/pdf/greek/net/conversion-export/_index.md @@ -114,7 +114,7 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ Μάθετε πώς να μετατρέπετε αποτελεσματικά αρχεία PDF RGB σε κλίμακα του γκρι με το Aspose.PDF για .NET. Αυτός ο οδηγός βήμα προς βήμα διασφαλίζει τη συνέπεια του σχεδιασμού και τη μείωση του μεγέθους του αρχείου. ### [Μετατροπή TeX σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Οδηγός βήμα προς βήμα](./convert-tex-to-pdf-aspose-dotnet-guide/) -Μάθετε πώς να μετατρέπετε απρόσκοπτα αρχεία TeX σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον λεπτομερή οδηγό. Ανακαλύψτε συμβουλές και βέλτιστες πρακτικές για αποτελεσματική μετατροπή. +Μάθετε πώς να μετατρέπετε απρόσκοπτα αρχεία TeX σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον λεπτομερές οδηγό. Ανακαλύψτε συμβουλές και βέλτιστες πρακτικές για αποτελεσματική μετατροπή. ### [Μετατροπή αρχείων κειμένου σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Οδηγός βήμα προς βήμα](./convert-text-files-to-pdf-aspose-dotnet/) Μάθετε πώς να μετατρέπετε απρόσκοπτα αρχεία κειμένου σε επαγγελματικά έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον αναλυτικό οδηγό με παραδείγματα κώδικα και συμβουλές βελτιστοποίησης. @@ -230,13 +230,8 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ ### [Πώς να αποθηκεύσετε PDF με το Aspose – Οδηγός βήμα προς βήμα](./how-to-save-pdf-with-aspose-step-by-step-guide/) Μάθετε πώς να αποθηκεύετε αρχεία PDF χρησιμοποιώντας το Aspose με αναλυτικές οδηγίες βήμα‑βήμα. -## Πρόσθετοι Πόροι - -- [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) -- [Aspose.PDF για αναφορά Net API](https://reference.aspose.com/pdf/net/) -- [Λήψη Aspose.PDF για το Διαδίκτυο](https://releases.aspose.com/pdf/net/) -- [Δωρεάν Υποστήριξη](https://forum.aspose.com/) -- [Προσωρινή Άδεια](https://purchase.aspose.com/temporary-license/) +### [Αποθήκευση PDF ως HTML και μετατροπή σε PDF/X‑4 με το Aspose.PDF σε C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Μάθετε πώς να αποθηκεύσετε PDF ως HTML και να το μετατρέψετε σε PDF/X‑4 χρησιμοποιώντας το Aspose.PDF σε C#. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/greek/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..2bea49f395 --- /dev/null +++ b/pdf/greek/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Αποθήκευση PDF ως HTML και μετατροπή PDF σε PDF/X‑4 χρησιμοποιώντας το + Aspose.PDF για C#. Ο κώδικας βήμα‑προς‑βήμα δείχνει την εξαγωγή σε HTML, την καταγραφή + υπογραφών και την επεξεργασία κατάστασης γραφικών. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: el +lastmod: 2026-08-14 +og_description: Αποθηκεύστε το PDF ως HTML και μετατρέψτε το PDF σε PDF/X‑4 χρησιμοποιώντας + το Aspose.PDF για C#. Ακολουθήστε αυτόν τον πλήρη οδηγό για εξαγωγή HTML, λίστα + υπογραφών και επεξεργασία καταστάσεων γραφικών. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Αποθήκευση PDF ως HTML και μετατροπή σε PDF/X‑4 με το Aspose.PDF – Οδηγός + C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Αποθήκευση PDF ως HTML και μετατροπή σε PDF/X‑4 με το Aspose.PDF σε C# +url: /el/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Αποθήκευση PDF ως HTML και Μετατροπή σε PDF/X‑4 με Aspose.PDF σε C# + +Αν χρειάζεστε **αποθήκευση PDF ως HTML**, το Aspose.Pdf κάνει τη διαδικασία απλή. Αυτό το tutorial δείχνει επίσης πώς να **μετατρέψετε PDF σε PDF/X‑4**, να απαριθμήσετε τα πεδία υπογραφής και να προσθέσετε ένα προσαρμοσμένο ExtGState, παρέχοντάς σας μια πλήρη ροή εργασίας από την αρχή μέχρι το τέλος. + +Θα μάθετε πώς να: + +* Εξαγωγή ενός PDF σε καθαρό HTML ενώ παραλείπεται η εξαγωγή raster εικόνων. +* Μετατροπή ενός εγγράφου PDF στο πρότυπο PDF/X‑4 για εκτύπωση έτοιμη έξοδο. +* Απαρίθμηση όλων των πεδίων υπογραφής σε ένα PDF. +* Εισαγωγή μιας προσαρμοσμένης κατάστασης γραφικών (ExtGState) στην πρώτη σελίδα. + +Όλος ο κώδικας εκτελείται σε .NET 6 ή νεότερο και απαιτεί το πακέτο NuGet Aspose.Pdf for .NET. + +## Προαπαιτούμενα + +| Απαίτηση | Αιτία | +|-------------|--------| +| .NET 6 SDK or newer | Παρέχει το runtime για το δείγμα C#. | +| Visual Studio 2022 (or any C# IDE) | Διευκολύνει την επεξεργασία και την αποσφαλμάτωση. | +| Aspose.Pdf for .NET (v23.12 or later) | Παρέχει τις κλάσεις `Document`, `PdfFormatConversionOptions` και `HtmlSaveOptions` που χρησιμοποιούνται στο tutorial. | +| A sample PDF file (`sample.pdf`) | Το πηγαίο έγγραφο που θα υποβληθεί σε επεξεργασία. | + +Εγκαταστήστε τη βιβλιοθήκη με: + +```bash +dotnet add package Aspose.Pdf +``` + +## Επισκόπηση της λύσης + +Το πρόγραμμα εκτελεί έξι λογικά βήματα: + +1. Φόρτωση του πηγαίου PDF. +2. Απαρίθμηση κάθε ονόματος πεδίου υπογραφής. +3. **Μετατροπή PDF σε PDF/X‑4** και αποθήκευση του αποτελέσματος. +4. **Αποθήκευση PDF ως HTML** ενώ παραλείπεται η εξαγωγή raster εικόνων. +5. Προσθήκη προσαρμοσμένου ExtGState (κατάστασης γραφικών) στην πρώτη σελίδα. +6. Αποθήκευση του τροποποιημένου PDF με τη νέα κατάσταση γραφικών. + +Κάθε βήμα εξηγείται παρακάτω, με πλήρη κώδικα και τη λογική πίσω από τις επιλογές. + +## Βήμα 1: Φόρτωση του εγγράφου PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Γιατί είναι σημαντικό*: `Document` αντιπροσωπεύει ολόκληρο το αρχείο PDF. Η φόρτωσή του μία φορά σας επιτρέπει να επαναχρησιμοποιήσετε το ίδιο αντικείμενο για όλες τις επόμενες λειτουργίες, μειώνοντας το φόρτο I/O. + +## Βήμα 2: Απαρίθμηση όλων των ονομάτων πεδίων υπογραφής + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Γιατί είναι σημαντικό*: Η γνώση των ονομάτων των πεδίων υπογραφής είναι απαραίτητη όταν χρειάζεται να επικυρώσετε, να αφαιρέσετε ή να αντικαταστήσετε ψηφιακές υπογραφές αργότερα. Η συλλογή `Signatures` παρέχει μια γρήγορη, μόνο για ανάγνωση προβολή των πεδίων. + +## Βήμα 3: Μετατροπή PDF σε PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Βασικά σημεία** + +* `PdfStandard.PdfX4` λέει στο Aspose.Pdf να ενσωματώσει όλους τους απαιτούμενους πόρους (γραμματοσειρές, προφίλ χρώματος) και να επιβάλει τους περιορισμούς PDF/X‑4. +* Η μετατροπή εκτελείται στη μνήμη· μόνο το τελικό αρχείο γράφεται στο δίσκο, διατηρώντας τη λειτουργία γρήγορη. + +> **Συμβουλή:** Επαληθεύστε το αποτέλεσμα με έναν επαληθευτή PDF/X‑4 (π.χ., Adobe Preflight) εάν η επόμενη διαδικασία σας είναι αυστηρή σχετικά με τη συμμόρφωση. + +## Βήμα 4: Αποθήκευση PDF ως HTML ενώ παραλείπεται η εξαγωγή raster εικόνων + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Γιατί μπορεί να το θέλετε**: Η έξοδος HTML είναι χρήσιμη για προεπισκόπηση στο web ή ευρετηρίαση περιεχομένου. Η παράλειψη raster εικόνων (`SkipRasterImages = true`) διατηρεί το HTML ελαφρύ και βελτιώνει τους χρόνους φόρτωσης, ειδικά όταν το αρχικό PDF περιέχει σαρώσεις υψηλής ανάλυσης. + +## Βήμα 5: Προσθήκη προσαρμοσμένου ExtGState στην πρώτη σελίδα + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Εξήγηση*: Ένα αντικείμενο **ExtGState** ελέγχει τη διαφάνεια, τη λειτουργία ανάμειξης και άλλες παραμέτρους γραφικών. Προσθέτοντας το `GS0`, μπορείτε αργότερα να αναφερθείτε σε αυτήν την κατάσταση σε ροές περιεχομένου (π.χ., για ημιδιαφανή επικάλυψη). Ο κώδικας χρησιμοποιεί το χαμηλού επιπέδου COS API επειδή το Aspose.Pdf δεν εκθέτει ένα υψηλού επιπέδου wrapper για τη δημιουργία ExtGState. + +## Βήμα 6: Αποθήκευση του τροποποιημένου PDF με το νέο ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Το τελικό αρχείο (`sample_with_extgstate.pdf`) περιέχει: + +* Όλες τις αρχικές σελίδες και το περιεχόμενο. +* Μία συμβατή έκδοση PDF/X‑4 (`sample_pdfx4.pdf`). +* Μία HTML αναπαράσταση χωρίς raster εικόνες (`sample.html`). +* Ένα προσαρμοσμένο ExtGState (`GS0`) προσαρτημένο στους πόρους της πρώτης σελίδας. + +### Αναμενόμενη έξοδος κονσόλας + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Εάν το πηγαίο PDF δεν έχει υπογραφές, η επανάληψη δεν εκτυπώνει τίποτα αλλά συνεχίζει χωρίς σφάλμα. + +## Συνηθισμένες παραλλαγές και περιπτώσεις άκρων + +| Κατάσταση | Προσαρμογή | +|-----------|------------| +| **PDF δεν περιέχει σελίδες** | Ελέγξτε το `doc.Pages.Count` πριν προσπελάσετε το `doc.Pages[1]` για να αποφύγετε το `IndexOutOfRangeException`. | +| **Χρειάζεστε PDF/A‑2b αντί για PDF/X‑4** | Αλλάξτε το `PdfStandard.PdfX4` σε `PdfStandard.PdfA2b` στο `PdfFormatConversionOptions`. | +| **Θέλετε να διατηρήσετε raster εικόνες** | Ορίστε `SkipRasterImages = false` (ή παραλείψτε την ιδιότητα) στο `HtmlSaveOptions`. | +| **Πολλαπλά αντικείμενα ExtGState** | Χρησιμοποιήστε μοναδικά κλειδιά (`GS1`, `GS2`, …) όταν προσθέτετε στο `extGStateDict`. | +| **Μεγάλα PDFs (εκατοντάδες MB)** | Ενεργοποιήστε το `doc.OptimizeResources = true` πριν την αποθήκευση για μείωση της χρήσης μνήμης. | + +## Πλήρης κώδικας (εκτελέσιμος) + + + +## Τι Θα Μάθετε Στη Σειρά; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πλήρης Οδηγός: Μετατροπή PDF σε HTML Χρησιμοποιώντας Aspose.PDF .NET με Προσαρμοσμένες Στρατηγικές](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Μετατροπή PDF σε HTML με Προσαρμοσμένα URLs Εικόνων Χρησιμοποιώντας Aspose.PDF .NET: Ένας Πλήρης Οδηγός](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Μετατροπή PDF σε HTML Χρησιμοποιώντας Aspose.PDF .NET: Αποθήκευση Εικόνων ως Εξωτερικά PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/programming-with-forms/_index.md b/pdf/greek/net/programming-with-forms/_index.md index fb9dcca594..420fda7faa 100644 --- a/pdf/greek/net/programming-with-forms/_index.md +++ b/pdf/greek/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ | [Ορισμός υπότιτλου κουμπιού ραδιοφώνου](./set-radio-button-caption/) Μάθετε πώς να ορίζετε λεζάντες για κουμπιά επιλογής σε PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός βήμα προς βήμα σας καθοδηγεί στη φόρτωση, την τροποποίηση και την αποθήκευση των φορμών PDF. | | [Πλαίσιο κειμένου](./text-box/) | Ανακαλύψτε πώς να προσθέτετε εύκολα πλαίσια κειμένου σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. Βελτιώστε την αλληλεπίδραση του χρήστη. | | [Πώς να δημιουργήσετε PDF με Aspose – Προσθήκη πεδίου φόρμας και σελίδων](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Μάθετε πώς να δημιουργήσετε PDF, να προσθέσετε πεδία φόρμας και να διαχειριστείτε σελίδες χρησιμοποιώντας το Aspose.PDF για .NET. | +| [Δημιουργία πεδίου φόρμας PDF σε C# – οδηγός βήμα‑βήμα](./create-pdf-form-field-in-c-step-by-step-guide/) | Μάθετε πώς να δημιουργήσετε πεδία φόρμας PDF χρησιμοποιώντας C# με αυτόν τον αναλυτικό οδηγό βήμα‑βήμα. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/greek/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..7777db5c2a --- /dev/null +++ b/pdf/greek/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Δημιουργήστε γρήγορα πεδίο φόρμας PDF με C#. Μάθετε πώς να προσθέσετε + πλαίσιο κειμένου σε PDF και να τροποποιήσετε το PDF ώστε να περιλαμβάνει πλαίσιο + κειμένου χρησιμοποιώντας το Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: el +lastmod: 2026-08-14 +og_description: Δημιουργήστε πεδίο φόρμας PDF με C#. Αυτό το σεμινάριο δείχνει πώς + να προσθέσετε ένα πλαίσιο κειμένου σε ένα PDF και να τροποποιήσετε ένα PDF ώστε + να περιλαμβάνει ένα πλαίσιο κειμένου χρησιμοποιώντας το Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Δημιουργία πεδίου φόρμας PDF σε C# – πλήρης οδηγός προγραμματισμού +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Δημιουργία πεδίου φόρμας PDF σε C# – οδηγός βήμα‑προς‑βήμα +url: /el/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Δημιουργία πεδίου φόρμας pdf σε C# – οδηγός βήμα‑βήμα + +Αν χρειάζεστε **create pdf form field** σε ένα έγγραφο, αυτός ο οδηγός σας καθοδηγεί σε όλη τη διαδικασία. Θα δείτε ακριβώς πώς να **add text box to pdf** σε σελίδες, και πώς να **modify pdf to include text box** χρησιμοποιώντας τη βιβλιοθήκη Aspose.PDF για .NET. + +Η εργασία με φόρμες PDF είναι συχνή απαίτηση για συστήματα τιμολόγησης, έρευνες ή οποιαδήποτε ροή εργασίας που συλλέγει εισροές χρηστών. Στο τέλος αυτού του tutorial, θα έχετε ένα επαναχρησιμοποιήσιμο απόσπασμα κώδικα που δημιουργεί ένα πλήρως λειτουργικό πεδίο πλαισίου κειμένου, το τοποθετεί όπου θέλετε και αποθηκεύει το ενημερωμένο PDF—όλα χωρίς να αφήσετε το έργο C#. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7+) +* Visual Studio 2022 ή οποιοδήποτε IDE που υποστηρίζει C# +* Ένα ενεργό license του Aspose.PDF for .NET (η δωρεάν δοκιμή λειτουργεί για ανάπτυξη) +* Ένα αρχείο PDF με όνομα `input.pdf` τοποθετημένο σε γνωστό φάκελο (το tutorial χρησιμοποιεί το `YOUR_DIRECTORY` ως placeholder) + +> **Pro tip:** Αν δεν έχετε ακόμη άδεια, μπορείτε να ζητήσετε ένα προσωρινό κλειδί από την ιστοσελίδα της Aspose· η βιβλιοθήκη λειτουργεί σε λειτουργία αξιολόγησης χωρίς αλλαγές κώδικα. + +## Πώς να δημιουργήσετε pdf form field σε C# (επισκόπηση) + +1. Φορτώστε το υπάρχον έγγραφο PDF. +2. Δημιουργήστε ένα `TextBoxField` και ρυθμίστε το όνομα και την εμφάνισή του. +3. Προσθέστε μια widget annotation που ορίζει το οπτικό ορθογώνιο στην επιλεγμένη σελίδα. +4. Εισάγετε το πεδίο στη συλλογή φορμών του εγγράφου. +5. Αποθηκεύστε το τροποποιημένο PDF. + +Κάθε βήμα εξηγείται λεπτομερώς παρακάτω, με πλήρη παραδείγματα κώδικα και τη λογική πίσω από τις κλήσεις API. + +## Βήμα 1: Φόρτωση του εγγράφου PDF + +Η πρώτη ενέργεια είναι η ανάγνωση του πηγαίου PDF. Η Aspose.PDF αντιπροσωπεύει ένα αρχείο PDF με την κλάση `Document`. Η φόρτωση του εγγράφου σας δίνει πρόσβαση στις σελίδες, τη συλλογή φορμών και άλλες δομές. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Γιατί αυτό είναι σημαντικό:** +Η φόρτωση του αρχείου δημιουργεί ένα μοντέλο PDF στη μνήμη, επιτρέποντάς σας να προσθέτετε, να αφαιρείτε ή να επεξεργάζεστε αντικείμενα χωρίς να καταστρέψετε το αρχικό αρχείο. Το αντικείμενο `Document` εκθέτει επίσης την ιδιότητα `Form`, όπου αργότερα θα **add text box to pdf**. + +## Βήμα 2: Δημιουργία πεδίου πλαισίου κειμένου + +Ένα πεδίο πλαισίου κειμένου είναι ένας τύπος πεδίου φόρμας που επιτρέπει στους χρήστες να πληκτρολογούν ελεύθερο κείμενο. Στην Aspose.PDF το δημιουργείτε με την δημιουργία ενός `TextBoxField`, περνώντας τη σελίδα-στόχο και ένα ορθογώνιο που ορίζει το αρχικό μέγεθος του widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Γιατί αυτό είναι σημαντικό:** +* Το `PartialName` είναι το κλειδί που τα εργαλεία επεξεργασίας φορμών (π.χ. Adobe Acrobat, server‑side parsers) χρησιμοποιούν για να ανακτήσουν την καταχωρημένη τιμή. +* Το ορθογώνιο που περνάτε εδώ ορίζει μόνο το *αρχικό* μέγεθος του widget· μπορείτε αργότερα να προσαρμόσετε τη θέση του με μια widget annotation (επόμενο βήμα). +* Η ρύθμιση του `DefaultAppearance` εξασφαλίζει ότι το κείμενο μέσα στο πλαίσιο εμφανίζεται σταθερά σε όλους τους προβολείς. + +## Βήμα 3: Ορισμός της οπτικής widget annotation + +Ένα πεδίο φόρμας μπορεί να έχει μία ή περισσότερες **widget annotations** που ελέγχουν πού εμφανίζεται το πεδίο σε κάθε σελίδα. Προσθέτοντας ένα widget μπορείτε να τοποθετήσετε το ίδιο λογικό πεδίο σε διαφορετική θέση ή ακόμη και σε πολλαπλές σελίδες. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Γιατί αυτό είναι σημαντικό:** +Το ορθογώνιο του widget καθορίζει τις συντεταγμένες στην οθόνη που βλέπουν οι χρήστες. Αν παραλείψετε αυτό το βήμα, το πεδίο μπορεί να υπάρχει στη δομή δεδομένων του PDF αλλά δεν θα είναι ορατό στον τελικό χρήστη. Η προσθήκη widget είναι το βήμα που πραγματικά **adds text box to pdf**. + +## Βήμα 4: Προσθήκη του ρυθμισμένου πεδίου στη φόρμα του εγγράφου + +Τώρα που το `TextBoxField` είναι πλήρως ρυθμισμένο, πρέπει να το καταχωρίσετε στη συλλογή φορμών του PDF. Αυτό κάνει το πεδίο μέρος της διαδραστικής φόρμας και εξασφαλίζει ότι θα αποθηκευτεί. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Γιατί αυτό είναι σημαντικό:** +Χωρίς την προσθήκη του πεδίου στο `pdfDocument.Form`, ο προβολέας PDF θα αγνοήσει την widget annotation, και τα δεδομένα του πεδίου δεν θα υποβληθούν ποτέ. Αυτή η γραμμή ολοκληρώνει τη λειτουργία **modify pdf to include text box**. + +## Βήμα 5: Αποθήκευση του ενημερωμένου PDF + +Τέλος, γράψτε τις αλλαγές πίσω στο δίσκο. Μπορείτε να αντικαταστήσετε το αρχικό αρχείο ή να δημιουργήσετε ένα νέο· το παράδειγμα αποθηκεύει στο `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Όταν ανοίξετε το `output.pdf` στο Adobe Acrobat Reader, θα δείτε ένα ορθογώνιο πλαίσιο κειμένου με ετικέτα “Comments” στη σελίδα 2. Οι χρήστες μπορούν να κάνουν κλικ μέσα, να πληκτρολογήσουν, και το κείμενο που εισήχθη θα αποτελεί μέρος των δεδομένων φόρμας PDF. + +## Πλήρες λειτουργικό παράδειγμα + +Συνδυάζοντας όλα τα κομμάτια, εδώ είναι ένα πλήρες, έτοιμο‑για‑εκτέλεση πρόγραμμα. Αντιγράψτε το σε ένα νέο κονσολικό project, αντικαταστήστε το `YOUR_DIRECTORY` με πραγματική διαδρομή φακέλου και τρέξτε. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Αναμενόμενη έξοδος:** +Η εκτέλεση του προγράμματος εκτυπώνει δύο γραμμές επιβεβαίωσης στην κονσόλα. Το άνοιγμα του `output.pdf` εμφανίζει ένα πλαίσιο κειμένου στη σελίδα 2 όπου ο χρήστης μπορεί να γράψει σχόλια. Όταν η φόρμα υποβληθεί (π.χ. μέσω του κουμπιού “Submit” του Adobe Acrobat), το όνομα πεδίου `Comments` εμφανίζεται στα εξαγόμενα δεδομένα FDF ή XFDF. + +## Κοινές παραλλαγές και ειδικές περιπτώσεις + +| Κατάσταση | Πώς να προσαρμόσετε τον κώδικα | +|-----------|-------------------------------| +| **Προσθήκη του πεδίου σε διαφορετική σελίδα** | Αλλάξτε το `pdfDocument.Pages[1]` στον επιθυμητό δείκτη σελίδας (`0`‑based). | +| **Δημιουργία πλαισίου κειμένου πολλαπλών γραμμών** | Ορίστε `textBox.Multiline = true;` πριν προσθέσετε το widget. | +| **Ορισμός προεπιλεγμένης τιμής** | Αναθέστε `textBox.Value = "Enter your comments here";`. | +| **Κάνοντας το πεδίο υποχρεωτικό** | Ορίστε `textBox.Required = true;`. | +| **Τοποθέτηση του πεδίου σε πολλαπλές σελίδες** | Καλέστε `textBox.AddWidgetAnnotation` για κάθε επιπλέον ορθογώνιο στις στόχες σελίδες. | +| **Χρήση προσαρμοσμένης γραμματοσειράς** | Φορτώστε τη γραμματοσειρά με `FontRepository.AddFont("path/to/font.ttf")` και αναφερθείτε σε αυτήν στο `DefaultAppearance`. | + +**Pro tip:** Πάντα να επαληθεύετε τις συντεταγμένες του ορθογωνίου σε σχέση με το μέγεθος της σελίδας (`pdfDocument.Pages[1].Rect`). Αν το widget βρίσκεται εκτός των ορίων της σελίδας, οι προβολείς μπορεί να το κόψουν ή να το κρύψουν. + +## Δοκιμή του πεδίου φόρμας + +1. Ανοίξτε το `output.pdf` στο Adobe Acrobat Reader. +2. Κάντε κλικ μέσα στο πλαίσιο “Comments”; ο κέρσορας πρέπει να εμφανιστεί. +3. Πληκτρολογήστε οποιοδήποτε κείμενο και πατήστε **Tab** ή κάντε κλικ αλλού. +4. Επιλέξτε **File → Save As** για να αποθηκεύσετε την καταχωρημένη τιμή. +5. (Προαιρετικά) Χρησιμοποιήστε το API `Form` της Aspose.PDF για να εξάγετε την τιμή προγραμματιστικά: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Αυτό το απόσπασμα δείχνει ότι το πεδίο είναι όχι μόνο ορατό, αλλά και ανακτήσιμο μέσω κώδικα—σημαντικό για επεξεργασία από τον server. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **create pdf form field** σε C# από την αρχή μέχρι το τέλος. Το tutorial κάλυψε τη φόρτωση PDF, τη ρύθμιση ενός `TextBoxField`, την προσθήκη widget annotation, την καταχώριση του πεδίου και την αποθήκευση του αποτελέσματος. Με αυτά τα δομικά στοιχεία μπορείτε να **add text box to pdf** έγγραφα, **modify pdf to include text box**, και να επεκτείνετε την προσέγγιση σε άλλους τύπους πεδίων όπως checkboxes, radio buttons ή dropdowns. + +Στη συνέχεια, εξερευνήστε σχετικές θεματικές όπως **extracting form data**, **flattening PDF forms**, ή **styling fields with borders and colors**. Κάθε μία από αυτές τις έννοιες βασίζεται στο ίδιο βασικό API που μόλις μάθατε, επιτρέποντάς σας να δημιουργήσετε σύνθετα διαδραστικά PDFs εξ ολοκλήρου σε C#. + +Καλή προγραμματιστική, και μη διστάσετε να πειραματιστείτε με διαφορετικά ορθογώνια, γραμματοσειρές και κανόνες επικύρωσης ώστε να ταιριάζουν στις ανάγκες της εφαρμογής σας! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Οι παρακάτω οδηγίες καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στα δικά σας έργα. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/programming-with-operators/_index.md b/pdf/greek/net/programming-with-operators/_index.md index d85e0461f7..98c413fc5d 100644 --- a/pdf/greek/net/programming-with-operators/_index.md +++ b/pdf/greek/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ | [Σχεδίαση XForm στη σελίδα](./draw-xform-on-page/) | μάθετε πώς να σχεδιάζετε XForms σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. | | [Τελεστές PDF](./pdf-operators/) | Οδηγός βήμα προς βήμα για τη χρήση τελεστών PDF με το Aspose.PDF για .NET. Προσθέστε μια εικόνα σε μια σελίδα PDF και καθορίστε τη θέση της. | | [Αφαίρεση γραφικών αντικειμένων σε αρχείο PDF](./remove-graphics-objects/) Μάθετε πώς να αφαιρείτε γραφικά αντικείμενα από ένα αρχείο PDF χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον οδηγό βήμα προς βήμα. Απλοποιήστε τις εργασίες χειρισμού PDF. | +| [Δημιουργία κενής λεξικού PDF σε C# με Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Μάθετε πώς να δημιουργήσετε ένα κενό λεξικό PDF σε C# χρησιμοποιώντας το Aspose.Pdf. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/greek/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..0fb226e2fc --- /dev/null +++ b/pdf/greek/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: Δημιουργήστε κενό λεξικό PDF σε C# χρησιμοποιώντας το Aspose.Pdf – μάθετε + πώς να προσθέσετε μια κατάσταση γραφικών στη συλλογή ExtGState και να τροποποιήσετε + τα PDF προγραμματιστικά. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: el +lastmod: 2026-08-14 +og_description: Δημιουργήστε κενό λεξικό PDF σε C# με το Aspose.Pdf. Ακολουθήστε αυτόν + τον πλήρη οδηγό για να προσθέσετε μια προσαρμοσμένη κατάσταση γραφικών στη συλλογή + ExtGState ενός PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Δημιουργία κενής λεξικού PDF σε C# – Οδηγός βήμα‑βήμα για το Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Δημιουργία κενού λεξικού PDF σε C# με το Aspose.Pdf +url: /el/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Δημιουργία κενής λεξικού PDF σε C# με Aspose.Pdf + +Αν χρειάζεστε να **create empty PDF dictionary** αντικείμενα ενώ εργάζεστε με αρχεία PDF, αυτός ο οδηγός σας δείχνει ακριβώς πώς να το κάνετε σε C# χρησιμοποιώντας τη βιβλιοθήκη Aspose.Pdf. Είτε δημιουργείτε μια προσαρμοσμένη κατάσταση γραφικών, προσθέτετε έναν νέο πόρο ή προετοιμάζετε ένα πρότυπο για μελλοντική χρήση, τα παρακάτω βήματα σας παρέχουν μια πλήρη, εκτελέσιμη λύση. + +Θα μάθετε πώς να φορτώσετε ένα PDF, να αποκτήσετε πρόσβαση στο λεξικό πόρων της πρώτης σελίδας, να δημιουργήσετε ένα ολοκαίνουργιο `CosPdfDictionary` και να το εισάγετε στη συλλογή `ExtGState`. Στο τέλος του οδηγού θα έχετε ένα λειτουργικό `output.pdf` που περιέχει το νεοδημιουργημένο λεξικό. + +## Προαπαιτούμενα + +- .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.6+) +- Visual Studio 2022 ή οποιοδήποτε IDE C# προτιμάτε +- Άδεια Aspose.Pdf για .NET (ή προσωρινό κλειδί αξιολόγησης) +- Ένα δείγμα PDF με όνομα **input.pdf** τοποθετημένο σε φάκελο που ελέγχετε (η διαδρομή του φακέλου θα χρησιμοποιηθεί ως `dataDir`) + +Δεν απαιτούνται επιπλέον πακέτα NuGet πέρα από το `Aspose.Pdf`. + +## Βήμα 1: Ρύθμιση του έργου και αναφορά στο Aspose.Pdf + +1. Δημιουργήστε ένα νέο έργο **Console App** στο Visual Studio. +2. Ανοίξτε το **NuGet Package Manager** και εγκαταστήστε το `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Προσθέστε τις ακόλουθες οδηγίες `using` στην αρχή του `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Γιατί αυτά τα namespaces;* `Aspose.Pdf` περιέχει την κεντρική κλάση `Document`, ενώ το `Aspose.Pdf.Operators.Gfx` παρέχει `CosPdfDictionary`, `CosPdfNumber` και συναφή αντικείμενα PDF χαμηλού επιπέδου που απαιτούνται για τη δημιουργία **create empty PDF dictionary** δομών. + +## Βήμα 2: Φόρτωση του πηγαίου PDF + +Η πρώτη ενέργεια είναι η φόρτωση του υπάρχοντος αρχείου PDF σε μια παρουσία `Document`. Αυτό σας δίνει πρόσβαση σε όλες τις σελίδες, τους πόρους και τα λεξικά χαμηλού επιπέδου. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Επεξήγηση*: Το `Document` διαβάζει το αρχείο στη μνήμη και προετοιμάζει τις εσωτερικές δομές. Η δήλωση `using` εξασφαλίζει ότι το χειριστήριο του αρχείου απελευθερώνεται μετά την ολοκλήρωση της επεξεργασίας. + +## Βήμα 3: Πρόσβαση στο λεξικό πόρων της πρώτης σελίδας + +Κάθε σελίδα PDF έχει ένα λεξικό **Resources** που ομαδοποιεί γραμματοσειρές, εικόνες, αντικείμενα ExtGState και άλλους κοινόχρηστους πόρους. Για να εισάγουμε μια νέα κατάσταση γραφικών πρέπει να επεξεργαστούμε αυτό το λεξικό. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` είναι μια βοηθητική κλάση που σας επιτρέπει να αντιμετωπίζετε ένα λεξικό PDF όπως ένα C# `Dictionary`. + +## Βήμα 4: Ανάκτηση (ή δημιουργία) της συλλογής ExtGState + +`ExtGState` περιέχει αντικείμενα κατάστασης γραφικών όπως διαφάνεια, λειτουργία ανάμειξης και πλάτος γραμμής. Εάν το πηγαίο PDF περιέχει ήδη μια καταχώρηση `ExtGState`, την επαναχρησιμοποιούμε· διαφορετικά δημιουργούμε ένα νέο κενό λεξικό. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Γιατί αυτή η έλεγχος;* Κάποια PDFs παραλείπουν εντελώς την καταχώρηση `ExtGState`. Με την αντιμετώπιση και των δύο περιπτώσεων, ο οδηγός παραμένει ανθεκτικός για οποιοδήποτε αρχείο εισόδου. + +## Βήμα 5: **Create empty PDF dictionary** για μια νέα κατάσταση γραφικών + +Τώρα δημιουργούμε πραγματικά αντικείμενα **create empty PDF dictionary** που ορίζουν τις παραμέτρους της κατάστασης γραφικών. Το λεξικό ξεκινά κενό και προσθέτουμε τα απαιτούμενα κλειδιά: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Τι κάνει κάθε καταχώρηση + +| Κλειδί | Τύπος | Σημασία | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Διαφάνεια γραμμής (εύρος 0‑1). | +| **ca** | `CosPdfNumber` | Διαφάνεια γεμίσματος (εύρος 0‑1). | +| **BM** | `CosPdfName` | Λειτουργία ανάμειξης· `"Normal"` είναι η πιο κοινή. | + +Επειδή ξεκινήσαμε με ένα **empty PDF dictionary**, έχουμε πλήρη έλεγχο πάνω σε ποιες καταχωρήσεις προστίθενται. Μπορείτε να επεκτείνετε αυτό το λεξικό με πρόσθετες παραμέτρους κατάστασης γραφικών όπως `LW` (πλάτος γραμμής) ή `LC` (άκρο γραμμής) όποτε χρειάζεται. + +## Βήμα 6: Εισαγωγή της νέας κατάστασης γραφικών στο ExtGState + +Το λεξικό `ExtGState` λειτουργεί όπως ένας χάρτης όπου κάθε καταχώρηση αναγνωρίζεται από ένα όνομα (π.χ., `GS0`, `GS1`). Προσθέτουμε το φρέσκο μας λεξικό κάτω από ένα μοναδικό κλειδί. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Αν σκοπεύετε να προσθέσετε πολλαπλές καταστάσεις, αυξήστε το επίθημα (`GS1`, `GS2`, …) για να αποφύγετε συγκρούσεις ονομάτων. + +## Βήμα 7: Αποθήκευση του τροποποιημένου PDF + +Τέλος, γράψτε τις αλλαγές πίσω στο δίσκο. Η μέθοδος `Save` σειριοποιεί αυτόματα τα ενημερωμένα λεξικά. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Ανοίξτε το `output.pdf` σε οποιονδήποτε προβολέα PDF και ελέγξτε την καταχώρηση **Resources → ExtGState** (οι περισσότεροι προβολείς την κρύβουν, αλλά εργαλεία όπως το Adobe Acrobat Preflight ή το PDF‑Tron μπορούν να την αποκαλύψουν). Θα πρέπει να δείτε μια καταχώρηση `GS0` που περιέχει τις τιμές διαφάνειας και λειτουργίας ανάμειξης που ορίσατε. + +## Πλήρες λειτουργικό παράδειγμα + +Συνδυάζοντας όλα τα κομμάτια, εδώ είναι το πλήρες πρόγραμμα που μπορείτε να αντιγράψετε‑επικολλήσετε στο `Program.cs` και να εκτελέσετε: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Αναμενόμενη έξοδος** – Η κονσόλα εκτυπώνει μια γραμμή επιβεβαίωσης, και το `output.pdf` περιέχει τη νέα καταχώρηση `GS0` κάτω από το `ExtGState`. Όταν αποδίδετε μια σελίδα που αναφέρεται στο `GS0` (π.χ., μέσω του τελεστή ροής περιεχομένου `gs`), οι γραμμές θα είναι πλήρως αδιαφανείς ενώ τα γεμίσματα θα είναι 50 % διαφανή. + +## Συχνές ερωτήσεις και διαχείριση ειδικών περιπτώσεων + +| Ερώτηση | Απάντηση | +|----------|--------| +| *Τι γίνεται αν το PDF έχει πολλαπλές σελίδες;* | Το παράδειγμα στοχεύει στην πρώτη σελίδα (`Pages[1]`). Για να επηρεάσετε όλες τις σελίδες, κάντε βρόχο μέσω του `pdfDocument.Pages` και επαναλάβετε τα βήματα 3‑5 για τους πόρους κάθε σελίδας. | +| *Μπορώ να προσθέσω το λεξικό σε μια σελίδα που έχει ήδη μια καταχώρηση ExtGState με όνομα “GS0”;* | Ναι, αλλά πρέπει να χρησιμοποιήσετε διαφορετικό κλειδί (`GS1`, `GS2`, …) για να αποφύγετε την αντικατάσταση της υπάρχουσας καταχώρησης. | +| *Είναι ασφαλές να τροποποιήσετε το λεξικό μετά την αποθήκευση;* | Μόλις καλέσετε το `Save`, η αναπαράσταση στη μνήμη αποσυνδέεται από το αρχείο. Μπορείτε να συνεχίσετε την επεξεργασία του αντικειμένου `Document` και να καλέσετε ξανά το `Save` αν χρειαστεί. | +| *Χρειάζομαι άδεια για το Aspose.Pdf για να χρησιμοποιήσω ` | | + +## Τι Θα Πρέπει Να Μάθετε Στη Σειρά; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικά θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κατακτήσετε πρόσθετες λειτουργίες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να Δημιουργήσετε Διακεκομμένες Γραμμές σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Οδηγός Βήμα‑Βήμα](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Πώς να Αφαιρέσετε Γραφικά από PDF χρησιμοποιώντας το Aspose.PDF .NET: Πλήρης Οδηγός](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Πώς να Δημιουργήσετε Πολυεπίπεδα PDF χρησιμοποιώντας το Aspose.PDF για .NET: Εκτενής Οδηγός](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/programming-with-security-and-signatures/_index.md b/pdf/greek/net/programming-with-security-and-signatures/_index.md index bc91938bc5..7d8226e641 100644 --- a/pdf/greek/net/programming-with-security-and-signatures/_index.md +++ b/pdf/greek/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [Έλεγχος υπογραφών PDF σε C# – Πώς να διαβάσετε υπογεγραμμένα αρχεία PDF](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Μάθετε πώς να ελέγχετε και να διαβάζετε υπογεγραμμένα αρχεία PDF χρησιμοποιώντας C# και Aspose.PDF. | | [Πώς να επισκευάσετε αρχεία PDF – Πλήρης οδηγός C# με Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Μάθετε πώς να επισκευάσετε αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET με οδηγίες βήμα προς βήμα. | | [Επαλήθευση υπογραφής PDF σε C# – Πλήρης προγραμματιστικός οδηγός](./verify-pdf-signature-in-c-complete-programming-guide/) | Μάθετε πώς να ελέγχετε και να επαληθεύετε ψηφιακές υπογραφές PDF χρησιμοποιώντας C# και Aspose.PDF. | +| [Δημιουργία επιλογών υπογραφής σε C# – πλήρης οδηγός ψηφιακής υπογραφής](./create-signature-options-in-c-full-guide-to-digital-signing/) | Μάθετε πώς να δημιουργήσετε επιλογές υπογραφής σε C# για ψηφιακή υπογραφή PDF με το Aspose.PDF. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/greek/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..b9211cc3f8 --- /dev/null +++ b/pdf/greek/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,331 @@ +--- +category: general +date: 2026-08-14 +description: Δημιουργήστε επιλογές υπογραφής σε C# για την εφαρμογή ψηφιακής υπογραφής. + Μάθετε πώς να διαμορφώσετε την υπογραφή, να υλοποιήσετε μια προσαρμοσμένη συνάρτηση + κατακερματισμού και να υπογράψετε έγγραφα προγραμματιστικά. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: el +lastmod: 2026-08-14 +og_description: Δημιουργήστε επιλογές υπογραφής σε C# και εφαρμόστε μια ψηφιακή υπογραφή. + Αυτό το σεμινάριο σας καθοδηγεί στη ρύθμιση της υπογραφής, την προσθήκη προσαρμοσμένης + συνάρτησης κατακερματισμού και την υπογραφή ενός εγγράφου. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Δημιουργία επιλογών υπογραφής σε C# – οδηγός ψηφιακής υπογραφής βήμα προς + βήμα +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Δημιουργία επιλογών υπογραφής σε C# – πλήρης οδηγός για την ψηφιακή υπογραφή +url: /el/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Δημιουργία επιλογών υπογραφής σε C# – πλήρης οδηγός ψηφιακής υπογραφής + +Δημιουργήστε επιλογές υπογραφής σε C# για να διαμορφώσετε μια ροή εργασίας ψηφιακής υπογραφής. Αυτό το tutorial δείχνει πώς να εφαρμόσετε ψηφιακή υπογραφή, να υλοποιήσετε μια προσαρμοσμένη συνάρτηση κατακερματισμού και να υπογράψετε ένα έγγραφο χρησιμοποιώντας την κλάση `SignatureOptions`. Αν ποτέ χρειαστείτε να υπογράψετε ένα PDF, XML ή οποιοδήποτε δυαδικό payload από μια εφαρμογή .NET, τα παρακάτω βήματα σας παρέχουν μια έτοιμη προς εκτέλεση λύση. + +Θα μάθετε πώς να: + +* να διαμορφώσετε το `SignatureOptions` με έναν προσαρμοσμένο αλγόριθμο κατακερματισμού, +* να καλέσετε σωστά τη μέθοδο υπογραφής, +* να επαληθεύσετε ότι η υπογραφή εφαρμόστηκε, +* να αποφύγετε κοινά προβλήματα κατά τη διαμόρφωση της υπογραφής. + +Οι μοναδικές προαπαιτήσεις είναι ένα πρόσφατο .NET SDK (≥ .NET 6) και μια βιβλιοθήκη υπογραφής που εκθέτει το `SignatureOptions` (π.χ., **GroupDocs.Signature**, **Aspose.Signature**, ή ένα παρόμοιο API). Δεν απαιτούνται εξωτερικά εργαλεία. + +--- + +## Prerequisites + +| Απαίτηση | Γιατί είναι σημαντικό | +|-------------|----------------| +| .NET 6 SDK ή νεότερο | Παρέχει τις σύγχρονες δυνατότητες γλώσσας που χρησιμοποιούνται στα παραδείγματα. | +| Ένα πακέτο NuGet βιβλιοθήκης υπογραφής (π.χ., `GroupDocs.Signature`) | Παρέχει τον τύπο `SignatureOptions` και τη μέθοδο επέκτασης `Sign`. | +| Πρόσβαση σε ιδιωτικό κλειδί ή πιστοποιητικό | Απαιτείται για τη δημιουργία επαληθεύσιμης ψηφιακής υπογραφής. | + +Install the library with the standard CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Step 1: Create signature options + +## Βήμα 1: Δημιουργία επιλογών υπογραφής + +Το πρώτο βήμα είναι η δημιουργία ενός αντικειμένου `SignatureOptions` και η ρύθμιση των ιδιοτήτων που ελέγχουν τη διαδικασία υπογραφής. Αυτό το αντικείμενο λέει στη βιβλιοθήκη *τι* να υπογράψει και *πώς* να το κάνει. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Γιατί είναι σημαντικό:** Το `SignatureOptions` λειτουργεί ως σύμβαση μεταξύ του κώδικά σας και της μηχανής υπογραφής. Διαμορφώνοντάς το εκ των προτέρων, αποφεύγετε την επανάληψη του ίδιου κώδικα όταν υπογράφετε πολλά έγγραφα. + +--- + +## Step 2: Implement a custom hash function + +## Βήμα 2: Υλοποίηση προσαρμοσμένης συνάρτησης κατακερματισμού + +Μια *προσαρμοσμένη συνάρτηση κατακερματισμού* σας δίνει πλήρη έλεγχο πάνω στο digest που υπογράφει ο αλγόριθμος υπογραφής. Αυτό είναι χρήσιμο όταν η προεπιλεγμένη συνάρτηση (SHA‑256) δεν πληροί τις απαιτήσεις συμμόρφωσης ή όταν χρειάζεται να κατακερματίσετε ένα υποσύνολο του εγγράφου. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Γιατί είναι σημαντικό:** Αναθέτοντας το `CustomSignHash`, αντικαθιστάτε το εσωτερικό βήμα κατακερματισμού της βιβλιοθήκης με το `MyHash`. Η μηχανή υπογραφής θα υπογράψει τώρα τα bytes που επιστρέφει η συνάρτησή σας, εξασφαλίζοντας τη συμμόρφωση με οποιαδήποτε προσαρμοσμένη πολιτική. + +--- + +## Step 3: Load the document and apply digital signature + +## Βήμα 3: Φόρτωση του εγγράφου και εφαρμογή ψηφιακής υπογραφής + +Με τις επιλογές έτοιμες, μπορείτε τώρα να ανοίξετε το αρχείο-στόχο και να καλέσετε τη μέθοδο υπογραφής. Η μέθοδος `Sign` παρέχεται από τη βιβλιοθήκη και χρησιμοποιεί τις ρυθμισμένες `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Γιατί είναι σημαντικό:** Η κλήση στο `Sign` εκτελεί εσωτερικά τρεις ενέργειες: + +1. **Υπολογισμός κατακερματισμού** – τώρα ανατίθεται στη δική σας προσαρμοσμένη συνάρτηση κατακερματισμού. +2. **Δημιουργία υπογραφής** – χρησιμοποιώντας το ιδιωτικό κλειδί που παρέχεται στη διαμόρφωση της βιβλιοθήκης. +3. **Ενσωμάτωση** – η παραγόμενη υπογραφή προστίθεται στο αρχείο εξόδου. + +Αν αποτύχει οποιοδήποτε βήμα, η μέθοδος επιστρέφει `false`, επιτρέποντάς σας να χειριστείτε το σφάλμα με χάρη. + +--- + +## Step 4: Verify that the document is signed + +## Βήμα 4: Επαλήθευση ότι το έγγραφο είναι υπογεγραμμένο + +Μια γρήγορη επαλήθευση επιβεβαιώνει ότι η υπογραφή εφαρμόστηκε σωστά. Οι περισσότερες βιβλιοθήκες εκθέτουν μια μέθοδο `Verify` που ελέγχει την ακεραιότητα του υπογεγραμμένου αρχείου. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Γιατί είναι σημαντικό:** Η επαλήθευση διασφαλίζει ότι το υπογεγραμμένο έγγραφο δεν έχει τροποποιηθεί μετά την υπογραφή και ότι η προσαρμοσμένη κατακερματιστική συνάρτηση παρήγαγε ένα συμβατό digest. + +--- + +## How to configure signature for different file types + +## Πώς να διαμορφώσετε την υπογραφή για διαφορετικούς τύπους αρχείων + +Το ίδιο αντικείμενο `SignatureOptions` μπορεί να επαναχρησιμοποιηθεί για PDF, έγγραφα Word, εικόνες ή απλά δυαδικά αρχεία. Η μόνη απαραίτητη αλλαγή είναι η συγκεκριμένη κλάση επιλογών (π.χ., `PdfSignatureOptions`, `WordSignatureOptions`). Ακολουθεί ένα γρήγορο παράδειγμα για μια εικόνα JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Γιατί είναι σημαντικό:** Η κατανόηση του πώς να *διαμορφώσετε την υπογραφή* για κάθε μορφή σας επιτρέπει να επεκτείνετε την ίδια βάση κώδικα σε πολλαπλούς τύπους εγγράφων χωρίς να ξαναγράψετε τη λογική κατακερματισμού. + +--- + +## Common pitfalls and best practices + +## Συνηθισμένα προβλήματα και βέλτιστες πρακτικές + +| Πρόβλημα | Συνιστώμενη λύση | +|---------|-----------------| +| Παράλειψη του ορισμού του `CustomSignHash` μετά τη δημιουργία του `SignatureOptions` | Αναθέστε το delegate αμέσως μετά την κατασκευή του αντικειμένου επιλογών. | +| Χρήση αλγορίθμου κατακερματισμού που δεν υποστηρίζεται από το πιστοποιητικό υπογραφής | Επαληθεύστε ότι η χρήση κλειδιού του πιστοποιητικού ταιριάζει με το μήκος του κατακερματισμού (π.χ., RSA‑2048 με SHA‑512). | +| Παράβλεψη της ανάγκης απελευθέρωσης των αντικειμένων `Signature` | Τυλίξτε το αντικείμενο `Signature` σε ένα μπλοκ `using` για να απελευθερώσετε τους χειριστές αρχείων. | +| Αποθήκευση του υπογεγραμμένου αρχείου πάνω στο αρχικό αρχείο | Πάντα γράφετε σε νέο μονοπάτι αρχείου (`outputPath`) για να διατηρήσετε το αρχικό έγγραφο. | + +--- + +## Full working example + +## Πλήρες λειτουργικό παράδειγμα + +Παρακάτω υπάρχει ένα αυτόνομο πρόγραμμα που συνδυάζει όλα τα κομμάτια. Αντιγράψτε το σε ένα νέο έργο κονσόλας και εκτελέστε το· η κονσόλα θα αναφέρει επιτυχία ή αποτυχία. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Αναμενόμενη έξοδος** + +``` +Signature verified successfully. +``` + +Αν η κονσόλα εμφανίσει «Signing failed.» ή «Signature verification failed.», ελέγξτε ξανά τη διαμόρφωση του πιστοποιητικού και βεβαιωθείτε ότι η προσαρμοσμένη συνάρτηση κατακερματισμού επιστρέφει έναν πίνακα byte του αναμενόμενου μεγέθους. + +--- + +## Conclusion + +## Συμπέρασμα + +Τώρα γνωρίζετε πώς να **δημιουργήσετε επιλογές υπογραφής** σε C#, να συνδέσετε μια **προσαρμοσμένη συνάρτηση κατακερματισμού** και να **εφαρμόσετε ψηφιακή υπογραφή** σε οποιοδήποτε υποστηριζόμενο έγγραφο. Το tutorial κάλυψε ολόκληρο τον κύκλο ζωής: τη διαμόρφωση των επιλογών, την υπογραφή του αρχείου και την επαλήθευση του αποτελέσματος. Επαναχρησιμοποιώντας το ίδιο αντικείμενο `SignatureOptions`, μπορείτε επίσης να **διαμορφώσετε την υπογραφή** για εικόνες, αρχεία Word ή ακατέργαστα δυαδικά αρχεία. + +## What’s next? + +## Τι ακολουθεί; + +* Εξερευνήστε πρόσθετες ιδιότητες του `SignatureOptions` όπως οπτικές σφραγίδες, διακομιστές χρονικής σήμανσης και αλυσίδες πιστοποιητικών – αυτά ευθυγραμμίζονται με τη λέξη‑κλειδί **apply digital signature**. +* Πειραματιστείτε με άλλους αλγόριθμους κατακερματισμού (π.χ., Blake2b) αντικαθιστώντας την υλοποίηση μέσα στο `MyHash`. +* Ενσωματώστε τη ροή υπογραφής σε ένα web API για να επιτρέψετε υπογραφή εγγράφων σε πραγματικό χρόνο – μια φυσική επέκταση του **how to sign document** σε αρχιτεκτονική προσανατολισμένη σε υπηρεσίες. + +Μη διστάσετε να προσαρμόσετε τον κώδικα στις δικές σας πολιτικές ασφαλείας και να μοιραστείτε την εμπειρία σας στα σχόλια. Καλές υπογραφές! + +## What Should You Learn Next? + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να αλλάξετε τη γλώσσα υπογραφής PDF με το Aspose.PDF για .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Tutorial ψηφιακής υπογραφής Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial ψηφιακής υπογραφής Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/programming-with-stamps-and-watermarks/_index.md b/pdf/greek/net/programming-with-stamps-and-watermarks/_index.md index 5adcc628bf..fc7cacb9ad 100644 --- a/pdf/greek/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/greek/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ | [Κείμενο στο υποσέλιδο ενός αρχείου PDF](./text-in-footer/) | Μάθετε πώς να προσθέτετε κείμενο στο υποσέλιδο ενός αρχείου PDF με το Aspose.PDF για .NET. | | [Κείμενο στην κεφαλίδα ενός αρχείου PDF](./text-in-header/) | Μάθετε να προσθέτετε κεφαλίδες κειμένου σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτό το βήμα προς βήμα σεμινάριο. Βελτιώστε τα έγγραφά σας αποτελεσματικά και αποδοτικά. | | [Προσθήκη αρίθμησης Bates σε PDF με C# – Πλήρης οδηγός](./add-bates-numbering-pdf-in-c-complete-guide/) Μάθετε πώς να προσθέσετε αρίθμηση Bates σε PDF με C# χρησιμοποιώντας το Aspose.PDF για .NET. | +| [Πώς να ορίσετε επιλογές αρίθμησης Bates σε C# – πλήρης οδηγός](./how-to-set-bates-numbering-options-in-c-complete-guide/) Μάθετε πώς να ρυθμίσετε τις επιλογές αρίθμησης Bates σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/greek/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..0f7b6f0b63 --- /dev/null +++ b/pdf/greek/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Πώς να ορίσετε επιλογές αρίθμησης Bates σε C# χρησιμοποιώντας το GroupDocs. + Ακολουθήστε αυτό το βήμα‑βήμα οδηγό για να προσθέσετε προσαρμοσμένα προθέματα και + αριθμούς εκκίνησης κατά τη μετατροπή Word σε PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: el +lastmod: 2026-08-14 +og_description: Πώς να ορίσετε γρήγορα τις επιλογές αρίθμησης Bates σε C#. Αυτός ο + οδηγός σας δείχνει πώς να προσθέσετε προσαρμοσμένα πρόθεμα και αριθμούς έναρξης + κατά τη μετατροπή Word σε PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Πώς να ορίσετε επιλογές αρίθμησης Bates σε C# – οδηγός βήμα‑προς‑βήμα +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Πώς να ορίσετε τις επιλογές αρίθμησης Bates σε C# – πλήρης οδηγός +url: /el/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να ορίσετε επιλογές αρίθμησης Bates σε C# – πλήρης οδηγός + +Αν χρειάζεστε **πώς να ορίσετε επιλογές αρίθμησης Bates** σε C#, αυτός ο οδηγός σας οδηγεί βήμα προς βήμα. Θα μάθετε πώς να ρυθμίσετε τον αριθμό εκκίνησης, να προσθέσετε πρόθεμα και να εφαρμόσετε την αρίθμηση κατά τη μετατροπή ενός εγγράφου Word σε PDF χρησιμοποιώντας το GroupDocs API. + +Η επεξεργασία εγγράφων συχνά απαιτεί μοναδικά αναγνωριστικά σε κάθε σελίδα για νομικούς ή αρχειακούς σκοπούς. Στο τέλος αυτού του tutorial θα έχετε ένα επαναχρησιμοποιήσιμο snippet που μπορείτε να ενσωματώσετε σε οποιοδήποτε .NET project, είτε δημιουργείτε εργαλείο υποστήριξης διαδίκων είτε αυτόματο γεννήτρια αναφορών. Δεν απαιτούνται εξωτερικά εργαλεία—μόνο η βιβλιοθήκη GroupDocs.Conversion και μερικές γραμμές C#. + +## Τι θα χρειαστείτε + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 SDK ή νεότερη έκδοση εγκατεστημένη +* Visual Studio 2022 (ή οποιοδήποτε IDE που υποστηρίζει .NET) +* Έγκυρη άδεια GroupDocs.Conversion (η δωρεάν δοκιμή λειτουργεί για δοκιμές) +* Ένα δείγμα εγγράφου Word (`input.docx`) που θέλετε να αριθμήσετε + +Αυτές οι προαπαιτήσεις εξασφαλίζουν ότι ο κώδικας εκτελείται χωρίς πρόσθετη διαμόρφωση. + +## Πώς να ορίσετε επιλογές αρίθμησης Bates – επισκόπηση + +Ο πυρήνας του **πώς να ορίσετε επιλογές αρίθμησης Bates** βρίσκεται σε τρία αντικείμενα: + +1. `Document` – φορτώνει το αρχείο προέλευσης. +2. `BatesNumberingOptions` – περιέχει τον αριθμό εκκίνησης, το πρόθεμα και άλλες λεπτομέρειες μορφοποίησης. +3. `AddBatesNumbering` – η μέθοδος που ενσωματώνει την αρίθμηση σε κάθε σελίδα. + +Η κατανόηση του λόγου ύπαρξης κάθε στοιχείου σας βοηθά να προσαρμόσετε τη λύση σε πιο σύνθετα σενάρια, όπως προσαρμοσμένες γραμματοσειρές ή πολυγλωσσική αρίθμηση. + +## Βήμα 1: Εγκατάσταση του πακέτου NuGet GroupDocs.Conversion + +Ανοίξτε ένα τερματικό στον φάκελο της λύσης σας και εκτελέστε: + +```bash +dotnet add package GroupDocs.Conversion +``` + +Το **GroupDocs API** παρέχει την κλάση `Document` και τη μέθοδο επέκτασης `AddBatesNumbering` που χρησιμοποιείται αργότερα στο tutorial. + +## Βήμα 2: Φόρτωση του αρχείου προέλευσης + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Γιατί αυτό το βήμα;* +Η φόρτωση του αρχείου δημιουργεί μια αναπαράσταση στη μνήμη που η μηχανή μετατροπής μπορεί να χειριστεί. Χωρίς ένα αντικείμενο `Document` δεν μπορείτε να εφαρμόσετε αρίθμηση Bates ή οποιαδήποτε άλλη μετατροπή. + +## Βήμα 3: Δημιουργία των επιλογών αρίθμησης Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Γιατί αυτό το βήμα;* +`BatesNumberingOptions` περιλαμβάνει όλες τις ρυθμίσεις που μπορεί να χρειαστείτε όταν **ορίζετε επιλογές αρίθμησης Bates**. Η προσαρμογή του `StartNumber` και του `Prefix` σας επιτρέπει να ευθυγραμμίσετε το αποτέλεσμα με το σύστημα διαχείρισης υποθέσεων. Η ιδιότητα `Position` ελέγχει την οπτική θέση, η οποία συχνά αποτελεί απαίτηση συμμόρφωσης. + +## Βήμα 4: Εφαρμογή αρίθμησης Bates στο έγγραφο + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Η μέθοδος `AddBatesNumbering` διασχίζει κάθε σελίδα του φορτωμένου `Document` και εισάγει τη διαμορφωμένη συμβολοσειρά. Επειδή η μέθοδος λειτουργεί στην αναπαράσταση στη μνήμη, μπορείτε να αλυσίδετε επιπλέον βήματα επεξεργασίας (π.χ., προσθήκη υδατογραφήματος) πριν από την αποθήκευση. + +## Βήμα 5: Μετατροπή και αποθήκευση του αποτελέσματος ως PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Γιατί αυτό το βήμα;* +Η αποθήκευση ως PDF είναι μια κοινή τελική μορφή για νομικά έγγραφα. Το αντικείμενο `PdfConvertOptions` σας επιτρέπει να ρυθμίσετε λεπτομερώς το αποτέλεσμα, αλλά δεν απαιτείται για βασική αρίθμηση. Η κλήση `Save` γράφει το πλήρως αριθμημένο PDF στο δίσκο. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Συνδυάζοντας όλα, εδώ είναι μια αυτόνομη εφαρμογή κονσόλας που μπορείτε να μεταγλωττίσετε και να εκτελέσετε: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Αναμενόμενο αποτέλεσμα** + +Η εκτέλεση του προγράμματος δημιουργεί το `output.pdf` όπου κάθε σελίδα εμφανίζει μια ετικέτα όπως `CASE-1000`, `CASE-1001`, κ.λπ., τοποθετημένη στο δεξιό υποσέλιδο. Ανοίξτε το PDF σε οποιονδήποτε προβολέα για να επαληθεύσετε ότι οι αριθμοί εμφανίζονται όπως προορίζεται. + +## Συνηθισμένα προβλήματα και βέλτιστες πρακτικές + +| Πρόβλημα | Γιατί συμβαίνει | Πώς να το αποφύγετε | +|----------|----------------|----------------------| +| **Σχετικές διαδρομές προκαλούν `FileNotFoundException`** | Ο τρέχων φάκελος μιας εφαρμογής κονσόλας μπορεί να διαφέρει από αυτόν του Visual Studio. | Χρησιμοποιήστε απόλυτες διαδρομές ή `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Η αρίθμηση επικαλύπτεται με υπάρχοντα υποσέλιδα** | Αν το αρχείο προέλευσης έχει ήδη περιεχόμενο στην επιλεγμένη περιοχή υποσέλιδου, ο νέος αριθμός μπορεί να κρύβεται. | Επιλέξτε διαφορετικό `Position` (π.χ., `HeaderLeft`) ή προσαρμόστε το πρότυπο προέλευσης. | +| **Μεγάλα έγγραφα είναι αργά** | Η αρίθμηση Bates επαναλαμβάνεται για κάθε σελίδα· η χρήση μνήμης αυξάνεται με το μέγεθος του αρχείου. | Επεξεργαστείτε το έγγραφο σε τμήματα χρησιμοποιώντας `Document.Split` αν ξεπεράσετε τις 500 σελίδες. | +| **Λήξη άδειας** | Η δωρεάν δοκιμή του GroupDocs λήγει μετά από 30 ημέρες, προκαλώντας εξαίρεση στο `AddBatesNumbering`. | Εφαρμόστε έγκυρο κλειδί άδειας πριν φορτώσετε το έγγραφο: `License license = new License(); license.SetLicense("license.lic");`. | + +**Συμβουλή:** Εάν χρειάζεστε διαφορετική μορφή αριθμού ανά υπόθεση (π.χ., `2023-CASE-001`), δημιουργήστε το πρόθεμα δυναμικά πριν δημιουργήσετε το `BatesNumberingOptions`. + +## Επέκταση της λύσης + +Η ίδια προσέγγιση **Bates numbering C#** λειτουργεί με άλλες μορφές προέλευσης όπως `.txt`, `.html`, ή ακόμη και εικόνες. Απλώς αλλάξτε την επέκταση αρχείου όταν δημιουργείτε το αντικείμενο `Document`, και η μηχανή μετατροπής θα διαχειριστεί το υπόλοιπο. + +Μπορείτε επίσης να συνδυάσετε **document conversion C#** με OCR για σαρωμένα PDF: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Συμπέρασμα + +Τώρα γνωρίζετε **πώς να ορίσετε επιλογές αρίθμησης Bates** σε C# από την αρχή μέχρι το τέλος. Δημιουργώντας ένα αντικείμενο `BatesNumberingOptions`, εφαρμόζοντάς το με `AddBatesNumbering` και αποθηκεύοντας το αποτέλεσμα ως PDF, μπορείτε να αυτοματοποιήσετε την παραγωγή νομικά συμμορφωμένων, μοναδικά ταυτοποιημένων εγγράφων. + +Από εδώ μπορείτε να εξερευνήσετε σχετικές θεματικές όπως **C# PDF generation**, **document conversion C#**, ή προχωρημένα χαρακτηριστικά του **GroupDocs API** όπως υδατογραφήματα και ψηφιακές υπογραφές. Πειραματιστείτε με διαφορετικά προθέματα, θέσεις και μορφές αριθμών για να ταιριάζουν στη ροή εργασίας σας. + +Καλό κώδικα! + +## Τι θα πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικές θεματικές που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κατακτήσετε πρόσθετα χαρακτηριστικά του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Προσθήκη αρίθμησης Bates σε PDF σε C# – Πλήρης Οδηγός](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Πώς να προσθέσετε και να προσαρμόσετε αριθμούς σελίδων σε PDF χρησιμοποιώντας Aspose.PDF για .NET | Οδηγός Διαχείρισης Εγγράφων](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Πώς να προσθέσετε υποσέλιδο σήματος κειμένου σε PDF χρησιμοποιώντας Aspose.PDF για .NET: Οδηγός βήμα‑βήμα](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/annotations/_index.md b/pdf/hindi/net/annotations/_index.md index a361c3bcf5..a7c87968e0 100644 --- a/pdf/hindi/net/annotations/_index.md +++ b/pdf/hindi/net/annotations/_index.md @@ -35,6 +35,7 @@ | [निःशुल्क टेक्स्ट एनोटेशन स्वरूपण सेट करें](./setfreetextannotationformatting/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में निःशुल्क टेक्स्ट एनोटेशन फ़ॉर्मेटिंग सेट करना सीखें। | | [शब्दों को काट दें](./strikeoutwords/) | इस विस्तृत चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF में शब्दों को कैसे काटें, यह जानें। अपने दस्तावेज़ संपादन कौशल को बढ़ाएँ। | | [निःशुल्क टेक्स्ट पीडीएफ एनोटेशन अपडेट करें](./updatefreetextannotation/) इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में निःशुल्क टेक्स्ट एनोटेशन को अपडेट करना सीखें। | +| [PDF पर आयत बनाएं – चरण‑दर‑चरण C# गाइड](./draw-rectangle-on-pdf-step-by-step-c-guide/) | .NET के लिए Aspose.PDF का उपयोग करके PDF में आयत आकृति जोड़ने की चरण‑दर‑चरण प्रक्रिया सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/hindi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..fa58e5e700 --- /dev/null +++ b/pdf/hindi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-08-14 +description: C# का उपयोग करके PDF पर जल्दी से आयत बनाएं। केवल कुछ पंक्तियों में आयत + के आयाम निर्धारित करना और PDF पृष्ठ में आकार जोड़ना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: hi +lastmod: 2026-08-14 +og_description: C# के साथ सेकंडों में PDF पर आयत बनाएं। यह गाइड दिखाता है कि आयत के + आयाम कैसे निर्धारित करें, एक आकार जोड़ें, और विश्वसनीय PDF ग्राफिक्स के लिए पृष्ठ + सीमाओं की पुष्टि करें। +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: PDF पर आयत बनाएं – पूर्ण C# ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: PDF पर आयत बनाएं – चरण‑दर‑चरण C# गाइड +url: /hi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF पर आयत बनाएं – पूर्ण C# ट्यूटोरियल + +यदि आपको C# का उपयोग करके **PDF पर आयत बनानी** है, तो यह गाइड आपको एक संक्षिप्त, प्रोडक्शन‑रेडी समाधान दिखाता है। आप बिल्कुल **आयत के आयाम कैसे निर्धारित करें** देखेंगे, यह सत्यापित करेंगे कि आकार पेज में फिट बैठता है, और एक ही मेथड कॉल से इसे पेज में जोड़ेंगे। + +यह ट्यूटोरियल PDF दस्तावेज़ बनाने से लेकर आयत को रेंडर करने तक सब कुछ कवर करता है, ताकि आप कोड को अपने प्रोजेक्ट में कॉपी‑पेस्ट करके तुरंत परिणाम देख सकें। कोई बाहरी दस्तावेज़ीकरण आवश्यक नहीं—नीचे दिए गए चरणों का पालन करें। + +## आवश्यकताएँ + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.7+ पर भी काम करता है) +* **Aspose.PDF for .NET** NuGet पैकेज (`Install-Package Aspose.PDF`) +* C# सिंटैक्स की बुनियादी समझ +* Visual Studio या VS Code जैसा IDE + +> **Pro tip:** तेज़ प्रयोगों के लिए Aspose.PDF का फ्री इवैल्यूएशन लाइसेंस उपयोग करें; यह एक छोटा वॉटरमार्क जोड़ता है लेकिन सभी फीचर टेस्ट करने देता है। + +## C# के साथ PDF पर आयत कैसे बनाएं + +कार्य का मूल भाग `RectangleShape` बनाना, उसका आकार और स्ट्रोक सेट करना, और उसे `Page` से जोड़ना है। नीचे दिया गया H2 हेडर मुख्य कीवर्ड रखता है, जिससे SEO आवश्यकताएँ पूरी होती हैं। + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### प्रत्येक चरण की व्याख्या + +| चरण | क्यों महत्वपूर्ण है | +|------|-------------------| +| **1️⃣ नया PDF दस्तावेज़ बनाएं** | वह कंटेनर इनिशियलाइज़ करता है जो पेज और ग्राफ़िक्स रखेगा। | +| **2️⃣ एक खाली पेज जोड़ें** | आपको `Page` ऑब्जेक्ट चाहिए क्योंकि शैप्स पेज से जुड़ते हैं, सीधे दस्तावेज़ से नहीं। | +| **3️⃣ आयत की सीमाएँ निर्धारित करें** | यहाँ **आयत के आयाम कैसे निर्धारित करें** दिखाया गया है। `Rectangle` कंस्ट्रक्टर `x`, `y`, `width`, और `height` को पॉइंट्स में लेता है (1 pt = 1/72 in)। | +| **4️⃣ आयत शैप बनाएं** | `RectangleShape` Aspose क्लास है जो आयत रेंडर करती है। `StrokeColor` सेट करने से आउटलाइन बनती है; आप `FillColor` सेट करके भराव भी कर सकते हैं। | +| **5️⃣ पेज सीमाओं की जाँच करें** | `CheckShapeBoundary` अपवाद फेंकता है यदि आयत पेज आकार से बाहर हो, जिससे खराब PDF बनना रोका जाता है। | +| **6️⃣ शैप को पेज में जोड़ें** | शैप पेज की कंटेंट स्ट्रीम का हिस्सा बन जाता है। | +| **7️⃣ PDF सहेजें** | दस्तावेज़ को ऐसी फ़ाइल में लिखता है जिसे आप किसी भी PDF व्यूअर से खोल सकते हैं। | + +परिणामी `RectangleDemo.pdf` में एक काली आयत पेज के ऊपर‑बाएँ कोने में स्थित होगी, जिसकी चौड़ाई 500 pt और ऊँचाई 700 pt है। + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*Image alt text: draw rectangle on pdf example showing a black rectangle in the upper left corner of a PDF page.* + +## विभिन्न पेज आकारों के लिए आयत के आयाम कैसे निर्धारित करें + +ऊपर दिया गया स्निपेट स्थिर मान (`500 x 700`) उपयोग करता है। वास्तविक अनुप्रयोगों में अक्सर आयत को पेज की चौड़ाई और ऊँचाई के अनुसार अनुकूलित करना पड़ता है। + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**मुख्य बिंदु:** + +* वास्तविक पेज आकार पढ़ने के लिए `page.PageInfo.Width` और `Height` का उपयोग करें। +* किसी फ़ैक्टर (जैसे `0.8f`) से गुणा करने से आयाम पेज का प्रतिशत बन जाता है। +* केंद्रित करने के लिए आयत के आकार को पेज आकार से घटाएँ और शेष को आधा करें। + +## सामान्य समस्याएँ और उनका समाधान + +| समस्या | क्यों होता है | समाधान | +|---------|--------------|--------| +| आयत पेज से बाहर निकलती है | हार्ड‑कोडेड आयाम पेज आकार से बड़े होते हैं। | शैप जोड़ने **से पहले** `page.CheckShapeBoundary` कॉल करें; यदि अपवाद आए तो आयाम समायोजित करें। | +| स्ट्रोक दिखाई नहीं देता | `StrokeColor` डिफ़ॉल्ट (`Color.Empty`) पर रहता है। | स्पष्ट रूप से `StrokeColor` सेट करें (उदा., `Color.Black`)। | +| आयत स्क्रीन से बाहर दिखती है | PDF स्पेस में निर्देशांक नीचे‑बाएँ से शुरू होते हैं; स्क्रीन‑स्टाइल ऊपर‑बाएँ निर्देशांक उपयोग करने से उलटाव होता है। | याद रखें कि मूल बिंदु `(0,0)` नीचे‑बाएँ कोना है। `y` को उसी अनुसार समायोजित करें या `pageHeight - desiredY` उपयोग करें। | +| लाइन की मोटाई अनपेक्षित | डिफ़ॉल्ट लाइन चौड़ाई प्रिंटिंग के लिए बहुत पतली हो सकती है। | `rectangleShape.LineWidth = 2;` सेट करके मोटाई बढ़ाएँ। | + +## उदाहरण का विस्तार + +एक बार जब आप **PDF पर आयत बना** सकते हैं, तो आप आसानी से अन्य शैप्स भी जोड़ सकते हैं: + +* **EllipseShape** – वृत्त या अंडाकार के लिए। +* **PolygonShape** – कस्टम बहुभुजों के लिए। +* **TextFragment** – अपनी आयतों को लेबल करने के लिए। + +सभी शैप्स का वर्कफ़्लो समान है: सीमाएँ निर्धारित करें, दिखावट कॉन्फ़िगर करें, सीमाओं की जाँच करें, फिर पेज में जोड़ें। + +## पूर्ण, चलाने योग्य प्रोग्राम + +नीचे पूरा प्रोग्राम दिया गया है जो बेसिक आयत और डायनामिक साइजिंग उदाहरण को मिलाता है। इसे नए कंसोल प्रोजेक्ट में कॉपी करें, `Aspose.PDF` NuGet पैकेज रिस्टोर करें, और चलाएँ। + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**अपेक्षित आउटपुट:** +`CombinedRectangles.pdf` खोलें। आपको नीचे‑बाएँ कोने में एक काली आयत और केंद्रित डार्क‑ब्लू आयत लाइट‑येलो फ़िल के साथ दिखेगी। दोनों आयतें पेज मार्जिन का सम्मान करती हैं। + +## निष्कर्ष + +अब आप जानते हैं कि C# के साथ **PDF पर आयत कैसे बनाएं** और दोनों स्थिर तथा रिस्पॉन्सिव लेआउट के लिए **आयत के आयाम कैसे निर्धारित करें**। यह तरीका Aspose.PDF के `RectangleShape`, बाउंडरी चेकिंग, और सरल गणित का उपयोग करके किसी भी पेज आकार के अनुसार अनुकूलित करता है। + +आगे आप खोज सकते हैं: + +* **फ़िल रंग** और **लाइन स्टाइल** (डैश्ड, डॉटेड) जोड़ना – द्वितीयक कीवर्ड: how to define rectangle dimensions with style. +* कई शैप्स को एक ही `Page` में मिलाकर चार्ट या फॉर्म बनाना। +* PDF को स्ट्रीम में एक्सपोर्ट करना ताकि वेब API में डिस्क पर सहेजे बिना उपयोग किया जा सके। + +विभिन्न आकार, रंग, और स्थितियों के साथ प्रयोग करें और अपने .NET एप्लिकेशन में PDF ग्राफ़िक्स में महारत हासिल करें। Happy coding! + +## आगे आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ हैं, जिससे आप अतिरिक्त API फीचर मास्टर कर सकें और अपने प्रोजेक्ट में वैकल्पिक इम्प्लीमेंटेशन एप्रोच खोज सकें। + +- [How to Customize PDFs with Aspose.PDF for .NET: Set Page Margins and Draw Lines](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [How to Add Page Number Stamps in PDFs Using Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/conversion-export/_index.md b/pdf/hindi/net/conversion-export/_index.md index 8a864b14a2..80435c14f4 100644 --- a/pdf/hindi/net/conversion-export/_index.md +++ b/pdf/hindi/net/conversion-export/_index.md @@ -192,7 +192,7 @@ Aspose.PDF .NET का उपयोग करके HTML दस्तावे इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों को PostScript प्रारूप में परिवर्तित करना सीखें। उच्च-गुणवत्ता वाली प्रिंटिंग आवश्यकताओं के लिए बिल्कुल सही। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF को TIFF में कैसे बदलें: एक चरण-दर-चरण मार्गदर्शिका](./convert-pdf-to-tiff-aspose-net/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों को उच्च-गुणवत्ता वाली TIFF छवियों में कैसे परिवर्तित किया जाए। कोड उदाहरणों और कॉन्फ़िगरेशन युक्तियों के साथ हमारे चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों को उच्च-गुणवत्ता वाली TIFF छवियों में कैसे परिवर्तित किया जाए। कोड उदाहरणों और कॉन्फ़िगरेशन युक्तियों के साथ हमारे चरण-दर-स्टेप गाइड का पालन करें। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF को XML में कैसे बदलें: एक चरण-दर-चरण मार्गदर्शिका](./pdf-to-xml-conversion-aspose-pdf-net/) .NET के लिए Aspose.PDF के साथ PDF दस्तावेज़ों को XML में बदलने की कला में महारत हासिल करें। इस व्यापक गाइड का पालन करें और अपने दस्तावेज़ प्रबंधन को बेहतर बनाएँ। @@ -221,14 +221,1379 @@ Aspose.PDF .NET का उपयोग करके HTML दस्तावे ### [Aspose.PDF .NET के साथ PDF से HTML रूपांतरण: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) .NET के लिए Aspose.PDF का उपयोग करके PDF-से-HTML रूपांतरण में महारत हासिल करें। अनुकूलन योग्य विकल्पों के साथ दस्तावेज़ की पहुँच और सहभागिता को बढ़ाएँ। +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF के साथ C# में PDF को HTML के रूप में सहेजें और PDF/X‑4 में बदलें](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +C# में Aspose.PDF का उपयोग करके PDF को पहले HTML में सहेजें और फिर PDF/X‑4 फ़ॉर्मेट में बदलें। + ### [.NET के लिए Aspose.PDF के साथ PDF से HTML रूपांतरण](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल -### [Aspose.PDF का उपयोग करके .NET में PDF से TIFF रूपांतरण: एक चरण-दर-चरण मार्गदर्शिका](./pdf-to-tiff-conversion-aspose-pdf-net/) -.NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों को TIFF छवियों में परिवर्तित करना सीखें। कस्टम रंग गहराई और उन्नत छवि प्रसंस्करण तकनीकों में महारत हासिल करें। +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। + +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। -### [Aspose के साथ PDF को कैसे सहेजें – चरण‑दर‑चरण गाइड](./how-to-save-pdf-with-aspose-step-by-step-guide/) -Aspose का उपयोग करके PDF को सुरक्षित रूप से सहेजने के लिए चरण‑दर‑चरण निर्देश। +### [Aspose.PDF .NET के साथ PDF को HTML में कैसे बदलें: एक व्यापक गाइड](./aspose-pdf-net-pdf-to-html-conversion/) +.NET के लिए Aspose.PDF का उपयोग करके PDF को HTML में कैसे बदलें, फ़ॉन्ट को TTF और WOFF में सुरक्षित रखें और उच्च निष्ठा बनाए रखें। ## अतिरिक्त संसाधन diff --git a/pdf/hindi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/hindi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..497d72a4f4 --- /dev/null +++ b/pdf/hindi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.PDF for C# का उपयोग करके PDF को HTML के रूप में सहेजें और PDF + को PDF/X‑4 में परिवर्तित करें। चरण‑दर‑चरण कोड HTML निर्यात, हस्ताक्षर सूची, और ग्राफ़िक्स‑स्टेट + संपादन दिखाता है। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: hi +lastmod: 2026-08-14 +og_description: Aspose.PDF for C# का उपयोग करके PDF को HTML के रूप में सहेजें और PDF + को PDF/X‑4 में परिवर्तित करें। HTML निर्यात करने, हस्ताक्षर सूचीबद्ध करने और ग्राफ़िक्स + स्टेट्स को संपादित करने के लिए इस संपूर्ण गाइड का पालन करें। +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Aspose.PDF के साथ PDF को HTML के रूप में सहेजें और PDF/X‑4 में परिवर्तित + करें – C# गाइड +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Aspose.PDF के साथ C# में PDF को HTML के रूप में सहेजें और PDF/X‑4 में बदलें +url: /hi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF को HTML के रूप में सहेजें और Aspose.PDF के साथ PDF/X‑4 में परिवर्तित करें C# में + +यदि आपको **PDF को HTML के रूप में सहेजना** है, तो Aspose.Pdf प्रक्रिया को सरल बनाता है। यह ट्यूटोरियल यह भी दिखाता है कि **PDF को PDF/X‑4 में कैसे परिवर्तित करें**, सिग्नेचर फ़ील्ड की सूची बनाएं, और एक कस्टम ExtGState जोड़ें, जिससे आपको एक पूर्ण एंड‑टू‑एंड वर्कफ़्लो मिलता है। + +आप सीखेंगे कि कैसे: + +* PDF को साफ़ HTML में निर्यात करें जबकि रास्टर इमेजेस को छोड़ें। +* PDF दस्तावेज़ को प्रिंट‑रेडी आउटपुट के लिए PDF/X‑4 मानक में परिवर्तित करें। +* PDF में सभी सिग्नेचर फ़ील्ड की सूची बनाएं। +* पहले पृष्ठ पर एक कस्टम ग्राफ़िक्स स्टेट (ExtGState) डालें। + +सारा कोड .NET 6 या बाद के संस्करण पर चलता है और Aspose.Pdf for .NET NuGet पैकेज की आवश्यकता होती है। + +## Prerequisites + +| आवश्यकता | कारण | +|-------------|--------| +| .NET 6 SDK या नया | C# नमूने के लिए रनटाइम प्रदान करता है। | +| Visual Studio 2022 (या कोई भी C# IDE) | आसान संपादन और डिबगिंग को सक्षम बनाता है। | +| Aspose.Pdf for .NET (v23.12 या बाद का) | ट्यूटोरियल में उपयोग किए गए `Document`, `PdfFormatConversionOptions`, और `HtmlSaveOptions` क्लासेस प्रदान करता है। | +| एक नमूना PDF फ़ाइल (`sample.pdf`) | प्रक्रिया की जाने वाली स्रोत दस्तावेज़। | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## समाधान का अवलोकन + +प्रोग्राम छह तार्किक चरणों को पूरा करता है: + +1. स्रोत PDF लोड करें। +2. प्रत्येक सिग्नेचर फ़ील्ड का नाम सूचीबद्ध करें। +3. **PDF को PDF/X‑4 में परिवर्तित करें** और परिणाम सहेजें। +4. **PDF को HTML के रूप में सहेजें** जबकि रास्टर इमेजेस को छोड़ें। +5. पहले पृष्ठ पर एक कस्टम ExtGState (ग्राफ़िक्स स्टेट) जोड़ें। +6. नई ग्राफ़िक्स स्टेट के साथ संशोधित PDF सहेजें। + +प्रत्येक चरण नीचे समझाया गया है, पूर्ण कोड और चयन के पीछे के तर्क के साथ। + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` पूरे PDF फ़ाइल का प्रतिनिधित्व करता है। इसे एक बार लोड करने से आप उसी ऑब्जेक्ट को सभी बाद के ऑपरेशनों में पुन: उपयोग कर सकते हैं, जिससे I/O ओवरहेड कम होता है। + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: सिग्नेचर फ़ील्ड के नाम जानना आवश्यक है जब आपको बाद में डिजिटल सिग्नेचर को वैलिडेट, हटाना या बदलना हो। `Signatures` कलेक्शन फ़ील्ड्स का तेज़, रीड‑ओनली दृश्य प्रदान करता है। + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` Aspose.Pdf को सभी आवश्यक रिसोर्सेज (फ़ॉन्ट, कलर प्रोफ़ाइल) एम्बेड करने और PDF/X‑4 प्रतिबंधों को लागू करने के लिए बताता है। +* रूपांतरण मेमोरी में चलता है; केवल अंतिम फ़ाइल डिस्क पर लिखी जाती है, जिससे ऑपरेशन तेज़ रहता है। + +> **Pro tip:** यदि आपका डाउनस्ट्रीम वर्कफ़्लो अनुपालन के बारे में सख़्त है, तो आउटपुट को PDF/X‑4 वैलिडेटर (जैसे Adobe Preflight) से सत्यापित करें। + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Why you might want this**: HTML आउटपुट वेब प्रीव्यू या कंटेंट इंडेक्सिंग के लिए उपयोगी है। रास्टर इमेजेस को छोड़ना (`SkipRasterImages = true`) HTML को हल्का रखता है और लोड टाइम को सुधारता है, विशेषकर जब मूल PDF में हाई‑रेज़ोल्यूशन स्कैन हों। + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: एक **ExtGState** ऑब्जेक्ट ट्रांसपेरेंसी, ब्लेंड मोड और अन्य ग्राफ़िक्स पैरामीटर को नियंत्रित करता है। `GS0` जोड़ने से आप बाद में इस स्टेट को कंटेंट स्ट्रीम्स में रेफ़र कर सकते हैं (जैसे सेमी‑ट्रांसपेरेंट ओवरले के लिए)। कोड लो‑लेवल COS API का उपयोग करता है क्योंकि Aspose.Pdf ExtGState निर्माण के लिए हाई‑लेवल रैपर प्रदान नहीं करता। + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +अंतिम फ़ाइल (`sample_with_extgstate.pdf`) में शामिल हैं: + +* सभी मूल पृष्ठ और कंटेंट। +* एक अनुपालन‑युक्त PDF/X‑4 संस्करण (`sample_pdfx4.pdf`)। +* रास्टर इमेजेस के बिना HTML प्रतिनिधित्व (`sample.html`)। +* एक कस्टम ExtGState (`GS0`) जो पहले पृष्ठ के रिसोर्सेज़ से जुड़ा है। + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +यदि स्रोत PDF में कोई सिग्नेचर नहीं है, तो लूप कुछ भी प्रिंट नहीं करेगा लेकिन त्रुटि के बिना आगे बढ़ेगा। + +## Common variations and edge cases + +| स्थिति | समायोजन | +|-----------|------------| +| **PDF में कोई पृष्ठ नहीं है** | `doc.Pages[1]` तक पहुँचने से पहले `doc.Pages.Count` जांचें ताकि `IndexOutOfRangeException` से बचा जा सके। | +| **आपको PDF/X‑4 के बजाय PDF/A‑2b चाहिए** | `PdfFormatConversionOptions` में `PdfStandard.PdfX4` को `PdfStandard.PdfA2b` में बदलें। | +| **आप रास्टर इमेजेस को रखना चाहते हैं** | `HtmlSaveOptions` में `SkipRasterImages = false` सेट करें (या इस प्रॉपर्टी को छोड़ दें)। | +| **कई ExtGState ऑब्जेक्ट्स** | `extGStateDict` में जोड़ते समय अद्वितीय कुंजियों (`GS1`, `GS2`, …) का उपयोग करें। | +| **बड़े PDF (सैकड़ों MB)** | सहेजने से पहले `doc.OptimizeResources = true` सक्षम करें ताकि मेमोरी उपयोग कम हो। | + +## Full source code (runnable) + + + +## What Should You Learn Next? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन एप्रोच खोजने में मदद करेंगे। + +- [व्यापक गाइड: Aspose.PDF .NET के साथ कस्टम रणनीतियों का उपयोग करके PDF को HTML में बदलें](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Aspose.PDF .NET के साथ कस्टम इमेज URLs का उपयोग करके PDF को HTML में बदलें: एक व्यापक गाइड](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Aspose.PDF .NET का उपयोग करके PDF से HTML रूपांतरण: इमेज को बाहरी PNG के रूप में सहेजें](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/programming-with-forms/_index.md b/pdf/hindi/net/programming-with-forms/_index.md index cc13fa81f8..70fabfdab9 100644 --- a/pdf/hindi/net/programming-with-forms/_index.md +++ b/pdf/hindi/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ | [रेडियो बटन कैप्शन सेट करें](./set-radio-button-caption/) .NET के लिए Aspose.PDF का उपयोग करके PDF में रेडियो बटन कैप्शन सेट करना सीखें। यह चरण-दर-चरण मार्गदर्शिका आपको अपने PDF फ़ॉर्म को लोड करने, संशोधित करने और सहेजने के बारे में बताती है। | | [पाठ बॉक्स](./text-box/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF में आसानी से टेक्स्ट बॉक्स जोड़ने का तरीका जानें। उपयोगकर्ता सहभागिता को बढ़ाएँ। | | [Aspose के साथ PDF बनाना – फ़ॉर्म फ़ील्ड और पृष्ठ जोड़ें](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aspose का उपयोग करके PDF बनाते समय फ़ॉर्म फ़ील्ड और पेज कैसे जोड़ें, इस चरण-दर-चरण गाइड में सीखें। | +| [C# में PDF फ़ॉर्म फ़ील्ड बनाएं – चरण‑दर‑चरण गाइड](./create-pdf-form-field-in-c-step-by-step-guide/) | C# का उपयोग करके Aspose.PDF के साथ PDF फ़ॉर्म फ़ील्ड बनाने की चरण‑दर‑चरण प्रक्रिया सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/pdf/hindi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/hindi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..23288bc3d7 --- /dev/null +++ b/pdf/hindi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-14 +description: C# के साथ तेज़ी से PDF फ़ॉर्म फ़ील्ड बनाएं। जानें कि कैसे PDF में टेक्स्ट + बॉक्स जोड़ें और Aspose.PDF का उपयोग करके PDF को टेक्स्ट बॉक्स शामिल करने के लिए + संशोधित करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: hi +lastmod: 2026-08-14 +og_description: C# के साथ PDF फ़ॉर्म फ़ील्ड बनाएं। यह ट्यूटोरियल दिखाता है कि कैसे + PDF में एक टेक्स्ट बॉक्स जोड़ें और Aspose.PDF का उपयोग करके PDF को संशोधित करके + उसमें टेक्स्ट बॉक्स शामिल करें। +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: C# में PDF फ़ॉर्म फ़ील्ड बनाएं – पूर्ण प्रोग्रामिंग गाइड +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: C# में PDF फ़ॉर्म फ़ील्ड बनाएं – चरण‑दर‑चरण गाइड +url: /hi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में PDF फ़ॉर्म फ़ील्ड बनाएं – चरण‑दर‑चरण गाइड + +यदि आपको दस्तावेज़ में **create pdf form field** बनाने की आवश्यकता है, तो यह गाइड आपको पूरी प्रक्रिया के माध्यम से ले जाएगा। आप देखेंगे कि **add text box to pdf** पृष्ठों में कैसे जोड़ें, और **modify pdf to include text box** को Aspose.PDF लाइब्रेरी for .NET का उपयोग करके कैसे बदलें। + +PDF फ़ॉर्म के साथ काम करना इनवॉइसिंग सिस्टम, सर्वेक्षण, या किसी भी वर्कफ़्लो के लिए सामान्य आवश्यकता है जो उपयोगकर्ता इनपुट एकत्र करता है। इस ट्यूटोरियल के अंत तक आपके पास एक पुन: उपयोग योग्य कोड स्निपेट होगा जो पूर्ण कार्यात्मक टेक्स्ट बॉक्स फ़ील्ड बनाता है, इसे जहाँ चाहें रखता है, और अपडेटेड PDF को सहेजता है—बिना आपके C# प्रोजेक्ट से बाहर निकले। + +## पूर्वापेक्षाएँ + +* .NET 6.0 या बाद का (कोड .NET Framework 4.7+ के साथ भी काम करता है) +* Visual Studio 2022 या कोई भी IDE जो C# को सपोर्ट करता है +* एक सक्रिय Aspose.PDF for .NET लाइसेंस (फ्री ट्रायल विकास के लिए काम करता है) +* `input.pdf` नामक PDF फ़ाइल जिसे ज्ञात डायरेक्टरी में रखा गया है (ट्यूटोरियल `YOUR_DIRECTORY` को प्लेसहोल्डर के रूप में उपयोग करता है) + +> **Pro tip:** यदि आपके पास अभी लाइसेंस नहीं है, तो आप Aspose की वेबसाइट से एक अस्थायी कुंजी का अनुरोध कर सकते हैं; लाइब्रेरी कोड में बदलाव किए बिना मूल्यांकन मोड में काम करती है। + +## C# में PDF फ़ॉर्म फ़ील्ड कैसे बनाएं (अवलोकन) + +1. मौजूदा PDF दस्तावेज़ लोड करें। +2. `TextBoxField` को इंस्टैंसिएट करें और उसका नाम व रूपरेखा कॉन्फ़िगर करें। +3. एक विजेट एनोटेशन जोड़ें जो लक्ष्य पृष्ठ पर दृश्य आयत को परिभाषित करता है। +4. फ़ील्ड को दस्तावेज़ के फ़ॉर्म कलेक्शन में डालें। +5. संशोधित PDF को सहेजें। + +प्रत्येक चरण को नीचे विस्तृत रूप से समझाया गया है, पूर्ण कोड उदाहरणों और API कॉल्स के पीछे के तर्क के साथ। + +## चरण 1: PDF दस्तावेज़ लोड करें + +पहला ऑपरेशन स्रोत PDF को पढ़ना है। Aspose.PDF PDF फ़ाइल को `Document` क्लास के साथ दर्शाता है। दस्तावेज़ लोड करने से आपको उसके पृष्ठों, फ़ॉर्म कलेक्शन और अन्य संरचनाओं तक पहुंच मिलती है। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**यह क्यों महत्वपूर्ण है:** +फ़ाइल को लोड करने से PDF का इन‑मेमोरी मॉडल बनता है, जिससे आप मूल फ़ाइल को भ्रष्ट किए बिना ऑब्जेक्ट्स जोड़, हट या संपादित कर सकते हैं। `Document` ऑब्जेक्ट `Form` प्रॉपर्टी भी एक्सपोज़ करता है, जहाँ आप बाद में **add text box to pdf** करेंगे। + +## चरण 2: टेक्स्ट बॉक्स फ़ील्ड बनाएं + +टेक्स्ट बॉक्स फ़ील्ड एक प्रकार का फ़ॉर्म फ़ील्ड है जो उपयोगकर्ताओं को फ्री‑फ़ॉर्म टेक्स्ट टाइप करने देता है। Aspose.PDF में आप इसे `TextBoxField` को इंस्टैंसिएट करके बनाते हैं, लक्ष्य पृष्ठ और एक आयत पास करके जो विजेट के प्रारंभिक आकार को परिभाषित करता है। + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**यह क्यों महत्वपूर्ण है:** +* `PartialName` वह कुंजी है जिसका उपयोग फ़ॉर्म‑प्रोसेसिंग टूल्स (जैसे Adobe Acrobat, सर्वर‑साइड पार्सर्स) दर्ज किए गए मान को प्राप्त करने के लिए करते हैं। +* यहाँ पास किया गया आयत केवल *प्रारंभिक* विजेट आकार को परिभाषित करता है; आप बाद में विजेट एनोटेशन (अगला चरण) के साथ उसकी दृश्य स्थिति समायोजित कर सकते हैं। +* `DefaultAppearance` सेट करने से बॉक्स के अंदर का टेक्स्ट विभिन्न व्यूअर्स में सुसंगत रूप से रेंडर होता है। + +## चरण 3: विजुअल विजेट एनोटेशन परिभाषित करें + +एक फ़ॉर्म फ़ील्ड में एक या अधिक **widget annotations** हो सकते हैं जो नियंत्रित करते हैं कि फ़ील्ड प्रत्येक पृष्ठ पर कहाँ दिखेगा। एक विजेट जोड़कर आप समान लॉजिकल फ़ील्ड को अलग स्थान पर या कई पृष्ठों पर रख सकते हैं। + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**यह क्यों महत्वपूर्ण है:** +विजेट आयत स्क्रीन पर उपयोगकर्ताओं द्वारा देखी जाने वाली निर्देशांक निर्धारित करती है। यदि आप इस चरण को छोड़ देते हैं, तो फ़ील्ड PDF की डेटा संरचना में मौजूद हो सकता है लेकिन अंतिम उपयोगकर्ता को दिखाई नहीं देगा। विजेट जोड़ना वह चरण है जो वास्तव में **adds text box to pdf** करता है। + +## चरण 4: कॉन्फ़िगर किए गए फ़ील्ड को दस्तावेज़ के फ़ॉर्म में जोड़ें + +अब जबकि `TextBoxField` पूरी तरह से कॉन्फ़िगर हो गया है, आपको इसे PDF के फ़ॉर्म कलेक्शन में रजिस्टर करना होगा। इससे फ़ील्ड इंटरैक्टिव फ़ॉर्म का हिस्सा बन जाता है और यह सहेजा जाता है। + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**यह क्यों महत्वपूर्ण है:** +फ़ील्ड को `pdfDocument.Form` में जोड़े बिना, PDF व्यूअर विजेट एनोटेशन को अनदेखा कर देगा, और फ़ील्ड डेटा कभी सबमिट नहीं होगा। यह लाइन **modify pdf to include text box** ऑपरेशन को अंतिम रूप देती है। + +## चरण 5: अपडेटेड PDF सहेजें + +अंत में, बदलावों को डिस्क पर लिखें। आप मूल फ़ाइल को ओवरराइट कर सकते हैं या नई बना सकते हैं; उदाहरण `output.pdf` में सहेजता है। + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +जब आप `output.pdf` को Adobe Acrobat Reader में खोलेंगे, तो आपको पृष्ठ 2 पर “Comments” लेबल वाला एक आयताकार टेक्स्ट बॉक्स दिखाई देगा। उपयोगकर्ता अंदर क्लिक कर सकते हैं, टाइप कर सकते हैं, और दर्ज किया गया टेक्स्ट PDF फ़ॉर्म डेटा का हिस्सा होगा। + +## पूर्ण कार्यशील उदाहरण + +सभी भागों को एक साथ जोड़ते हुए, यहाँ एक पूर्ण, तैयार‑चलाने योग्य प्रोग्राम है। इसे एक नए कंसोल प्रोजेक्ट में कॉपी करें, `YOUR_DIRECTORY` को वास्तविक फ़ोल्डर पाथ से बदलें, और चलाएँ। + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**अपेक्षित आउटपुट:** +प्रोग्राम चलाने पर कंसोल में दो पुष्टि लाइन्स प्रिंट होती हैं। `output.pdf` खोलने पर पृष्ठ 2 पर एक टेक्स्ट बॉक्स दिखता है जहाँ उपयोगकर्ता टिप्पणी टाइप कर सकता है। जब फ़ॉर्म सबमिट किया जाता है (जैसे Adobe Acrobat के “Submit” बटन के माध्यम से), फ़ील्ड नाम `Comments` निर्यातित FDF या XFDF डेटा में दिखाई देता है। + +## सामान्य विविधताएँ और किनारे के मामलों + +| स्थिति | कोड को कैसे अनुकूलित करें | +|-----------|-----------------------| +| **फ़ील्ड को अलग पृष्ठ पर जोड़ें** | `pdfDocument.Pages[1]` को इच्छित पृष्ठ इंडेक्स (`0`‑आधारित) में बदलें। | +| **मल्टी‑लाइन टेक्स्ट बॉक्स बनाएं** | विजेट जोड़ने से पहले `textBox.Multiline = true;` सेट करें। | +| **डिफ़ॉल्ट मान सेट करें** | `textBox.Value = "Enter your comments here";` असाइन करें। | +| **फ़ील्ड को आवश्यक बनाएं** | `textBox.Required = true;` सेट करें। | +| **फ़ील्ड को कई पृष्ठों पर रखें** | लक्ष्य पृष्ठों पर प्रत्येक अतिरिक्त आयत के लिए `textBox.AddWidgetAnnotation` कॉल करें। | +| **कस्टम फ़ॉन्ट उपयोग करें** | `FontRepository.AddFont("path/to/font.ttf")` से फ़ॉन्ट लोड करें और `DefaultAppearance` में रेफ़रेंस दें। | + +**Pro tip:** हमेशा आयत के निर्देशांक को पृष्ठ आकार (`pdfDocument.Pages[1].Rect`) के विरुद्ध वैध करें। यदि विजेट पृष्ठ सीमा के बाहर है, तो व्यूअर्स फ़ील्ड को क्लिप या छिपा सकते हैं। + +## फ़ॉर्म फ़ील्ड का परीक्षण + +1. `output.pdf` को Adobe Acrobat Reader में खोलें। +2. “Comments” बॉक्स के अंदर क्लिक करें; कर्सर दिखना चाहिए। +3. कोई भी टेक्स्ट टाइप करें और **Tab** दबाएँ या कहीं और क्लिक करें। +4. दर्ज किए गए मान को स्थायी करने के लिए **File → Save As** चुनें। +5. (वैकल्पिक) Aspose.PDF के `Form` API का उपयोग करके मान को प्रोग्रामेटिकली निकालें: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +यह स्निपेट दर्शाता है कि फ़ील्ड न केवल दृश्यमान है बल्कि कोड के माध्यम से पुनः प्राप्त किया जा सकता है—सर्वर‑साइड प्रोसेसिंग के लिए आवश्यक। + +## निष्कर्ष + +अब आप जानते हैं कि C# में **create pdf form field** कैसे शुरू से अंत तक बनाएं। ट्यूटोरियल ने PDF लोड करना, `TextBoxField` को कॉन्फ़िगर करना, विजेट एनोटेशन जोड़ना, फ़ील्ड को रजिस्टर करना, और परिणाम सहेजना कवर किया। इन बिल्डिंग ब्लॉक्स के साथ आप **add text box to pdf** दस्तावेज़ बना सकते हैं, **modify pdf to include text box** कर सकते हैं, और इस दृष्टिकोण को अन्य फ़ील्ड प्रकारों जैसे चेकबॉक्स, रेडियो बटन, या ड्रॉपडाउन तक विस्तारित कर सकते हैं। + +अगला, संबंधित विषयों जैसे **extracting form data**, **flattening PDF forms**, या **styling fields with borders and colors** को देखें। इनमें से प्रत्येक अवधारणा उसी कोर API पर आधारित है जिसे आपने अभी सीखा है, जिससे आप पूरी तरह से C# में परिष्कृत इंटरैक्टिव PDFs बना सकते हैं। + +कोडिंग का आनंद लें, और विभिन्न आयतों, फ़ॉन्ट्स, और वैधता नियमों के साथ प्रयोग करने में संकोच न करें ताकि आपके एप्लिकेशन की जरूरतों को पूरा किया जा सके! + +## अब आपको क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में निपुण बनने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [Aspose के साथ PDF दस्तावेज़ बनाएं – पेज, टेक्स्ट बॉक्स, और फ़ॉर्म जोड़ें](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Aspose के साथ PDF कैसे बनाएं – फ़ॉर्म फ़ील्ड और पेज जोड़ें](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose.PDF .NET का उपयोग करके PDF में टेक्स्ट स्टैम्प कैसे जोड़ें: व्यापक गाइड](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/programming-with-operators/_index.md b/pdf/hindi/net/programming-with-operators/_index.md index c421e807e7..2295db7069 100644 --- a/pdf/hindi/net/programming-with-operators/_index.md +++ b/pdf/hindi/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET के "ऑपरेटर्स के साथ प्र | [पेज पर XForm बनाएं](./draw-xform-on-page/) | इस व्यापक चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF में XForms बनाना सीखें। | | [पीडीएफ ऑपरेटर](./pdf-operators/) | .NET के लिए Aspose.PDF के साथ PDF ऑपरेटर का उपयोग करने के लिए चरण-दर-चरण मार्गदर्शिका। PDF पृष्ठ पर एक छवि जोड़ें और उसकी स्थिति निर्दिष्ट करें। | | [पीडीएफ फाइल में ग्राफिक ऑब्जेक्ट्स हटाएँ](./remove-graphics-objects/) इस चरण-दर-चरण मार्गदर्शिका में .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइल से ग्राफ़िक्स ऑब्जेक्ट को निकालना सीखें। अपने PDF हेरफेर कार्यों को सरल बनाएँ। | +| [Aspose.Pdf के साथ C# में खाली PDF डिक्शनरी बनाएं](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Aspose.PDF का उपयोग करके C# में खाली PDF डिक्शनरी बनाने की चरण-दर-चरण मार्गदर्शिका। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/hindi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..cd71666dab --- /dev/null +++ b/pdf/hindi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.Pdf का उपयोग करके C# में खाली PDF डिक्शनरी बनाएं – सीखें कि ExtGState + संग्रह में ग्राफ़िक्स स्टेट कैसे जोड़ें और प्रोग्रामेटिक रूप से PDF को संशोधित करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: hi +lastmod: 2026-08-14 +og_description: Aspose.Pdf का उपयोग करके C# में खाली PDF डिक्शनरी बनाएं। PDF के ExtGState + संग्रह में एक कस्टम ग्राफ़िक्स स्टेट जोड़ने के लिए इस पूर्ण गाइड का पालन करें। +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: C# में खाली PDF डिक्शनरी बनाएं – Aspose.Pdf चरण‑दर‑चरण गाइड +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Aspose.Pdf के साथ C# में खाली PDF डिक्शनरी बनाएं +url: /hi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में Aspose.Pdf के साथ खाली PDF शब्दकोश बनाएं + +यदि आपको PDF फ़ाइलों के साथ काम करते समय **खाली PDF शब्दकोश** ऑब्जेक्ट बनाने की आवश्यकता है, तो यह गाइड आपको C# में Aspose.Pdf लाइब्रेरी का उपयोग करके इसे कैसे करें, बिल्कुल दिखाता है। चाहे आप एक कस्टम ग्राफ़िक्स स्टेट बना रहे हों, नया रिसोर्स जोड़ रहे हों, या बाद में उपयोग के लिए टेम्प्लेट तैयार कर रहे हों, नीचे दिए गए चरण आपको एक पूर्ण, चलाने योग्य समाधान प्रदान करते हैं। + +आप सीखेंगे कि कैसे PDF लोड करें, पहले पृष्ठ के रिसोर्स शब्दकोश तक पहुँचें, एक नया `CosPdfDictionary` बनाएं, और इसे `ExtGState` कलेक्शन में डालें। ट्यूटोरियल के अंत तक आपके पास एक कार्यशील `output.pdf` होगा जिसमें नया बनाया गया शब्दकोश होगा। + +## आवश्यकताएँ + +शुरू करने से पहले सुनिश्चित करें कि आपके पास हैं: + +- .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.6+ के साथ भी काम करता है) +- Visual Studio 2022 या कोई भी पसंदीदा C# IDE +- Aspose.Pdf for .NET लाइसेंस (या एक अस्थायी इवैल्यूएशन की) +- एक सैंपल PDF जिसका नाम **input.pdf** हो और वह आपके नियंत्रित फ़ोल्डर में रखा हो (फ़ोल्डर पाथ को `dataDir` के रूप में उपयोग किया जाएगा) + +`Aspose.Pdf` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है। + +## चरण 1: प्रोजेक्ट सेट अप करें और Aspose.Pdf को रेफ़रेंस करें + +1. Visual Studio में एक नया **Console App** प्रोजेक्ट बनाएं। +2. **NuGet Package Manager** खोलें और `Aspose.Pdf` स्थापित करें: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. `Program.cs` के शीर्ष पर निम्नलिखित `using` निर्देश जोड़ें: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *इन नेमस्पेसेस की आवश्यकता क्यों है?* `Aspose.Pdf` में कोर `Document` क्लास है, जबकि `Aspose.Pdf.Operators.Gfx` `CosPdfDictionary`, `CosPdfNumber`, और संबंधित लो‑लेवल PDF ऑब्जेक्ट्स प्रदान करता है जो **खाली PDF शब्दकोश** संरचनाएँ बनाने के लिए आवश्यक हैं। + +## चरण 2: स्रोत PDF लोड करें + +पहला कार्य मौजूदा PDF फ़ाइल को `Document` इंस्टेंस में लोड करना है। इससे आपको सभी पृष्ठों, रिसोर्सेज़, और लो‑लेवल शब्दकोशों तक पहुँच मिलती है। + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*व्याख्या*: `Document` फ़ाइल को मेमोरी में पढ़ता है और आंतरिक संरचनाएँ तैयार करता है। `using` स्टेटमेंट सुनिश्चित करता है कि प्रोसेसिंग समाप्त होने के बाद फ़ाइल हैंडल रिलीज़ हो जाए। + +## चरण 3: पहले पृष्ठ के रिसोर्स शब्दकोश तक पहुँचें + +हर PDF पृष्ठ में एक **Resources** शब्दकोश होता है जो फ़ॉन्ट्स, इमेजेज़, ExtGState ऑब्जेक्ट्स और अन्य साझा रिसोर्सेज़ को समूहित करता है। नया ग्राफ़िक्स स्टेट डालने के लिए हमें इस शब्दकोश को संपादित करना होगा। + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` एक हेल्पर क्लास है जो आपको PDF शब्दकोश को C# के `Dictionary` की तरह ट्रीट करने देता है। + +## चरण 4: ExtGState कलेक्शन प्राप्त करें (या बनाएं) + +`ExtGState` ग्राफ़िक्स स्टेट ऑब्जेक्ट्स जैसे opacity, blend mode, और line width को रखता है। यदि स्रोत PDF में पहले से `ExtGState` एंट्री मौजूद है, तो हम उसे पुनः उपयोग करेंगे; अन्यथा हम एक नया खाली शब्दकोश बनाएँगे। + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*यह जांच क्यों आवश्यक है?* कुछ PDFs में `ExtGState` एंट्री बिल्कुल ही नहीं होती। दोनों मामलों को संभालकर ट्यूटोरियल किसी भी इनपुट फ़ाइल के लिए मजबूत बनता है। + +## चरण 5: नए ग्राफ़िक्स स्टेट के लिए **खाली PDF शब्दकोश** बनाएं + +अब हम वास्तव में **खाली PDF शब्दकोश** ऑब्जेक्ट बनाते हैं जो ग्राफ़िक्स स्टेट पैरामीटर को परिभाषित करता है। शब्दकोश शुरू में खाली होता है, और हम आवश्यक कुंजियाँ जोड़ते हैं: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### प्रत्येक एंट्री क्या करती है + +| कुंजी | प्रकार | अर्थ | +|------|--------|------| +| **CA** | `CosPdfNumber` | स्ट्रोक अपारदर्शिता (रेंज 0‑1)। | +| **ca** | `CosPdfNumber` | फ़िल अपारदर्शिता (रेंज 0‑1)। | +| **BM** | `CosPdfName` | ब्लेंड मोड; `"Normal"` सबसे सामान्य है। | + +चूँकि हमने **खाली PDF शब्दकोश** से शुरुआत की है, इसलिए हमें यह पूरी स्वतंत्रता है कि कौन‑सी एंट्रीज़ जोड़ें। आप आवश्यकता अनुसार `LW` (लाइन विड्थ) या `LC` (लाइन कैप) जैसे अतिरिक्त ग्राफ़िक्स स्टेट पैरामीटर भी जोड़ सकते हैं। + +## चरण 6: नया ग्राफ़िक्स स्टेट ExtGState में डालें + +`ExtGState` शब्दकोश एक मैप की तरह काम करता है जहाँ प्रत्येक एंट्री एक नाम (जैसे `GS0`, `GS1`) द्वारा पहचानी जाती है। हम अपनी नई बनाई हुई शब्दकोश को एक अनूठी कुंजी के तहत जोड़ते हैं। + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +यदि आप कई स्टेट्स जोड़ने की योजना बना रहे हैं, तो नाम टकराव से बचने के लिए उपसर्ग (`GS1`, `GS2`, …) को बढ़ाएँ। + +## चरण 7: संशोधित PDF सहेजें + +अंत में, बदलावों को डिस्क पर लिखें। `Save` मेथड स्वचालित रूप से अपडेटेड शब्दकोशों को सीरियलाइज़ कर देता है। + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +`output.pdf` को किसी भी PDF व्यूअर में खोलें और **Resources → ExtGState** एंट्री देखें (अधिकांश व्यूअर इसे छिपाते हैं, लेकिन Adobe Acrobat Preflight या PDF‑Tron जैसे टूल इसे दिखा सकते हैं)। आपको `GS0` एंट्री दिखनी चाहिए जिसमें आपने परिभाषित किए हुए opacity और blend mode मान हों। + +## पूर्ण कार्यशील उदाहरण + +सभी भागों को मिलाकर, यहाँ पूरा प्रोग्राम है जिसे आप `Program.cs` में कॉपी‑पेस्ट करके चला सकते हैं: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**अपेक्षित आउटपुट** – कंसोल एक पुष्टि संदेश प्रिंट करता है, और `output.pdf` में `ExtGState` के तहत नया `GS0` एंट्री होता है। जब आप किसी पृष्ठ को रेंडर करते हैं जो `GS0` को संदर्भित करता है (उदाहरण के लिए कंटेंट स्ट्रीम ऑपरेटर `gs` के माध्यम से), तो स्ट्रोक पूरी तरह अपारदर्शी होंगे जबकि फ़िल 50 % पारदर्शी होगा। + +## सामान्य प्रश्न और किनारे‑के‑केस हैंडलिंग + +| प्रश्न | उत्तर | +|--------|-------| +| *यदि PDF में कई पृष्ठ हैं तो क्या होगा?* | उदाहरण पहला पृष्ठ (`Pages[1]`) लक्षित करता है। सभी पृष्ठों को प्रभावित करने के लिए `pdfDocument.Pages` पर लूप करें और प्रत्येक पृष्ठ के रिसोर्सेज़ के लिए चरण 3‑5 दोहराएँ। | +| *क्या मैं उस पृष्ठ में शब्दकोश जोड़ सकता हूँ जिसमें पहले से “GS0” नाम का ExtGState एंट्री है?* | हाँ, लेकिन मौजूदा एंट्री को ओवरराइट करने से बचने के लिए आपको अलग कुंजी (`GS1`, `GS2`, …) उपयोग करनी होगी। | +| *क्या सहेजने के बाद शब्दकोश को संशोधित करना सुरक्षित है?* | एक बार जब आप `Save` कॉल करते हैं, तो इन‑मेमोरी प्रतिनिधित्व फ़ाइल से अलग हो जाता है। आप `Document` ऑब्जेक्ट को आगे भी एडिट कर सकते हैं और आवश्यकता पड़ने पर फिर से `Save` कर सकते हैं। | +| *क्या Aspose.Pdf का उपयोग करने के लिए मुझे लाइसेंस चाहिए ` | | + +## आगे क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन एप्रोच को एक्सप्लोर कर सकें। + +- [Aspose.PDF for .NET का उपयोग करके PDFs में डैश्ड लाइन्स कैसे बनाएं: एक चरण‑दर‑चरण गाइड](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF .NET का उपयोग करके PDFs से ग्राफ़िक्स कैसे हटाएं: एक पूर्ण गाइड](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Aspose.PDF for .NET का उपयोग करके मल्टी‑लेयर PDFs कैसे बनाएं: एक व्यापक गाइड](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/programming-with-security-and-signatures/_index.md b/pdf/hindi/net/programming-with-security-and-signatures/_index.md index cbaa1dd6e9..d033842492 100644 --- a/pdf/hindi/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hindi/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [C# में PDF हस्ताक्षर जाँचें – साइन किए गए PDF फ़ाइलें पढ़ें](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | .NET के लिए Aspose.PDF का उपयोग करके PDF हस्ताक्षर कैसे पढ़ें, इस चरण-दर-स्टेप मार्गदर्शिका में जानें। | | [PDF फ़ाइलों की मरम्मत कैसे करें – Aspose.Pdf के साथ पूर्ण C# गाइड](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Aspose.Pdf का उपयोग करके C# में PDF फ़ाइलों को ठीक करने के चरण-दर-स्टेप मार्गदर्शन। | | [C# में PDF हस्ताक्षर सत्यापित करें – पूर्ण प्रोग्रामिंग गाइड](./verify-pdf-signature-in-c-complete-programming-guide/) | .NET के लिए Aspose.PDF का उपयोग करके C# में PDF हस्ताक्षर कैसे सत्यापित करें, इस पूर्ण गाइड में जानें। | +| [C# में सिग्नेचर विकल्प बनाएं – डिजिटल साइनिंग के लिए पूर्ण गाइड](./create-signature-options-in-c-full-guide-to-digital-signing/) | .NET के लिए Aspose.PDF का उपयोग करके C# में डिजिटल हस्ताक्षर विकल्प बनाने की पूरी गाइड सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/hindi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..58d78f9e50 --- /dev/null +++ b/pdf/hindi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: C# में डिजिटल सिग्नेचर लागू करने के लिए सिग्नेचर विकल्प बनाएं। सिग्नेचर + को कॉन्फ़िगर करना, कस्टम हैश फ़ंक्शन लागू करना, और प्रोग्रामेटिकली दस्तावेज़ों पर + साइन करना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: hi +lastmod: 2026-08-14 +og_description: C# में सिग्नेचर विकल्प बनाएं और डिजिटल सिग्नेचर लागू करें। यह ट्यूटोरियल + आपको सिग्नेचर को कॉन्फ़िगर करने, एक कस्टम हैश फ़ंक्शन जोड़ने और दस्तावेज़ पर साइन + करने के चरणों के माध्यम से ले जाता है। +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: C# में हस्ताक्षर विकल्प बनाएं – चरण‑दर‑चरण डिजिटल साइनिंग गाइड +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: C# में हस्ताक्षर विकल्प बनाएं – डिजिटल साइनिंग की पूरी गाइड +url: /hi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में सिग्नेचर विकल्प बनाएं – डिजिटल साइनिंग के लिए पूर्ण गाइड + +C# में सिग्नेचर विकल्प बनाकर डिजिटल‑सिग्नेचर वर्कफ़्लो को कॉन्फ़िगर करें। यह ट्यूटोरियल दिखाता है कि डिजिटल सिग्नेचर कैसे लागू करें, कस्टम हैश फ़ंक्शन कैसे इम्प्लीमेंट करें, और `SignatureOptions` क्लास का उपयोग करके दस्तावेज़ पर साइन कैसे करें। यदि आपको कभी .NET एप्लिकेशन से PDF, XML, या किसी भी बाइनरी पेलोड को साइन करने की आवश्यकता पड़ी है, तो नीचे दिए गए चरण एक तैयार‑चलाने‑योग्य समाधान प्रदान करते हैं। + +आप सीखेंगे कि कैसे: + +* कस्टम हैश एल्गोरिदम के साथ `SignatureOptions` को कॉन्फ़िगर करें, +* साइनिंग मेथड को सही ढंग से कॉल करें, +* यह सत्यापित करें कि सिग्नेचर लागू हो गया है, +* सिग्नेचर कॉन्फ़िगर करते समय आम समस्याओं से बचें। + +एकमात्र पूर्वापेक्षाएँ हैं एक हालिया .NET SDK (≥ .NET 6) और एक साइनिंग लाइब्रेरी जो `SignatureOptions` को एक्सपोज़ करती है (उदाहरण के लिए, **GroupDocs.Signature**, **Aspose.Signature**, या कोई समान API)। कोई बाहरी टूल आवश्यक नहीं है। + +--- + +## Prerequisites + +| आवश्यकता | क्यों महत्वपूर्ण है | +|-------------|----------------| +| .NET 6 SDK या बाद का संस्करण | उदाहरणों में उपयोग किए गए आधुनिक भाषा सुविधाएँ प्रदान करता है। | +| एक साइनिंग‑लाइब्रेरी NuGet पैकेज (जैसे, `GroupDocs.Signature`) | `SignatureOptions` प्रकार और `Sign` एक्सटेंशन मेथड प्रदान करता है। | +| प्राइवेट की या प्रमाणपत्र तक पहुँच | सत्यापनीय डिजिटल सिग्नेचर उत्पन्न करने के लिए आवश्यक। | + +स्टैंडर्ड CLI के साथ लाइब्रेरी इंस्टॉल करें: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## चरण 1: सिग्नेचर विकल्प बनाएं + +पहला कदम `SignatureOptions` को इंस्टैंशिएट करना और उन प्रॉपर्टीज़ को सेट करना है जो साइनिंग प्रक्रिया को नियंत्रित करती हैं। यह ऑब्जेक्ट लाइब्रेरी को बताता है *क्या* साइन करना है और *कैसे* साइन करना है। + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**क्यों महत्वपूर्ण है:** `SignatureOptions` आपके कोड और साइनिंग इंजन के बीच एक कॉन्ट्रैक्ट की तरह कार्य करता है। इसे पहले से कॉन्फ़िगर करके आप कई दस्तावेज़ों को साइन करते समय दोहराए जाने वाले बायलरप्लेट को बचा लेते हैं। + +--- + +## चरण 2: कस्टम हैश फ़ंक्शन इम्प्लीमेंट करें + +एक *कस्टम हैश फ़ंक्शन* आपको उस डाइजेस्ट पर पूर्ण नियंत्रण देता है जिसे सिग्नेचर एल्गोरिदम साइन करता है। यह तब उपयोगी होता है जब डिफ़ॉल्ट हैश (SHA‑256) अनुपालन आवश्यकताओं को पूरा नहीं करता या जब आपको दस्तावेज़ के केवल एक हिस्से को हैश करना हो। + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**क्यों महत्वपूर्ण है:** `CustomSignHash` को असाइन करके आप लाइब्रेरी के आंतरिक हैशिंग स्टेप को `MyHash` से बदल देते हैं। साइनिंग इंजन अब आपके फ़ंक्शन द्वारा लौटाए गए बाइट्स को साइन करेगा, जिससे किसी भी कस्टम नीति के साथ अनुपालन सुनिश्चित होता है। + +--- + +## चरण 3: दस्तावेज़ लोड करें और डिजिटल सिग्नेचर लागू करें + +विकल्प तैयार होने के बाद, आप लक्ष्य फ़ाइल खोल सकते हैं और साइनिंग मेथड को कॉल कर सकते हैं। `Sign` मेथड लाइब्रेरी द्वारा प्रदान किया गया है और कॉन्फ़िगर किए गए `SignatureOptions` का उपयोग करता है। + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**क्यों महत्वपूर्ण है:** `Sign` कॉल आंतरिक रूप से तीन कार्य करता है: + +1. **हैश गणना** – अब आपके कस्टम हैश फ़ंक्शन को सौंपा गया है। +2. **सिग्नेचर जनरेशन** – लाइब्रेरी की कॉन्फ़िगरेशन में प्रदान की गई प्राइवेट की का उपयोग करके। +3. **एम्बेडिंग** – जनरेट किया गया सिग्नेचर आउटपुट फ़ाइल में जोड़ दिया जाता है। + +यदि कोई भी स्टेप फेल हो जाता है, तो मेथड `false` रिटर्न करता है, जिससे आप त्रुटि को सुगमता से हैंडल कर सकते हैं। + +--- + +## चरण 4: यह सत्यापित करें कि दस्तावेज़ साइन हुआ है + +एक त्वरित वेरिफिकेशन यह पुष्टि करता है कि सिग्नेचर सही ढंग से लागू हुआ है। अधिकांश लाइब्रेरीज़ एक `Verify` मेथड एक्सपोज़ करती हैं जो साइन किए गए फ़ाइल की इंटेग्रिटी चेक करती है। + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**क्यों महत्वपूर्ण है:** वेरिफिकेशन यह सुनिश्चित करता है कि साइन किए गए दस्तावेज़ को साइनिंग के बाद छेड़छाड़ नहीं किया गया है और कस्टम हैश ने एक संगत डाइजेस्ट उत्पन्न किया है। + +--- + +## विभिन्न फ़ाइल प्रकारों के लिए सिग्नेचर कैसे कॉन्फ़िगर करें + +एक ही `SignatureOptions` ऑब्जेक्ट को PDFs, Word दस्तावेज़, इमेजेज़, या साधारण बाइनरीज़ के लिए पुनः उपयोग किया जा सकता है। केवल आवश्यक परिवर्तन विशिष्ट विकल्प क्लास है (जैसे, `PdfSignatureOptions`, `WordSignatureOptions`)। नीचे JPEG इमेज के लिए एक त्वरित उदाहरण दिया गया है: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**क्यों महत्वपूर्ण है:** प्रत्येक फ़ॉर्मेट के लिए *सिग्नेचर कॉन्फ़िगर* करना समझने से आप एक ही कोडबेस को कई दस्तावेज़ प्रकारों में विस्तारित कर सकते हैं, बिना हैशिंग लॉजिक को फिर से लिखे। + +--- + +## सामान्य समस्याएँ और सर्वोत्तम प्रथाएँ + +| समस्या | सुझावित समाधान | +|---------|-----------------| +| `SignatureOptions` बनाते समय `CustomSignHash` सेट करना भूल जाना | विकल्प ऑब्जेक्ट बनाते ही डेलीगेट को असाइन करें। | +| ऐसा हैश एल्गोरिदम उपयोग करना जो साइनिंग प्रमाणपत्र समर्थन नहीं करता | प्रमाणपत्र की की उपयोगिता को हैश लंबाई (जैसे, RSA‑2048 साथ SHA‑512) से मिलाएँ। | +| `Signature` ऑब्जेक्ट को डिस्पोज़ करना न भूलना | फ़ाइल हैंडल्स को रिलीज़ करने के लिए `Signature` इंस्टेंस को `using` ब्लॉक में रैप करें। | +| साइन किए गए फ़ाइल को मूल स्रोत पर ओवरराइट करना | मूल दस्तावेज़ को संरक्षित रखने के लिए हमेशा नई फ़ाइल पाथ (`outputPath`) पर लिखें। | + +--- + +## पूर्ण कार्यशील उदाहरण + +नीचे एक स्व-समाहित प्रोग्राम है जो सभी हिस्सों को एक साथ जोड़ता है। इसे एक नए कंसोल प्रोजेक्ट में कॉपी करें और चलाएँ; कंसोल सफलता या विफलता की रिपोर्ट देगा। + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**अपेक्षित आउटपुट** + +``` +Signature verified successfully. +``` + +यदि कंसोल “Signing failed.” या “Signature verification failed.” प्रिंट करता है, तो प्रमाणपत्र कॉन्फ़िगरेशन को दोबारा जांचें और सुनिश्चित करें कि कस्टम हैश अपेक्षित आकार का बाइट एरे रिटर्न करता है। + +--- + +## निष्कर्ष + +अब आप जानते हैं कि **C# में सिग्नेचर विकल्प कैसे बनाएं**, एक **कस्टम हैश फ़ंक्शन** जोड़ें, और किसी भी समर्थित दस्तावेज़ पर **डिजिटल सिग्नेचर** लागू करें। ट्यूटोरियल ने पूरी लाइफ़साइकल को कवर किया: विकल्प कॉन्फ़िगर करना, फ़ाइल साइन करना, और परिणाम को वेरिफ़ाई करना। समान `SignatureOptions` इंस्टेंस को पुनः उपयोग करके आप **इमेजेज़, Word फ़ाइलें, या रॉ बाइनरीज़** के लिए **सिग्नेचर कैसे कॉन्फ़िगर करें** भी कर सकते हैं। + +--- + +## आगे क्या? + +* अतिरिक्त `SignatureOptions` प्रॉपर्टीज़ जैसे विज़ुअल स्टैम्प, टाइमस्टैम्प सर्वर, और प्रमाणपत्र चेन का अन्वेषण करें – ये **डिजिटल सिग्नेचर लागू करना** कीवर्ड के साथ संरेखित हैं। +* `MyHash` के अंदर इम्प्लीमेंटेशन बदलकर अन्य हैश एल्गोरिदम (जैसे, Blake2b) के साथ प्रयोग करें। +* साइनिंग फ्लो को एक वेब API में इंटीग्रेट करें ताकि ऑन‑द‑फ़्लाई दस्तावेज़ साइनिंग सक्षम हो सके – यह **सेवा‑उन्मुख आर्किटेक्चर में दस्तावेज़ साइन करना** का स्वाभाविक विस्तार है। + +कोड को अपनी सुरक्षा नीतियों के अनुसार अनुकूलित करने में संकोच न करें, और अपने अनुभव को कमेंट्स में साझा करें। साइनिंग का आनंद लें! + +## अगला क्या सीखें? + +नीचे दिए गए ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर कर सकें। + +- [Aspose.PDF for .NET के साथ PDF सिग्नेचर भाषा कैसे बदलें](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/programming-with-stamps-and-watermarks/_index.md b/pdf/hindi/net/programming-with-stamps-and-watermarks/_index.md index 287ce1dac1..93bd325efc 100644 --- a/pdf/hindi/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/hindi/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF के "स्टैम्प और वॉटरमार्क क | [पीडीएफ फाइल के पादलेख में पाठ](./text-in-footer/) | .NET के लिए Aspose.PDF के साथ PDF फ़ाइल के पाद लेख में पाठ जोड़ना सीखें। | | [पीडीएफ फाइल के हेडर में पाठ](./text-in-header/) | इस चरण-दर-चरण ट्यूटोरियल के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF में टेक्स्ट हेडर जोड़ना सीखें। अपने दस्तावेज़ों को कुशलतापूर्वक और प्रभावी ढंग से बेहतर बनाएँ। | | [C# में बेयट्स नंबरिंग PDF जोड़ें – पूर्ण गाइड](./add-bates-numbering-pdf-in-c-complete-guide/) | .NET के लिए Aspose.PDF का उपयोग करके PDF में बेयट्स नंबरिंग जोड़ने की पूरी मार्गदर्शिका। चरण-दर-चरण उदाहरण और कोड। | +| [C# में बेट्स नंबरिंग विकल्प सेट करने का तरीका – पूर्ण गाइड](./how-to-set-bates-numbering-options-in-c-complete-guide/) | | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/hindi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..090b5bfa94 --- /dev/null +++ b/pdf/hindi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: C# में GroupDocs का उपयोग करके बेट्स नंबरिंग विकल्प कैसे सेट करें। वर्ड + को PDF में बदलते समय कस्टम प्रीफ़िक्स और प्रारंभिक नंबर जोड़ने के लिए इस चरण‑दर‑चरण + ट्यूटोरियल का पालन करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: hi +lastmod: 2026-08-14 +og_description: C# में बेट्स नंबरिंग विकल्प जल्दी से कैसे सेट करें। यह गाइड दिखाता + है कि वर्ड को PDF में बदलते समय कस्टम प्रीफ़िक्स और प्रारंभिक नंबर कैसे जोड़ें। +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: C# में बेट्स नंबरिंग विकल्प कैसे सेट करें – चरण‑दर‑चरण ट्यूटोरियल +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: C# में बेट्स नंबरिंग विकल्प कैसे सेट करें – पूर्ण गाइड +url: /hi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में Bates नंबरिंग विकल्प कैसे सेट करें – पूर्ण गाइड + +यदि आपको C# में **how to set bates numbering options** चाहिए, तो यह गाइड आपको सटीक चरणों के माध्यम से ले जाएगा। आप सीखेंगे कि प्रारंभिक संख्या कैसे कॉन्फ़िगर करें, प्रीफ़िक्स कैसे जोड़ें, और GroupDocs API का उपयोग करके Word दस्तावेज़ को PDF में बदलते समय नंबरिंग कैसे लागू करें। + +दस्तावेज़ प्रोसेसिंग में अक्सर कानूनी या अभिलेखीय उद्देश्यों के लिए प्रत्येक पृष्ठ पर अद्वितीय पहचानकर्ता की आवश्यकता होती है। इस ट्यूटोरियल के अंत तक आपके पास एक पुन: उपयोग योग्य स्निपेट होगा जिसे आप किसी भी .NET प्रोजेक्ट में डाल सकते हैं, चाहे आप लिटिगेशन सपोर्ट टूल बना रहे हों या एक स्वचालित रिपोर्ट जेनरेटर। बाहरी उपकरणों की आवश्यकता नहीं है—केवल GroupDocs.Conversion लाइब्रेरी और कुछ C# पंक्तियाँ। + +## आपको क्या चाहिए + +* .NET 6.0 SDK या बाद का संस्करण स्थापित हो +* Visual Studio 2022 (या कोई भी IDE जो .NET को सपोर्ट करता हो) +* एक वैध GroupDocs.Conversion लाइसेंस (टेस्टिंग के लिए फ्री ट्रायल काम करता है) +* एक सैंपल Word दस्तावेज़ (`input.docx`) जिसे आप नंबर करना चाहते हैं + +ये पूर्वापेक्षाएँ सुनिश्चित करती हैं कि कोड अतिरिक्त कॉन्फ़िगरेशन के बिना चल सके। + +## Bates नंबरिंग विकल्प कैसे सेट करें – अवलोकन + +Bates नंबरिंग विकल्प **how to set bates numbering options** का मूल तीन ऑब्जेक्ट्स में निहित है: + +1. `Document` – स्रोत फ़ाइल को लोड करता है। +2. `BatesNumberingOptions` – प्रारंभिक संख्या, प्रीफ़िक्स, और अन्य फ़ॉर्मेटिंग विवरण रखता है। +3. `AddBatesNumbering` – वह मेथड जो प्रत्येक पृष्ठ में नंबरिंग डालता है। + +समझना कि प्रत्येक भाग क्यों मौजूद है, आपको समाधान को अधिक जटिल परिदृश्यों जैसे कस्टम फ़ॉन्ट्स या बहु‑भाषा नंबरिंग के लिए अनुकूलित करने में मदद करता है। + +## चरण 1: GroupDocs.Conversion NuGet पैकेज स्थापित करें + +Open a terminal in your solution folder and run: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** `Document` क्लास और `AddBatesNumbering` एक्सटेंशन मेथड प्रदान करता है जिसका उपयोग बाद में ट्यूटोरियल में किया गया है। + +## चरण 2: स्रोत दस्तावेज़ लोड करें + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*इस चरण का उद्देश्य क्या है?* +फ़ाइल को लोड करने से एक इन‑मेमोरी प्रतिनिधित्व बनता है जिसे कन्वर्ज़न इंजन हेरफेर कर सकता है। `Document` इंस्टेंस के बिना आप Bates नंबरिंग या कोई अन्य ट्रांसफ़ॉर्मेशन लागू नहीं कर सकते। + +## चरण 3: Bates नंबरिंग विकल्प बनाएं + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*इस चरण का उद्देश्य क्या है?* +`BatesNumberingOptions` सभी सेटिंग्स को समाहित करता है जो आपको **setting bates numbering options** के समय चाहिए हो सकती हैं। `StartNumber` और `Prefix` को समायोजित करने से आप आउटपुट को अपने केस‑मैनेजमेंट सिस्टम के साथ संरेखित कर सकते हैं। `Position` प्रॉपर्टी दृश्य स्थान को नियंत्रित करती है, जो अक्सर अनुपालन आवश्यकता होती है। + +## चरण 4: दस्तावेज़ पर Bates नंबरिंग लागू करें + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` मेथड लोड किए गए `Document` के प्रत्येक पृष्ठ पर चलता है और कॉन्फ़िगर की गई स्ट्रिंग डालता है। क्योंकि यह मेथड इन‑मेमोरी प्रतिनिधित्व पर काम करता है, आप सहेजने से पहले अतिरिक्त प्रोसेसिंग चरण (जैसे, वाटरमार्किंग) जोड़ सकते हैं। + +## चरण 5: परिणाम को PDF के रूप में कन्वर्ट और सहेजें + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*इस चरण का उद्देश्य क्या है?* +PDF के रूप में सहेजना कानूनी दस्तावेज़ों के लिए एक सामान्य अंतिम फ़ॉर्मेट है। `PdfConvertOptions` ऑब्जेक्ट आपको आउटपुट को बारीकी से ट्यून करने देता है, लेकिन बुनियादी नंबरिंग के लिए यह आवश्यक नहीं है। `Save` कॉल पूरी तरह से नंबर किया गया PDF डिस्क पर लिखता है। + +## पूर्ण, चलाने योग्य उदाहरण + +Putting everything together, here is a self‑contained console application you can compile and run: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**अपेक्षित आउटपुट** + +प्रोग्राम चलाने से `output.pdf` बनता है जहाँ प्रत्येक पृष्ठ पर `CASE-1000`, `CASE-1001` आदि जैसा लेबल दाएँ फुटर में दिखता है। किसी भी व्यूअर में PDF खोलें ताकि आप सत्यापित कर सकें कि नंबर इच्छित रूप से प्रदर्शित हो रहे हैं। + +## सामान्य समस्याएँ और सर्वोत्तम प्रथाएँ + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| **Relative paths के कारण `FileNotFoundException`** | कंसोल एप्लिकेशन की कार्यशील डायरेक्टरी Visual Studio की तुलना में अलग हो सकती है। | एब्सोल्यूट पाथ्स का उपयोग करें या `Path.Combine(AppContext.BaseDirectory, "input.docx")`। | +| **Numbering मौजूदा फुटर के साथ ओवरलैप करता है** | यदि स्रोत दस्तावेज़ में चुने हुए फुटर क्षेत्र में पहले से सामग्री है, तो नया नंबर छिप सकता है। | एक अलग `Position` चुनें (जैसे, `HeaderLeft`) या स्रोत टेम्पलेट को समायोजित करें। | +| **बड़े दस्तावेज़ धीमे होते हैं** | Bates नंबरिंग प्रत्येक पृष्ठ पर इटरेट करती है; फ़ाइल आकार के साथ मेमोरी उपयोग बढ़ता है। | यदि आप 500 पृष्ठों से अधिक हैं तो `Document.Split` का उपयोग करके दस्तावेज़ को भागों में प्रोसेस करें। | +| **लाइसेंस समाप्ति** | GroupDocs का फ्री ट्रायल 30 दिनों के बाद समाप्त हो जाता है, जिससे `AddBatesNumbering` पर एक्सेप्शन आता है। | दस्तावेज़ लोड करने से पहले वैध लाइसेंस कुंजी लागू करें: `License license = new License(); license.SetLicense("license.lic");`। | + +**प्रो टिप:** यदि आपको प्रत्येक केस के लिए अलग नंबर फ़ॉर्मेट चाहिए (जैसे, `2023-CASE-001`), तो `BatesNumberingOptions` बनाने से पहले प्रीफ़िक्स को डायनामिक रूप से बनाएं। + +## समाधान का विस्तार + +एक ही **Bates numbering C#** तरीका अन्य स्रोत फ़ॉर्मेट जैसे `.txt`, `.html`, या यहाँ तक कि इमेजेज़ के साथ भी काम करता है। बस `Document` ऑब्जेक्ट बनाते समय फ़ाइल एक्सटेंशन बदलें, और कन्वर्ज़न इंजन बाकी सब संभाल लेगा। + +You might also combine **document conversion C#** with OCR for scanned PDFs: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## निष्कर्ष + +अब आप C# में **how to set bates numbering options** को शुरू से अंत तक जानते हैं। `BatesNumberingOptions` ऑब्जेक्ट बनाकर, उसे `AddBatesNumbering` के साथ लागू करके, और परिणाम को PDF के रूप में सहेजकर, आप कानूनी रूप से अनुपालन योग्य, अद्वितीय पहचान वाले दस्तावेज़ों का उत्पादन स्वचालित कर सकते हैं। + +अब आप **C# PDF generation**, **document conversion C#**, या उन्नत **GroupDocs API** सुविधाओं जैसे वाटरमार्किंग और डिजिटल सिग्नेचर जैसे संबंधित विषयों का अन्वेषण कर सकते हैं। विभिन्न प्रीफ़िक्स, पोज़िशन, और नंबर फ़ॉर्मेट के साथ प्रयोग करें ताकि आपका वर्कफ़्लो फिट हो सके। + +कोडिंग का आनंद लें! + +## अब आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट-संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण-दर-चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API सुविधाओं में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [C# में Bates नंबरिंग PDF जोड़ें – पूर्ण गाइड](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Aspose.PDF for .NET का उपयोग करके PDFs में पेज नंबर जोड़ना और कस्टमाइज़ करना | दस्तावेज़ मैनिपुलेशन गाइड](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Aspose.PDF for .NET का उपयोग करके PDFs में टेक्स्ट स्टैम्प फुटर जोड़ना: चरण‑दर‑चरण गाइड](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/annotations/_index.md b/pdf/hongkong/net/annotations/_index.md index 71b4c0f881..644d69480c 100644 --- a/pdf/hongkong/net/annotations/_index.md +++ b/pdf/hongkong/net/annotations/_index.md @@ -24,6 +24,7 @@ | [新增 Swf 檔案作為 PDF 註釋](./addswffileasannotation/) 了解如何使用 Aspose.PDF for .NET 將 SWF 檔案新增為 PDF 註解。透過這個詳細的教程,使用互動式多媒體內容增強您的 PDF。 | | [刪除頁面所有註釋](./deleteallannotationsfrompage/) 了解如何使用 Aspose.PDF for .NET 從 PDF 頁面刪除所有註解。按照我們的逐步指南有效地清理您的 PDF。 | | [刪除 PDF 檔案中的特定註釋](./deleteparticularannotation/) |透過本逐步指南了解如何使用 Aspose.PDF for .NET 刪除 PDF 檔案中的特定註解。 | +| [在 PDF 上繪製矩形 – 步驟說明 C# 教學](./draw-rectangle-on-pdf-step-by-step-c-guide/) |透過本逐步指南學習如何使用 Aspose.PDF for .NET 在 PDF 中繪製矩形。 | | [提取 PDF 文件中突出顯示的文本](./extracthighlightedtext/) |透過本教學學習如何使用 Aspose.PDF for .NET 從 PDF 文件有效地提取突出顯示的文字。非常適合數據分析和內容審查。 | | [取得頁面所有註釋](./getallannotationsfrompage/) |在本逐步指南中了解如何使用 Aspose.PDF for .NET 從 PDF 文件中提取註解。適合各個層級的開發人員。 | | [取得 PDF 檔案中的特定註釋](./getparticularannotation/) |透過這個詳細的 2000 字教程,了解如何使用 Aspose.PDF for .NET 從 PDF 文件中提取特定註釋。非常適合開發人員。 | diff --git a/pdf/hongkong/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/hongkong/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..b67e3b8c59 --- /dev/null +++ b/pdf/hongkong/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: 使用 C# 快速在 PDF 上繪製矩形。了解如何定義矩形尺寸,並只需幾行程式碼即可在 PDF 頁面上加入形狀。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: zh-hant +lastmod: 2026-08-14 +og_description: 在 PDF 上使用 C# 迅速繪製矩形。本指南說明如何設定矩形尺寸、加入形狀,並驗證頁面邊界,以確保 PDF 圖形的可靠性。 +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: 在 PDF 上繪製矩形 – 完整 C# 教學 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: 在 PDF 上繪製矩形 – C# 步驟指南 +url: /zh-hant/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 PDF 上繪製矩形 – 完整 C# 教學 + +如果您需要 **在 PDF 上繪製矩形**(draw rectangle on pdf)使用 C#,本指南將為您展示一個簡潔、可直接投入生產環境的解決方案。您將會看到 **如何定義矩形尺寸**、驗證形狀是否符合頁面,並透過單一方法呼叫將其加入頁面。 + +本教學涵蓋從建立 PDF 文件到渲染矩形的全部步驟,您只要把程式碼複製貼上到自己的專案,即可立即看到結果。無需額外文件說明——只要跟隨以下步驟即可。 + +## 前置條件 + +開始之前,請確保您已具備: + +* .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.7+) +* **Aspose.PDF for .NET** NuGet 套件(`Install-Package Aspose.PDF`) +* 基本的 C# 語法概念 +* 如 Visual Studio 或 VS Code 等開發環境 + +> **專業提示:** 使用 Aspose.PDF 的免費評估授權進行快速實驗;雖會加上小水印,但可測試所有功能。 + +## 如何使用 C# 在 PDF 上繪製矩形 + +此任務的核心是建立 `RectangleShape`、設定尺寸與筆劃,並將其附加至 `Page`。以下 H2 標題即包含主要關鍵字,以符合 SEO 需求。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### 各步驟說明 + +| 步驟 | 為何重要 | +|------|----------| +| **1️⃣ 建立新的 PDF 文件** | 初始化容器,以容納頁面與圖形。 | +| **2️⃣ 新增空白頁面** | 必須先取得 `Page` 物件,因為形狀是附加在頁面上,而非直接附加在文件上。 | +| **3️⃣ 定義矩形邊界** | 這裡說明 **如何定義矩形尺寸**。`Rectangle` 建構子接受 `x`、`y`、`width`、`height`(單位為點,1 pt = 1/72 in)。 | +| **4️⃣ 建立矩形形狀** | `RectangleShape` 為 Aspose 用來繪製矩形的類別。設定 `StrokeColor` 以定義輪廓;亦可設定 `FillColor` 產生實心填色。 | +| **5️⃣ 驗證頁面邊界** | `CheckShapeBoundary` 會在矩形超出頁面尺寸時拋出例外,避免產生格式錯誤的 PDF。 | +| **6️⃣ 將形狀加入頁面** | 形狀會成為頁面內容串流的一部份。 | +| **7️⃣ 儲存 PDF** | 將文件寫入檔案,之後可使用任何 PDF 閱讀器開啟。 | + +產生的 `RectangleDemo.pdf` 會在頁面左上角呈現一個寬 500 pt、高 700 pt 的黑色矩形。 + +![在 PDF 上繪製矩形範例](https://example.com/rectangle-demo.png "在 PDF 上繪製矩形範例") + +*圖片替代文字:在 PDF 上繪製矩形範例,顯示 PDF 頁面左上角的黑色矩形。* + +## 如何為不同頁面尺寸定義矩形尺寸 + +上方程式碼使用固定值(`500 x 700`)。在實務應用中,矩形常需要依頁面的寬高自動調整。 + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**重點說明:** + +* 使用 `page.PageInfo.Width` 與 `Height` 取得實際頁面尺寸。 +* 乘上比例因子(例如 `0.8f`)即可將尺寸表達為頁面寬高的百分比。 +* 透過將頁面尺寸減去矩形尺寸後除以二,即可將矩形置中。 + +## 常見陷阱與避免方式 + +| 陷阱 | 為何會發生 | 解決方法 | +|------|------------|----------| +| 矩形超出頁面 | 使用硬編碼尺寸大於頁面大小。 | 在加入形狀前 **先呼叫** `page.CheckShapeBoundary`;若拋出例外,調整尺寸。 | +| 筆劃不可見 | `StrokeColor` 保持預設 (`Color.Empty`)。 | 明確設定 `StrokeColor`(例如 `Color.Black`)。 | +| 矩形出現在螢幕外 | PDF 座標系統的原點在左下角,使用螢幕式左上角座標會導致翻轉。 | 記得原點 `(0,0)` 位於左下角,需調整 `y` 座標或使用 `pageHeight - desiredY`。 | +| 線條粗細異常 | 預設線寬過細,列印時不易辨識。 | 設定 `rectangleShape.LineWidth = 2;` 以增粗線條。 | + +## 延伸範例 + +一旦您能 **在 PDF 上繪製矩形**,即可輕鬆加入其他形狀: + +* **EllipseShape** – 繪製圓形或橢圓。 +* **PolygonShape** – 繪製自訂多邊形。 +* **TextFragment** – 為矩形加上文字標籤。 + +所有形狀的工作流程相同:定義邊界、設定外觀、驗證邊界,最後加入頁面。 + +## 完整可執行程式 + +以下為結合基礎矩形與動態尺寸範例的完整程式碼。將其貼到新的 Console 專案,還原 `Aspose.PDF` NuGet 套件後即可執行。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**預期結果:** +開啟 `CombinedRectangles.pdf` 後,您會看到一個位於左下角的黑色矩形,以及一個置中、深藍色外框、淡黃色填色的矩形。兩個矩形皆遵守頁面邊距。 + +## 結論 + +現在您已掌握如何使用 C# **在 PDF 上繪製矩形**,以及 **如何定義矩形尺寸**,無論是固定尺寸或響應式布局。此方法利用 Aspose.PDF 的 `RectangleShape`、邊界檢查與簡單算術,即可適應任何頁面大小。 + +接下來,您可以探索: + +* 加入 **填色** 與 **線條樣式**(虛線、點線)— 次要關鍵字:如何以樣式定義矩形尺寸。 +* 將多個形狀合併於同一 `Page`,製作圖表或表單。 +* 將 PDF 輸出為串流,以供 Web API 使用,而非儲存至磁碟。 + +多嘗試不同的尺寸、顏色與位置,徹底掌握 .NET 應用程式中的 PDF 圖形繪製。祝您開發順利! + +## 接下來該學什麼? + +以下教學與本篇內容密切相關,能進一步延伸您所學的技巧。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您熟悉更多 API 功能,並探索替代實作方式。 + +- [如何使用 Aspose.PDF for .NET 自訂 PDF:設定頁面邊距與繪製線條](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [如何在 PDF 中加入頁面印章(Watermark)使用 Aspose.PDF for .NET:完整指南](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [如何在 PDF 中加入頁碼印章(Page Number Stamp)使用 Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/conversion-export/_index.md b/pdf/hongkong/net/conversion-export/_index.md index 2de1a5c427..60792cccd1 100644 --- a/pdf/hongkong/net/conversion-export/_index.md +++ b/pdf/hongkong/net/conversion-export/_index.md @@ -224,6 +224,8 @@ Aspose.PDF Net 程式碼教學 ### [使用 Aspose.PDF for .NET 將 PDF 轉換為 HTML](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF Net 程式碼教學 +### [將 PDF 儲存為 HTML 並使用 Aspose.PDF 轉換為 PDF/X‑4(C#)](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) + ### [使用 Aspose.PDF 在 .NET 中將 PDF 轉換為 TIFF:逐步指南](./pdf-to-tiff-conversion-aspose-pdf-net/) 了解如何使用 Aspose.PDF for .NET 將 PDF 文件轉換為 TIFF 影像。掌握自訂色彩深度和先進的影像處理技術。 diff --git a/pdf/hongkong/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/hongkong/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..1807df6ddb --- /dev/null +++ b/pdf/hongkong/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,230 @@ +--- +category: general +date: 2026-08-14 +description: 使用 Aspose.PDF for C# 將 PDF 儲存為 HTML,並將 PDF 轉換為 PDF/X‑4。逐步程式碼示範 HTML 匯出、簽署清單以及圖形狀態編輯。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: zh-hant +lastmod: 2026-08-14 +og_description: 將 PDF 儲存為 HTML,並使用 Aspose.PDF for C# 將 PDF 轉換為 PDF/X‑4。請參考本完整指南,了解如何匯出 + HTML、列出簽章,及編輯圖形狀態。 +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: 使用 Aspose.PDF 將 PDF 另存為 HTML 並轉換為 PDF/X‑4 – C# 指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: 將 PDF 儲存為 HTML,並使用 Aspose.PDF 在 C# 中轉換為 PDF/X‑4 +url: /zh-hant/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 將 PDF 儲存為 HTML 並使用 Aspose.PDF 於 C# 轉換為 PDF/X‑4 + +如果您需要 **將 PDF 儲存為 HTML**,Aspose.Pdf 讓此過程變得簡單。本教學亦示範如何 **將 PDF 轉換為 PDF/X‑4**、列出簽名欄位,並加入自訂 ExtGState,為您提供完整的端對端工作流程。 + +您將學會: + +* 將 PDF 匯出為乾淨的 HTML,同時跳過點陣圖像。 +* 將 PDF 文件轉換為 PDF/X‑4 標準,以取得列印就緒的輸出。 +* 列舉 PDF 中的所有簽名欄位。 +* 在第一頁插入自訂的圖形狀態 (ExtGState)。 + +所有程式碼皆在 .NET 6 或更新版本上執行,並需要 Aspose.Pdf for .NET NuGet 套件。 + +## Prerequisites + +| Requirement | Reason | +|-------------|--------| +| .NET 6 SDK 或更新版本 | 提供 C# 範例所需的執行環境。 | +| Visual Studio 2022(或任何 C# IDE) | 讓您輕鬆編輯與除錯。 | +| Aspose.Pdf for .NET(v23.12 或更新) | 提供本教學中使用的 `Document`、`PdfFormatConversionOptions` 與 `HtmlSaveOptions` 類別。 | +| 範例 PDF 檔案(`sample.pdf`) | 將被處理的來源文件。 | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +程式會執行六個邏輯步驟: + +1. 載入來源 PDF。 +2. 列出每個簽名欄位名稱。 +3. **將 PDF 轉換為 PDF/X‑4** 並儲存結果。 +4. **將 PDF 儲存為 HTML**,同時跳過點陣圖像。 +5. 在第一頁加入自訂 ExtGState(圖形狀態)。 +6. 使用新的圖形狀態儲存已修改的 PDF。 + +以下分別說明每個步驟,並提供完整程式碼與背後的考量。 + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` 代表整個 PDF 檔案。只載入一次即可在後續所有操作中重複使用,同時減少 I/O 開銷。 + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: 了解簽名欄位名稱在之後需要驗證、移除或取代數位簽章時相當重要。`Signatures` 集合提供快速且唯讀的欄位檢視。 + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` 告訴 Aspose.Pdf 必須嵌入所有必要的資源(字型、色彩描述檔),並強制執行 PDF/X‑4 限制。 +* 轉換在記憶體中完成;只有最終檔案會寫入磁碟,保持操作快速。 + +> **Pro tip:** 若您的下游工作流程對合規性要求嚴格,請使用 PDF/X‑4 驗證工具(例如 Adobe Preflight)驗證輸出結果。 + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Why you might want this**: HTML 輸出對於網頁預覽或內容索引很有用。跳過點陣圖像(`SkipRasterImages = true`)可讓 HTML 輕量化,提升載入速度,尤其當原始 PDF 包含高解析度掃描時。 + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: **ExtGState** 物件控制透明度、混合模式與其他圖形參數。加入 `GS0` 後,您日後可在內容串流中引用此狀態(例如半透明覆蓋層)。此程式碼使用低階 COS API,因為 Aspose.Pdf 並未提供建立 ExtGState 的高階封裝。 + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +最終檔案(`sample_with_extgstate.pdf`)包含: + +* 所有原始頁面與內容。 +* 符合 PDF/X‑4 標準的版本(`sample_pdfx4.pdf`)。 +* 不含點陣圖像的 HTML 表示(`sample.html`)。 +* 附加於第一頁資源的自訂 ExtGState(`GS0`)。 + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +如果來源 PDF 沒有簽名,迴圈將不會輸出任何內容,但仍會正常繼續執行。 + +## Common variations and edge cases + +| Situation | Adjustment | +|-----------|------------| +| **PDF contains no pages** | 在存取 `doc.Pages[1]` 前先檢查 `doc.Pages.Count`,以避免 `IndexOutOfRangeException`。 | +| **You need PDF/A‑2b instead of PDF/X‑4** | 在 `PdfFormatConversionOptions` 中將 `PdfStandard.PdfX4` 改為 `PdfStandard.PdfA2b`。 | +| **You want to keep raster images** | 在 `HtmlSaveOptions` 中將 `SkipRasterImages = false`(或直接省略此屬性)。 | +| **Multiple ExtGState objects** | 在加入 `extGStateDict` 時使用唯一鍵名(`GS1`、`GS2` …)。 | +| **Large PDFs (hundreds of MB)** | 在儲存前啟用 `doc.OptimizeResources = true`,以降低記憶體使用量。 | + +## Full source code (runnable) + + + +## What Should You Learn Next? + +以下教學與本指南所示技術密切相關,能進一步深化您的應用。每個資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [Comprehensive Guide: Convert PDF to HTML Using Aspose.PDF .NET with Custom Strategies](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Convert PDF to HTML with Custom Image URLs Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF to HTML Conversion Using Aspose.PDF .NET: Save Images as External PNGs](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/programming-with-forms/_index.md b/pdf/hongkong/net/programming-with-forms/_index.md index 1882fc4d96..d19ff47a1c 100644 --- a/pdf/hongkong/net/programming-with-forms/_index.md +++ b/pdf/hongkong/net/programming-with-forms/_index.md @@ -24,7 +24,8 @@ Aspose.PDF for .NET「使用表單程式設計」教學課程是希望建立和 | [在欄位中新增工具提示](./add-tooltip-to-field/) |在本逐步指南中了解如何使用 Aspose.PDF for .NET 在 PDF 文件中的表單欄位中新增工具提示。提高可用性和使用者體驗。 | | [阿拉伯文本填充](./arabic-text-filling/) |透過本逐步教學學習如何使用 Aspose.PDF for .NET 在 PDF 表單中填入阿拉伯文。增強您的 PDF 操作技能。 | | [組合框](./combo-box/) |了解如何使用 Aspose.PDF for .NET 在 PDF 中新增組合框。按照我們的逐步指南輕鬆建立互動式 PDF 表單。 | -| [建立文檔](./create-doc/) |透過本全面的逐步指南,學習如何使用 Aspose.PDF for .NET 建立具有單選按鈕的互動式 PDF 文件。 | +| [建立文檔](./create-doc/) |透過本全面的逐步指南,學習使用 Aspose.PDF for .NET 建立具有單選按鈕的互動式 PDF 文件。 | +| [在 C# 中建立 PDF 表單欄位](./create-pdf-form-field-in-c-step-by-step-guide/) |透過本逐步教學了解如何使用 Aspose.PDF for .NET 在 C# 中建立 PDF 表單欄位。 | | [刪除 PDF 文件中的表單字段](./delete-form-field/) |透過本逐步指南了解如何使用 Aspose.PDF for .NET 刪除 PDF 文件中的表單欄位。非常適合開發人員和 PDF 愛好者。 | | [確定 PDF 表單中的必填字段](./determine-required-field/) |了解如何使用 Aspose.PDF for .NET 來確定 PDF 表單中的必填欄位。我們的逐步指南簡化了表單管理並增強了您的 PDF 自動化工作流程。 | | [動態 XFA 到 Acro 表單](./dynamic-xfa-to-acro-form/) |在本逐步教學中了解如何使用 Aspose.PDF for .NET 將動態 XFA 表單轉換為標準 AcroForms。 | diff --git a/pdf/hongkong/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/hongkong/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..f7306c9067 --- /dev/null +++ b/pdf/hongkong/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: 使用 C# 快速建立 PDF 表單欄位。了解如何在 PDF 中加入文字方塊,並使用 Aspose.PDF 修改 PDF 以包含文字方塊。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: zh-hant +lastmod: 2026-08-14 +og_description: 使用 C# 建立 PDF 表單欄位。本教學示範如何在 PDF 中加入文字方塊,並使用 Aspose.PDF 修改 PDF 以包含文字方塊。 +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: 在 C# 中建立 PDF 表單欄位 – 完整程式設計指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: 在 C# 中建立 PDF 表單欄位 – 逐步指南 +url: /zh-hant/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中建立 PDF 表單欄位 – 步驟指南 + +如果您需要在文件中 **create pdf form field**,本指南將一步步帶您完成整個流程。您將會看到如何 **add text box to pdf** 頁面,以及如何使用 Aspose.PDF for .NET **modify pdf to include text box**。 + +在發票系統、問卷調查或任何需要收集使用者輸入的工作流程中,處理 PDF 表單都是常見需求。完成本教學後,您將擁有一段可重複使用的程式碼片段,能建立功能完整的文字方塊欄位、將其放置於指定位置,並儲存更新後的 PDF,全部在您的 C# 專案中完成。 + +## 前置條件 + +開始之前,請確保您已具備: + +* .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.7+) +* Visual Studio 2022 或任何支援 C# 的 IDE +* 有效的 Aspose.PDF for .NET 授權(開發階段可使用免費試用版) +* 一個名為 `input.pdf` 的 PDF 檔案,放置於已知目錄(教學中以 `YOUR_DIRECTORY` 作為佔位符) + +> **Pro tip:** 若尚未取得授權,您可於 Aspose 官方網站申請臨時金鑰;在評估模式下使用函式庫不需要修改程式碼。 + +## 如何在 C# 中建立 PDF 表單欄位(概觀) + +1. 載入既有的 PDF 文件。 +2. 建立 `TextBoxField` 並設定名稱與外觀。 +3. 新增 widget 註解,以定義目標頁面的可視矩形區域。 +4. 將欄位插入文件的表單集合中。 +5. 儲存已修改的 PDF。 + +以下將逐步說明每個步驟,並提供完整程式碼範例與 API 呼叫背後的原理說明。 + +## 步驟 1:載入 PDF 文件 + +第一步是讀取來源 PDF。Aspose.PDF 以 `Document` 類別代表 PDF 檔案。載入文件後,您即可存取其頁面、表單集合以及其他結構。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**為什麼重要:** +載入檔案會在記憶體中建立 PDF 的模型,讓您可以在不損壞原始檔案的前提下,新增、移除或編輯物件。`Document` 物件同時提供 `Form` 屬性,稍後您將在此處 **add text box to pdf**。 + +## 步驟 2:建立文字方塊欄位 + +文字方塊欄位是一種讓使用者輸入自由文字的表單欄位。在 Aspose.PDF 中,您只需實例化 `TextBoxField`,並傳入目標頁面與定義 widget 初始大小的矩形。 + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**為什麼重要:** +* `PartialName` 是表單處理工具(例如 Adobe Acrobat、伺服器端解析器)用來取得輸入值的鍵。 +* 此處傳入的矩形僅定義 *初始* widget 大小;您可以在後續的 widget 註解中調整其視覺位置。 +* 設定 `DefaultAppearance` 可確保文字在各種檢視器中呈現一致。 + +## 步驟 3:定義視覺 widget 註解 + +表單欄位可以擁有一個或多個 **widget annotations**,用來控制欄位在每一頁的顯示位置。透過新增 widget,您可以將同一邏輯欄位放置於不同位置,甚至跨多頁。 + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**為什麼重要:** +widget 矩形決定使用者在螢幕上看到的座標。如果省略此步驟,欄位仍會存在於 PDF 的資料結構中,但使用者將看不到。加入 widget 才是真正 **add text box to pdf** 的關鍵步驟。 + +## 步驟 4:將已設定的欄位加入文件的表單 + +現在 `TextBoxField` 已完成全部設定,接著需要將它註冊到 PDF 的表單集合中。這樣欄位才會成為互動式表單的一部份,並確保在儲存時被寫入。 + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**為什麼重要:** +若未將欄位加入 `pdfDocument.Form`,PDF 檢視器會忽略 widget 註解,欄位資料也不會被提交。此行程式碼完成 **modify pdf to include text box** 的最後一步。 + +## 步驟 5:儲存更新後的 PDF + +最後,將變更寫回磁碟。您可以覆寫原始檔案,或另存新檔;範例中將結果儲存為 `output.pdf`。 + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +當您在 Adobe Acrobat Reader 開啟 `output.pdf` 時,會在第 2 頁看到一個標示為「Comments」的矩形文字方塊。使用者可以點擊方塊、輸入文字,且輸入的內容會成為 PDF 表單資料的一部份。 + +## 完整可執行範例 + +將所有片段組合起來,即成為一個完整、可直接執行的程式。將它複製到新的 Console 專案中,將 `YOUR_DIRECTORY` 替換為實際的資料夾路徑,然後執行。 + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**預期輸出:** +程式執行時會在主控台印出兩行確認訊息。開啟 `output.pdf` 後,您會在第 2 頁看到可供使用者輸入評論的文字方塊。當表單透過 Adobe Acrobat 的「Submit」按鈕提交時,欄位名稱 `Comments` 會出現在匯出的 FDF 或 XFDF 資料中。 + +## 常見變化與邊緣情況 + +| 情境 | 調整程式碼的方法 | +|-----------|-----------------------| +| **將欄位加入不同頁面** | 將 `pdfDocument.Pages[1]` 改為目標頁面的索引(0 為起始)。 | +| **建立多行文字方塊** | 在加入 widget 前設定 `textBox.Multiline = true;`。 | +| **設定預設值** | 指定 `textBox.Value = "Enter your comments here";`。 | +| **將欄位設為必填** | 設定 `textBox.Required = true;`。 | +| **在多頁放置相同欄位** | 對每個目標頁面的額外矩形呼叫 `textBox.AddWidgetAnnotation`。 | +| **使用自訂字型** | 以 `FontRepository.AddFont("path/to/font.ttf")` 載入字型,並在 `DefaultAppearance` 中引用。 | + +**Pro tip:** 請務必以 `pdfDocument.Pages[1].Rect` 為基準,驗證矩形座標是否落在頁面範圍內。若 widget 超出頁面邊界,檢視器可能會裁切或隱藏該欄位。 + +## 測試表單欄位 + +1. 在 Adobe Acrobat Reader 開啟 `output.pdf`。 +2. 點擊「Comments」方塊,游標應會出現。 +3. 輸入任意文字,然後按 **Tab** 或點擊其他位置。 +4. 透過 **檔案 → 另存新檔** 保存已輸入的值。 +5. (可選)使用 Aspose.PDF 的 `Form` API 以程式方式擷取欄位值: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +此程式碼片段示範了欄位不僅可見,亦可透過程式碼取得——對於伺服器端處理相當重要。 + +## 結論 + +現在您已掌握如何在 C# 中 **create pdf form field**,從載入 PDF、設定 `TextBoxField`、加入 widget 註解、註冊欄位,到最後儲存結果的完整流程。透過這些基礎組件,您可以 **add text box to pdf** 文件、**modify pdf to include text box**,並將相同概念延伸至核取方塊、單選鈕或下拉選單等其他欄位類型。 + +接下來,您可以探索以下相關主題,如 **擷取表單資料**、**將 PDF 表單扁平化**,或 **使用邊框與顏色樣式化欄位**。這些概念皆建立在您剛剛熟悉的核心 API 上,讓您能以純 C# 完全掌控互動式 PDF 的製作。 + +祝開發順利,歡迎隨意嘗試不同的矩形、字型與驗證規則,以符合您應用程式的需求! + +## 接下來該學什麼? + +以下教學與本篇內容緊密相關,能進一步深化您對 API 的運用,並提供其他實作方式的範例說明。 + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/programming-with-operators/_index.md b/pdf/hongkong/net/programming-with-operators/_index.md index 855a4ca86a..dc057f898c 100644 --- a/pdf/hongkong/net/programming-with-operators/_index.md +++ b/pdf/hongkong/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET 的「使用運算子進行程式設計」教學課程將引 | [在頁面上繪製 XForm](./draw-xform-on-page/) |透過本全面的逐步指南了解如何使用 Aspose.PDF for .NET 在 PDF 中繪製 XForms。 | | [PDF 運算符](./pdf-operators/) |使用 Aspose.PDF for .NET 的 PDF 運算子的逐步指南。將圖像新增至 PDF 頁面並指定其位置。 | | [刪除 PDF 檔案中的圖形對象](./remove-graphics-objects/) |在本逐步指南中了解如何使用 Aspose.PDF for .NET 從 PDF 檔案中刪除圖形物件。簡化您的 PDF 操作任務。 | +| [使用 Aspose.Pdf 在 C# 中建立空的 PDF 字典](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) |使用 Aspose.PDF 在 C# 中建立空的 PDF 字典。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/hongkong/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..5fbf0e5bed --- /dev/null +++ b/pdf/hongkong/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-14 +description: 使用 Aspose.Pdf 在 C# 中建立空的 PDF 字典 – 了解如何將圖形狀態加入 ExtGState 集合,並以程式方式修改 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: zh-hant +lastmod: 2026-08-14 +og_description: 在 C# 中使用 Aspose.Pdf 建立空的 PDF 字典。請參考本完整指南,將自訂圖形狀態加入 PDF 的 ExtGState + 集合。 +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: 在 C# 中建立空的 PDF 字典 – Aspose.Pdf 步驟指南 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: 在 C# 中使用 Aspose.Pdf 建立空的 PDF 字典 +url: /zh-hant/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 使用 Aspose.Pdf 建立空的 PDF 字典 + +如果您需要 **建立空的 PDF 字典** 物件來處理 PDF 檔案,本指南將示範如何在 C# 中使用 Aspose.Pdf 套件完成。無論是建立自訂圖形狀態、加入新資源,或是為日後使用準備範本,以下步驟提供完整、可執行的解決方案。 + +您將學會如何載入 PDF、存取第一頁的資源字典、建立全新的 `CosPdfDictionary`,並將其插入 `ExtGState` 集合。完成教學後,您將得到一個包含新建立字典的 `output.pdf`。 + +## 前置條件 + +在開始之前,請確保您已具備: + +- .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.6+) +- Visual Studio 2022 或您慣用的 C# IDE +- Aspose.Pdf for .NET 授權(或暫時的評估金鑰) +- 一個名為 **input.pdf** 的範例 PDF,放置於您可控制的資料夾中(資料夾路徑將作為 `dataDir` 使用) + +除 `Aspose.Pdf` 之外,無需其他 NuGet 套件。 + +## 步驟 1:建立專案並參考 Aspose.Pdf + +1. 在 Visual Studio 中建立一個 **Console App** 專案。 +2. 開啟 **NuGet Package Manager**,安裝 `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. 在 `Program.cs` 檔案頂部加入以下 `using` 指令: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *為什麼需要這些命名空間?* `Aspose.Pdf` 包含核心的 `Document` 類別,而 `Aspose.Pdf.Operators.Gfx` 提供 `CosPdfDictionary`、`CosPdfNumber` 以及其他建立 **空的 PDF 字典** 結構所需的低階 PDF 物件。 + +## 步驟 2:載入來源 PDF + +第一步是將現有的 PDF 檔案載入至 `Document` 實例,這樣您就能存取所有頁面、資源與低階字典。 + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*說明*:`Document` 會將檔案讀入記憶體並建立內部結構。`using` 陳述式確保在處理完畢後釋放檔案句柄。 + +## 步驟 3:存取第一頁的資源字典 + +每個 PDF 頁面都有一個 **Resources** 字典,用來彙總字型、影像、ExtGState 物件以及其他共享資源。要插入新的圖形狀態,我們需要編輯此字典。 + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` 是一個輔助類別,讓您可以將 PDF 字典當作 C# 的 `Dictionary` 來操作。 + +## 步驟 4:取得(或建立)ExtGState 集合 + +`ExtGState` 保存圖形狀態物件,例如不透明度、混合模式與線寬。如果來源 PDF 已經包含 `ExtGState` 條目,我們會直接使用;否則就建立一個全新的空字典。 + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*為什麼要這樣檢查?* 有些 PDF 完全沒有 `ExtGState` 條目。處理兩種情況可讓本教學對任何輸入檔案都具備韌性。 + +## 步驟 5:為新圖形狀態 **建立空的 PDF 字典** + +現在我們真的要 **建立空的 PDF 字典** 物件,定義圖形狀態參數。字典起始為空,我們再加入必要的鍵值: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### 各條目說明 + +| 鍵 | 類型 | 說明 | +|-----|------|---------| +| **CA** | `CosPdfNumber` | 描邊不透明度(範圍 0‑1)。 | +| **ca** | `CosPdfNumber` | 填充不透明度(範圍 0‑1)。 | +| **BM** | `CosPdfName` | 混合模式;最常用的是 `"Normal"`。 | + +因為我們是從 **空的 PDF 字典** 開始,所以可以完全掌控加入哪些條目。日後若需要,可再加入其他圖形狀態參數,例如 `LW`(線寬)或 `LC`(線端點)等。 + +## 步驟 6:將新圖形狀態插入 ExtGState + +`ExtGState` 字典的運作方式類似映射,每個條目以名稱(例如 `GS0`、`GS1`)作為鍵。我們將剛建立的字典放在一個唯一的鍵下。 + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +如果要加入多個狀態,請遞增後綴(`GS1`、`GS2`…)以避免名稱衝突。 + +## 步驟 7:儲存修改後的 PDF + +最後,將變更寫回磁碟。`Save` 方法會自動序列化更新過的字典。 + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +在任意 PDF 檢視器中開啟 `output.pdf`,檢查 **Resources → ExtGState** 條目(大多檢視器會隱藏此資訊,但 Adobe Acrobat Preflight 或 PDF‑Tron 等工具可以顯示)。您應該會看到一個 `GS0` 條目,內含先前定義的不透明度與混合模式值。 + +## 完整可執行範例 + +將所有片段組合起來,以下程式碼可直接貼到 `Program.cs` 並執行: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**預期輸出** – 主控台會印出確認訊息,`output.pdf` 內會在 `ExtGState` 下出現新的 `GS0` 條目。當您在內容串流中使用 `gs` 操作符引用 `GS0` 時,描邊將完全不透明,而填充則為 50 % 透明。 + +## 常見問題與邊緣情況處理 + +| 問題 | 解答 | +|----------|--------| +| *如果 PDF 有多頁怎麼辦?* | 範例針對第一頁(`Pages[1]`)操作。若要影響所有頁面,可遍歷 `pdfDocument.Pages`,對每頁的資源重複步驟 3‑5。 | +| *我可以把字典加入已存在名稱為 “GS0” 的 ExtGState 條目嗎?* | 可以,但必須使用不同的鍵(`GS1`、`GS2`…)以免覆寫既有條目。 | +| *儲存後再修改字典安全嗎?* | 呼叫 `Save` 後,記憶體中的表示已與檔案分離。您仍可繼續編輯 `Document` 物件,必要時再次呼叫 `Save`。 | +| *使用 `Aspose.Pdf` 是否需要授權?* | | + +## 接下來您可以學習什麼? + +以下教學與本指南緊密相關,能進一步深化您對 API 的運用,並提供其他實作方式的完整範例與步驟說明。 + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/programming-with-security-and-signatures/_index.md b/pdf/hongkong/net/programming-with-security-and-signatures/_index.md index 0c5821b002..7a5c1a8110 100644 --- a/pdf/hongkong/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hongkong/net/programming-with-security-and-signatures/_index.md @@ -36,7 +36,8 @@ | [在 C# 中檢查 PDF 簽章 – 如何讀取已簽署的 PDF 檔案](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) |了解如何使用 Aspose.PDF for .NET 在 C# 中讀取並驗證 PDF 簽章的步驟與技巧。 | | [在 C# 中驗證 PDF 簽章 – 完整程式設計指南](./verify-pdf-signature-in-c-complete-programming-guide/) |了解如何使用 Aspose.PDF for .NET 在 C# 中完整驗證 PDF 簽章的步驟與技巧。 | | [使用簽名字段透過智慧卡簽名](./sign-with-smart-card-using-signature-field/) |了解如何使用 Aspose.PDF for .NET 的智慧卡安全地簽署 PDF。按照我們的逐步指南即可輕鬆實施。 | -| [如何修復 PDF 檔案 – 完整的 C# 指南(使用 Aspose.Pdf)](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) |了解如何使用 Aspose.PDF for .NET 修復受損的 PDF 檔案。逐步指南協助您恢復文件完整性。 | +| [如何修復 PDF 檔案 – 完整的 C# 指南(使用 Aspose.Pdf)](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) |了解如何使用 Aspose.PDF for .NET 修復受損的 PDF 檔案。逐步指南協助您恢復文件完整性。 | +| [在 C# 中建立簽章選項 – 數位簽署完整指南](./create-signature-options-in-c-full-guide-to-digital-signing/) |了解如何在 C# 中建立多種簽章選項的完整指南。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/hongkong/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..ef79502878 --- /dev/null +++ b/pdf/hongkong/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,306 @@ +--- +category: general +date: 2026-08-14 +description: 在 C# 中建立簽署選項以套用數位簽章。了解如何設定簽章、實作自訂雜湊函式,並以程式方式簽署文件。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: zh-hant +lastmod: 2026-08-14 +og_description: 在 C# 中建立簽章選項並套用數位簽章。本教學將逐步說明如何設定簽章、加入自訂雜湊函式,以及對文件簽名。 +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: 在 C# 中建立簽名選項 – 一步一步的數位簽署指南 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: 在 C# 中建立簽名選項 – 完整的數位簽署指南 +url: /zh-hant/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中建立簽章選項 – 數位簽署完整指南 + +在 C# 中建立簽章選項以配置數位簽章工作流程。本教學說明如何套用數位簽章、實作自訂雜湊函式,並使用 `SignatureOptions` 類別簽署文件。若您曾需要從 .NET 應用程式簽署 PDF、XML 或任何二進位資料,以下步驟提供即用的解決方案。 + +您將學會: + +* 使用自訂雜湊演算法設定 `SignatureOptions` +* 正確呼叫簽署方法 +* 驗證簽章已正確套用 +* 避免在設定簽章時的常見陷阱 + +唯一的先決條件是近期的 .NET SDK(≥ .NET 6)以及提供 `SignatureOptions` 的簽章函式庫(例如 **GroupDocs.Signature**、**Aspose.Signature** 或其他類似 API)。不需要任何外部工具。 + +--- + +## 前置條件 + +| 需求 | 為何重要 | +|------|----------| +| .NET 6 SDK or later | 提供範例中使用的現代語言功能。 | +| A signing‑library NuGet package (e.g., `GroupDocs.Signature`) | 提供 `SignatureOptions` 類型與 `Sign` 擴充方法。 | +| Access to a private key or certificate | 需要用於產生可驗證的數位簽章。 | + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## 步驟 1:建立簽章選項 + +第一步是實例化 `SignatureOptions` 並設定控制簽署流程的屬性。此物件告訴函式庫 *簽什麼* 以及 *如何* 簽署。 + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**為何重要**:`SignatureOptions` 作為您的程式碼與簽署引擎之間的合約。提前配置可避免在簽署多個文件時重複樣板程式碼。 + +--- + +## 步驟 2:實作自訂雜湊函式 + +*自訂雜湊函式* 讓您完整掌控簽章演算法所簽署的摘要。當預設雜湊(SHA‑256)不符合合規需求,或需要對文件的部分內容進行雜湊時,此方式非常有用。 + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**為何重要**:透過指派 `CustomSignHash`,您將函式庫內部的雜湊步驟替換為 `MyHash`。簽署引擎現在會簽署您函式回傳的位元組,確保符合任何自訂政策。 + +--- + +## 步驟 3:載入文件並套用數位簽章 + +準備好選項後,您即可開啟目標檔案並呼叫簽署方法。`Sign` 方法由函式庫提供,並使用已配置的 `SignatureOptions`。 + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**為何重要**:呼叫 `Sign` 會在內部執行三項動作: + +1. **雜湊計算** – 現在委派給您的自訂雜湊函式。 +2. **簽章產生** – 使用函式庫設定提供的私鑰。 +3. **嵌入** – 產生的簽章會附加到輸出檔案。 + +若任一步驟失敗,該方法會回傳 `false`,讓您能優雅地處理錯誤。 + +--- + +## 步驟 4:驗證文件是否已簽署 + +快速驗證可確認簽章已正確套用。大多數函式庫提供 `Verify` 方法,用以檢查已簽署檔案的完整性。 + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**為何重要**:驗證可確保簽署後文件未被竄改,且自訂雜湊產生了相容的摘要。 + +--- + +## 如何為不同檔案類型設定簽章 + +相同的 `SignatureOptions` 物件可重複用於 PDF、Word 文件、影像或純二進位檔案。唯一需要變更的是特定的選項類別(例如 `PdfSignatureOptions`、`WordSignatureOptions`)。以下是一個 JPEG 影像的快速範例: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**為何重要**:了解如何為每種格式*設定簽章*,即可在多種文件類型間共用相同程式碼基礎,而不必重新編寫雜湊邏輯。 + +--- + +## 常見陷阱與最佳實踐 + +| 陷阱 | 建議解決方案 | +|------|--------------| +| 忘記在建立 `SignatureOptions` 後設定 `CustomSignHash` | 在建構選項物件後立即指派委派。 | +| 使用簽章憑證不支援的雜湊演算法 | 確認憑證的金鑰用途與雜湊長度相符(例如 RSA‑2048 搭配 SHA‑512)。 | +| 忽略釋放 `Signature` 物件的需求 | 將 `Signature` 實例包在 `using` 區塊中,以釋放檔案句柄。 | +| 將已簽署的檔案覆寫原始來源 | 始終寫入新檔案路徑(`outputPath`),以保留原始文件。 | + +--- + +## 完整可執行範例 + +以下是一個獨立的程式,將所有步驟整合在一起。將其複製到新的 Console 專案並執行;主控台會回報成功或失敗。 + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**預期輸出** + +``` +Signature verified successfully. +``` + +如果主控台顯示 “Signing failed.” 或 “Signature verification failed.”,請再次檢查憑證設定,並確保自訂雜湊回傳的位元組陣列大小符合預期。 + +--- + +## 結論 + +您現在已了解如何在 C# 中**建立簽章選項**、附加**自訂雜湊函式**,以及對任何支援的文件**套用數位簽章**。本教學涵蓋完整生命週期:配置選項、簽署檔案、驗證結果。透過重複使用相同的 `SignatureOptions` 實例,您亦可**設定簽章**於影像、Word 檔或原始二進位檔案。 + +--- + +## 接下來可以做什麼? + +* 探索額外的 `SignatureOptions` 屬性,例如視覺印章、時間戳伺服器與憑證鏈——這些與 **apply digital signature** 關鍵字相呼應。 +* 透過在 `MyHash` 內替換實作,試驗其他雜湊演算法(例如 Blake2b)。 +* 將簽署流程整合至 Web API,以實現即時文件簽署——這是 **how to sign document** 在服務導向架構中的自然延伸。 + +歡迎依照您的安全政策調整程式碼,並在留言中分享您的使用經驗。祝簽署順利! + +## 接下來應該學什麼? + +以下教學涵蓋與本指南技術緊密相關的主題。每個資源皆提供完整可執行的程式碼範例與逐步說明,協助您精通更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/programming-with-stamps-and-watermarks/_index.md b/pdf/hongkong/net/programming-with-stamps-and-watermarks/_index.md index ad9661a8d0..835fb76f8b 100644 --- a/pdf/hongkong/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/hongkong/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF 的「使用圖章和浮水印進行程式設計」.NET 教學課程 | [PDF 檔案頁尾中的文字](./text-in-footer/) |了解如何使用 Aspose.PDF for .NET 在 PDF 檔案的頁尾中新增文字。 | | [PDF 檔案標題中的文本](./text-in-header/) |透過本逐步教學學習如何使用 Aspose.PDF for .NET 在 PDF 中新增文字標題。有效率且有效地增強您的文件。 | | [在 C# 中為 PDF 添加 Bates 編號 – 完整指南](./add-bates-numbering-pdf-in-c-complete-guide/) |透過本完整指南了解如何使用 Aspose.PDF for .NET 在 PDF 中添加 Bates 編號,以提升文件的追蹤與管理。 | +| [在 C# 中設定 Bates 編號選項 – 完整指南](./how-to-set-bates-numbering-options-in-c-complete-guide/) |本完整指南說明如何在 C# 中設定 Bates 編號的各項選項,以提升文件追蹤與管理。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/hongkong/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..922a22db11 --- /dev/null +++ b/pdf/hongkong/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-14 +description: 如何在 C# 中使用 GroupDocs 設定 Bates 編號選項。請依照此步驟教學,在將 Word 轉換為 PDF 時加入自訂前綴與起始編號。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: zh-hant +lastmod: 2026-08-14 +og_description: 如何在 C# 中快速設定 Bates 編號選項。本指南示範在將 Word 轉換為 PDF 時,如何加入自訂前綴與起始編號。 +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: 如何在 C# 中設定 Bates 編號選項 – 步驟教學 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: 如何在 C# 中設定 Bates 編號選項 – 完整指南 +url: /zh-hant/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中設定 Bates 編號選項 – 完整指南 + +如果您需要 **設定 Bates 編號選項**,本指南將逐步說明確切步驟。您將學習如何設定起始編號、加入前綴,並在使用 GroupDocs API 將 Word 文件轉換為 PDF 時套用編號。 + +文件處理常常需要在每一頁加上唯一識別碼,以符合法律或歸檔需求。完成本教學後,您將擁有一段可重複使用的程式碼片段,能直接放入任何 .NET 專案,無論是建置訴訟支援工具或自動化報告產生器。無需額外工具——只要使用 GroupDocs.Conversion 套件與少量 C# 程式碼即可。 + +## 您需要的環境 + +* .NET 6.0 SDK 或更新版本已安裝 +* Visual Studio 2022(或任何支援 .NET 的 IDE) +* 有效的 GroupDocs.Conversion 授權(免費試用版可用於測試) +* 一個您想要編號的範例 Word 文件(`input.docx`) + +這些前置條件可確保程式碼在不需額外設定的情況下執行。 + +## 設定 Bates 編號選項概覽 + +**設定 Bates 編號選項** 的核心在於三個物件: + +1. `Document` – 載入來源檔案。 +2. `BatesNumberingOptions` – 保存起始編號、前綴及其他格式設定。 +3. `AddBatesNumbering` – 將編號注入每一頁的方法。 + +了解每個部件的作用,有助於您將解決方案套用到更複雜的情境,例如自訂字型或多語系編號。 + +## 步驟 1:安裝 GroupDocs.Conversion NuGet 套件 + +在解決方案資料夾的終端機中執行: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** 提供了稍後教學中會使用的 `Document` 類別與 `AddBatesNumbering` 擴充方法。 + +## 步驟 2:載入來源文件 + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*為什麼需要這一步?* +載入檔案會在記憶體中建立可供轉換引擎操作的表示。沒有 `Document` 實例,就無法套用 Bates 編號或其他轉換。 + +## 步驟 3:建立 Bates 編號選項 + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*為什麼需要這一步?* +`BatesNumberingOptions` 包含了在 **設定 Bates 編號選項** 時可能需要的所有設定。調整 `StartNumber` 與 `Prefix` 可讓輸出與您的案件管理系統保持一致。`Position` 屬性控制視覺位置,這往往是合規需求。 + +## 步驟 4:將 Bates 編號套用至文件 + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` 方法會遍歷已載入的 `Document` 每一頁,插入先前設定好的字串。因為此方法作用於記憶體表示,您可以在儲存前串接其他處理步驟(例如加入浮水印)。 + +## 步驟 5:將結果轉換並儲存為 PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*為什麼需要這一步?* +PDF 是法律文件常見的最終格式。`PdfConvertOptions` 物件允許您微調輸出,但對於基本編號而言並非必須。`Save` 呼叫會將完整編號的 PDF 寫入磁碟。 + +## 完整、可執行的範例 + +將所有步驟整合起來,以下是一個自包含的主控台應用程式,您可以直接編譯執行: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**預期輸出** + +執行程式後會產生 `output.pdf`,每一頁皆顯示類似 `CASE-1000`、`CASE-1001` 等標籤,位於右側頁腳。使用任何 PDF 閱讀器開啟即可驗證編號是否正確顯示。 + +## 常見問題與最佳實踐 + +| 問題 | 發生原因 | 避免方法 | +|------|----------|----------| +| **相對路徑導致 `FileNotFoundException`** | Console 應用程式的工作目錄可能與 Visual Studio 不同。 | 使用絕對路徑或 `Path.Combine(AppContext.BaseDirectory, "input.docx")`。 | +| **編號與現有頁腳重疊** | 如果來源文件在選定的頁腳區域已有內容,新編號可能會被隱藏。 | 選擇其他 `Position`(例如 `HeaderLeft`)或調整來源範本。 | +| **大型文件處理緩慢** | Bates 編號會遍歷每一頁,隨著檔案大小記憶體使用量會增加。 | 如果超過 500 頁,可使用 `Document.Split` 將文件分塊處理。 | +| **授權過期** | GroupDocs 的免費試用版在 30 天後會過期,導致在呼叫 `AddBatesNumbering` 時拋出例外。 | 在載入文件之前套用有效的授權金鑰:`License license = new License(); license.SetLicense("license.lic");`。 | + +**小技巧:** 如果您需要依案件使用不同的編號格式(例如 `2023-CASE-001`),可在建立 `BatesNumberingOptions` 前動態組合前綴。 + +## 擴充解決方案 + +相同的 **Bates 編號 C#** 方法同樣適用於 `.txt`、`.html` 或甚至影像等其他來源格式。只要在建立 `Document` 物件時更改檔案副檔名,轉換引擎即可自行處理其餘工作。 + +您也可以將 **document conversion C#** 與 OCR 結合,處理掃描版 PDF: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## 結論 + +現在您已掌握 **如何在 C# 中設定 Bates 編號選項** 的完整流程:建立 `BatesNumberingOptions` 物件、使用 `AddBatesNumbering` 套用,最後儲存為 PDF,即可自動產出符合法律規範、具唯一識別碼的文件。 + +接下來,您可以探索 **C# PDF 產生**、**document conversion C#**,或進階的 **GroupDocs API** 功能,如浮水印與數位簽章。試著變換前綴、位置與編號格式,以符合您的工作流程。 + +祝編程愉快! + +## 接下來該學什麼? + +以下教學與本指南緊密相關,能在您已掌握的技巧上再度深化。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您熟悉更多 API 功能,或在專案中嘗試不同的實作方式。 + +- [在 C# 中加入 Bates 編號 PDF – 完整指南](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [如何在 PDF 中使用 Aspose.PDF for .NET 添加與自訂頁碼 | 文件操作指南](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [如何在 PDF 中使用 Aspose.PDF for .NET 添加文字印章頁腳:逐步指南](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/annotations/_index.md b/pdf/hungarian/net/annotations/_index.md index 92fb6828bb..31aeeb6309 100644 --- a/pdf/hungarian/net/annotations/_index.md +++ b/pdf/hungarian/net/annotations/_index.md @@ -35,6 +35,7 @@ | [Szabad szöveges jegyzetformázás beállítása](./setfreetextannotationformatting/) | Tanulja meg, hogyan állíthat be szabad szöveges jegyzetformázást PDF dokumentumokban az Aspose.PDF for .NET használatával ebből a lépésről lépésre szóló útmutatóból. | | [Szavak áthúzása](./strikeoutwords/) | Tanulja meg, hogyan húzhat ki szavakat egy PDF-ben az Aspose.PDF for .NET használatával ezzel az átfogó, lépésről lépésre szóló útmutatóval. Fejlessze dokumentumszerkesztési készségeit. | | [Szabad szövegű PDF jegyzet frissítése](./updatefreetextannotation/) Tanulja meg, hogyan frissítheti a szabad szöveges megjegyzéseket PDF dokumentumokban az Aspose.PDF for .NET használatával ezzel a lépésről lépésre szóló útmutatóval. | +| [Téglalap rajzolása PDF-re – lépésről lépésre C# útmutató](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Ismerje meg, hogyan rajzolhat téglalapot PDF dokumentumba C#-ban az Aspose.PDF for .NET használatával ebben a részletes útmutatóban. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/hungarian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..3e352f2108 --- /dev/null +++ b/pdf/hungarian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-08-14 +description: Rajzolj téglalapot PDF-re gyorsan C#-ban. Tanulja meg, hogyan definiálja + a téglalap méreteit, és hogyan adjon hozzá alakzatokat egy PDF oldalhoz néhány sorban. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: hu +lastmod: 2026-08-14 +og_description: Rajzolj téglalapot PDF-re C#-vel pillanatok alatt. Ez az útmutató + bemutatja, hogyan határozd meg a téglalap méreteit, adj hozzá alakzatot, és ellenőrizd + az oldalhatárokat a megbízható PDF-grafikához. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: téglalap rajzolása PDF-re – teljes C# útmutató +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Téglalap rajzolása PDF-re – lépésről lépésre C# útmutató +url: /hu/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# téglalap rajzolása PDF-re – teljes C# útmutató + +Ha C#-ban **draw rectangle on pdf**-t kell készítened, ez az útmutató egy tömör, termelés‑kész megoldást mutat be. Pontosan láthatod, **how to define rectangle dimensions**, ellenőrizheted, hogy a forma belefér-e, és egyetlen metódushívással hozzáadhatod egy oldalhoz. + +Az útmutató mindent lefed a PDF dokumentum létrehozásától a téglalap megjelenítéséig, így a kódot egyszerűen átmásolhatod a saját projektedbe, és azonnal láthatod az eredményt. Külső dokumentációra nincs szükség – csak a lenti lépésekre. + +## Előfeltételek + +* .NET 6.0 vagy újabb (a kód .NET Framework 4.7+‑vel is működik) +* A **Aspose.PDF for .NET** NuGet csomag (`Install-Package Aspose.PDF`) +* Alapvető C# szintaxis ismerete +* Egy IDE, például Visual Studio vagy VS Code + +> **Pro tip:** Használd az Aspose.PDF ingyenes értékelő licencét gyors kísérletekhez; egy kis vízjelet ad hozzá, de lehetővé teszi az összes funkció tesztelését. + +## Hogyan rajzoljunk téglalapot PDF-re C#-ban + +A feladat lényege egy `RectangleShape` létrehozása, méretének és vonalának beállítása, majd egy `Page`-hez csatolása. Az alábbi H2 fejléc tartalmazza az elsődleges kulcsszót, ezzel megfelelve az SEO követelményeknek. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Az egyes lépések magyarázata + +| Lépés | Miért fontos | +|------|----------------| +| **1️⃣ Create a new PDF document** | Inicializálja a tárolót, amely az oldalakat és a grafikákat tartalmazza. | +| **2️⃣ Add a blank page** | Szükséged van egy `Page` objektumra, mert a formákat egy oldalhoz kell csatolni, nem közvetlenül a dokumentumhoz. | +| **3️⃣ Define the rectangle bounds** | Itt történik a **how to define rectangle dimensions**. A `Rectangle` konstruktor `x`, `y`, `width` és `height` értékeket vár pontban (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | A `RectangleShape` az Aspose osztály, amely egy téglalapot rajzol. A `StrokeColor` beállítása határozza meg a körvonalat; a `FillColor` is beállítható szilárd kitöltéshez. | +| **5️⃣ Verify page boundaries** | A `CheckShapeBoundary` kivételt dob, ha a téglalap meghaladja az oldal méretét, megakadályozva a hibás PDF-eket. | +| **6️⃣ Add the shape to the page** | A forma az oldal tartalomsorozatának részévé válik. | +| **7️⃣ Save the PDF** | Elmenti a dokumentumot egy fájlba, amelyet bármely PDF-olvasóval megnyithatsz. | + +Az eredményül kapott `RectangleDemo.pdf` egy fekete téglalapot tartalmaz, amely az oldal bal‑felső sarkában helyezkedik el, pontosan 500 pt széles és 700 pt magas. + +![draw rectangle on pdf példa](https://example.com/rectangle-demo.png "draw rectangle on pdf példa") + +*Kép alternatív szövege: draw rectangle on pdf példa, amely egy fekete téglalapot mutat a PDF oldal bal‑felső sarkában.* + +## Hogyan definiáljuk a téglalap méreteit különböző oldalméretekhez + +A fenti kódrészlet rögzített értékeket (`500 x 700`) használ. Valós alkalmazásokban gyakran szükség van arra, hogy a téglalap alkalmazkodjon az oldal szélességéhez és magasságához. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Kulcspontok:** + +* Használd a `page.PageInfo.Width` és `Height` értékeket a tényleges oldalméret lekérdezéséhez. +* Egy tényezővel (pl. `0.8f`) való szorzás lehetővé teszi a méretek oldal százalékában való kifejezését. +* A középre helyezés úgy érhető el, hogy a téglalap méretét levonod az oldal méretéből, majd a maradékot felosztod kettővel. + +## Gyakori buktatók és hogyan kerüld el őket + +| Buktató | Miért fordul elő | Megoldás | +|---------|----------------|-----| +| A téglalap túlnyúlik az oldalon | Keménykódolt méretek nagyobbak az oldal méreténél. | Hívd meg a `page.CheckShapeBoundary` **előtt**, mielőtt hozzáadod a formát; ha kivétel keletkezik, módosítsd a méreteket. | +| A körvonal nem látható | `StrokeColor` alapértelmezett (`Color.Empty`) maradt. | Állítsd be kifejezetten a `StrokeColor`-t (pl. `Color.Black`). | +| A téglalap a képernyőn kívül jelenik meg | A koordináták a PDF térben bal‑alsó sarokból indulnak; képernyő‑stílusú bal‑felső koordináták használata fordítást okoz. | Ne feledd, hogy a `(0,0)` a bal‑alsó sarok. Ennek megfelelően állítsd be a `y` értéket, vagy használd a `pageHeight - desiredY` képletet. | +| Váratlan vonalvastagság | Az alapértelmezett vonalvastagság túl vékony lehet nyomtatáshoz. | Állítsd be a `rectangleShape.LineWidth = 2;` értéket a vastagság növeléséhez. | + +## A példa kibővítése + +Miután képes vagy **draw rectangle on pdf**-re, könnyen hozzáadhatsz más alakzatokat: + +* **EllipseShape** – körök vagy oválisok számára. +* **PolygonShape** – egyedi sokszögekhez. +* **TextFragment** – a téglalapok feliratozásához. + +Minden alakzat ugyanazt a munkafolyamatot követi: meghatározod a határokat, beállítod a megjelenést, ellenőrzöd a határokat, majd hozzáadod az oldalhoz. + +## Teljes, futtatható program + +Az alábbiakban a teljes program látható, amely egyesíti az alap téglalapot és a dinamikus méretezés példáját. Másold be egy új konzolprojektbe, állítsd vissza a `Aspose.PDF` NuGet csomagot, és futtasd. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Várható kimenet:** +Nyisd meg a `CombinedRectangles.pdf`-et. Egy fekete téglalapot látsz, amely a bal‑alsó sarokban van rögzítve, valamint egy középre helyezett sötétkék téglalapot világossárga kitöltéssel. Mindkét téglalap tiszteletben tartja az oldal margóit. + +## Következtetés + +Most már tudod, hogyan **draw rectangle on pdf** C#-ban, és pontosan **how to define rectangle dimensions** rögzített és reszponzív elrendezésekhez egyaránt. A megközelítés az Aspose.PDF `RectangleShape`-ját, a határok ellenőrzését és egyszerű aritmetikát használ a bármely oldalmérethez való alkalmazkodáshoz. + +Ezután érdemes felfedezni: + +* **Kitöltőszínek** és **vonalstílusok** (szaggatott, pontozott) hozzáadása – másodlagos kulcsszó: how to define rectangle dimensions with style. +* Több alakzat egyesítése egyetlen `Page`‑be diagramok vagy űrlapok létrehozásához. +* A PDF exportálása stream-be web API-khoz a lemezre mentés helyett. + +## Mit érdemes még megtanulni? + +A következő útmutatók szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás teljes, működő kódrészleteket tartalmaz 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 testre szabjuk a PDF-eket az Aspose.PDF for .NET: oldal margók beállítása és vonalak rajzolása](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Hogyan adjunk hozzá oldalbélyegeket PDF-ekhez az Aspose.PDF for .NET: teljes útmutató](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Hogyan adjunk hozzá oldalszám bélyegeket PDF-ekhez az Aspose.PDF for .NET | Vízjelek és háttér](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/conversion-export/_index.md b/pdf/hungarian/net/conversion-export/_index.md index 662f5095ad..be3653b032 100644 --- a/pdf/hungarian/net/conversion-export/_index.md +++ b/pdf/hungarian/net/conversion-export/_index.md @@ -80,6 +80,9 @@ Kód oktatóanyag az Aspose.PDF Nethez ### [PDF konvertálása HTML-be egyéni kép URL-ekkel az Aspose.PDF .NET használatával: Átfogó útmutató](./convert-pdf-html-custom-image-urls-aspose-pdf-net/) Ismerje meg, hogyan konvertálhat PDF dokumentumokat HTML formátumba az Aspose.PDF for .NET segítségével, beleértve a képek URL-címeinek testreszabását és egy személyre szabott erőforrás-takarékossági stratégia megvalósítását. +### [PDF mentése HTML-ként és konvertálása PDF/X‑4 formátumba az Aspose.PDF használatával C#-ban](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Ismerje meg, hogyan menthet PDF-et HTML-ként, majd konvertálhatja PDF/X‑4 formátumba az Aspose.PDF for .NET segítségével C#-ban. + ### [PDF konvertálása PNG-vé az Aspose.PDF .NET segítségével: Betűtípus-utalás javítása az éles szövegmegjelenítés érdekében](./convert-pdf-png-aspose-net-font-hinting/) Tanulja meg, hogyan konvertálhat PDF dokumentumokat kiváló minőségű PNG képekké az Aspose.PDF .NET segítségével, biztosítva az éles szövegmegjelenítést a betűtípus-hivatkozások segítségével. diff --git a/pdf/hungarian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/hungarian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..44220f2491 --- /dev/null +++ b/pdf/hungarian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-08-14 +description: PDF mentése HTML-ként és PDF konvertálása PDF/X‑4-re az Aspose.PDF for + C# használatával. A lépésről‑lépésre kód bemutatja a HTML exportálást, az aláírások + listázását és a grafikai állapot szerkesztését. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: hu +lastmod: 2026-08-14 +og_description: Mentse a PDF-et HTML-ként, és konvertálja a PDF-et PDF/X‑4 formátumba + az Aspose.PDF for C# segítségével. Kövesse ezt a teljes útmutatót a HTML exportálásához, + az aláírások listázásához és a grafikai állapotok szerkesztéséhez. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: PDF mentése HTML-ként és konvertálása PDF/X‑4-re az Aspose.PDF segítségével + – C# útmutató +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: PDF mentése HTML-ként és konvertálása PDF/X‑4-re az Aspose.PDF segítségével + C#-ban +url: /hu/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF mentése HTML‑ként és konvertálása PDF/X‑4‑re Aspose.PDF‑el C#‑ban + +Ha **PDF‑t szeretne HTML‑ként menteni**, az Aspose.Pdf egyszerűvé teszi a folyamatot. Ez a bemutató azt is megmutatja, hogyan **konvertálhatja a PDF‑et PDF/X‑4‑re**, listázhatja az aláírásmezőket, és hozzáadhat egy egyedi ExtGState‑t, így egy teljes, vég‑végi munkafolyamatot kap. + +Megtanulja, hogyan: + +* Exportáljon egy PDF‑et tiszta HTML‑be, miközben kihagyja a raszteres képeket. +* Konvertáljon egy PDF dokumentumot a PDF/X‑4 szabványra nyomtatásra kész kimenethez. +* Sorolja fel az összes aláírásmező nevét egy PDF‑ben. +* Helyezzen el egy egyedi grafikai állapotot (ExtGState) az első oldalon. + +Az összes kód .NET 6 vagy újabb környezetben fut, és az Aspose.Pdf for .NET NuGet csomagra van szükség. + +## Előfeltételek + +| Követelmény | Indoklás | +|-------------|----------| +| .NET 6 SDK vagy újabb | Biztosítja a futtatókörnyezetet a C# példához. | +| Visual Studio 2022 (vagy bármely C# IDE) | Lehetővé teszi a könnyű szerkesztést és hibakeresést. | +| Aspose.Pdf for .NET (v23.12 vagy újabb) | Tartalmazza a tutorialban használt `Document`, `PdfFormatConversionOptions` és `HtmlSaveOptions` osztályokat. | +| Minta PDF fájl (`sample.pdf`) | A forrásdokumentum, amelyet feldolgozunk. | + +A könyvtár telepítése: + +```bash +dotnet add package Aspose.Pdf +``` + +## A megoldás áttekintése + +A program hat logikai lépést hajt végre: + +1. Betölti a forrás‑PDF‑et. +2. Listázza az összes aláírásmező nevét. +3. **PDF‑t konvertál PDF/X‑4‑re** és elmenti az eredményt. +4. **PDF‑t ment HTML‑ként**, miközben kihagyja a raszteres képeket. +5. Egyedi ExtGState‑t (grafikai állapotot) ad az első oldalhoz. +6. Elmenti a módosított PDF‑et az új grafikai állapottal. + +Minden lépést alább részletezünk, a teljes kóddal és a választás mögötti indoklással. + +## 1. lépés: PDF dokumentum betöltése + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Miért fontos*: A `Document` az egész PDF fájlt képviseli. Egyszeri betöltése lehetővé teszi, hogy ugyanazt az objektumot használjuk a további műveletekhez, ezáltal csökkentve az I/O terhelést. + +## 2. lépés: Az összes aláírásmező nevének listázása + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Miért fontos*: Az aláírásmező nevek ismerete elengedhetetlen, ha később ellenőrizni, eltávolítani vagy cserélni szeretnénk a digitális aláírásokat. A `Signatures` gyűjtemény gyors, csak‑olvasásos nézetet biztosít a mezőkről. + +## 3. lépés: PDF konvertálása PDF/X‑4‑re + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Fontos pontok** + +* A `PdfStandard.PdfX4` azt mondja az Aspose.Pdf‑nek, hogy ágyazza be az összes szükséges erőforrást (betűkészletek, színprofilok), és érvényesítse a PDF/X‑4 korlátozásait. +* A konvertálás memóriában történik; csak a végleges fájl kerül lemezre, így a művelet gyors marad. + +> **Pro tipp:** Ellenőrizze a kimenetet egy PDF/X‑4 validátorral (pl. Adobe Preflight), ha a downstream folyamat szigorúan betartja a szabványt. + +## 4. lépés: PDF mentése HTML‑ként raszteres képek kihagyásával + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Miért lehet erre szükség**: A HTML kimenet hasznos webes előnézethez vagy tartalomindexeléshez. A raszteres képek (`SkipRasterImages = true`) kihagyása könnyű HTML‑t eredményez, és javítja a betöltési időt, különösen ha az eredeti PDF nagy felbontású beolvasásokat tartalmaz. + +## 5. lépés: Egyedi ExtGState hozzáadása az első oldalhoz + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Magyarázat*: Egy **ExtGState** objektum a transzparenciát, keverési módot és egyéb grafikai paramétereket szabályozza. A `GS0` hozzáadásával később hivatkozhat erre az állapotra a tartalmi áramlatokban (pl. félig átlátszó átfedésekhez). A kód az alacsony szintű COS API‑t használja, mivel az Aspose.Pdf nem biztosít magas szintű wrapper‑t az ExtGState létrehozásához. + +## 6. lépés: A módosított PDF mentése az új ExtGState‑tel + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +A végleges fájl (`sample_with_extgstate.pdf`) tartalmazza: + +* Az összes eredeti oldalt és tartalmat. +* Egy PDF/X‑4 kompatibilis verziót (`sample_pdfx4.pdf`). +* Egy raszteres képek nélküli HTML ábrázolást (`sample.html`). +* Egy egyedi ExtGState‑t (`GS0`) az első oldal erőforrásaihoz csatolva. + +### Várt konzolkimenet + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Ha a forrás‑PDF‑nek nincs aláírása, a ciklus semmit sem ír ki, de hiba nélkül folytatódik. + +## Gyakori variációk és szélhelyzetek + +| Helyzet | Módosítás | +|---------|-----------| +| **A PDF‑nek nincs oldala** | Ellenőrizze a `doc.Pages.Count` értékét, mielőtt a `doc.Pages[1]`‑hez férne hozzá, hogy elkerülje az `IndexOutOfRangeException`‑t. | +| **PDF/A‑2b‑t szeretne PDF/X‑4 helyett** | Cserélje a `PdfStandard.PdfX4`‑et `PdfStandard.PdfA2b`‑re a `PdfFormatConversionOptions`‑ban. | +| **Raszteres képeket meg akar tartani** | Állítsa `SkipRasterImages = false`‑ra (vagy hagyja el a tulajdonságot) a `HtmlSaveOptions`‑ban. | +| **Több ExtGState objektum** | Használjon egyedi kulcsokat (`GS1`, `GS2`, …) az `extGStateDict`‑hez való hozzáadáskor. | +| **Nagy PDF‑ek (százak MB)** | Kapcsolja be a `doc.OptimizeResources = true`‑t mentés előtt a memóriahasználat csökkentése érdekében. | + +## Teljes forráskód (futtatható) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // 1. lépés: PDF dokumentum betöltése + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // 2. lépés: Az összes aláírásmező nevének listázása + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // 3. lépés: PDF konvertálása PDF/X‑4 szabványra + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // 4. lépés: PDF mentése HTML‑ként raszteres képek kihagyásával + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // 5. lépés: Egyedi ExtGState (grafikai állapot) hozzáadása az első oldalhoz + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## Mit érdemes még megtanulni? + +A következő oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás teljes, működő kódrészleteket és lépésről‑lépésre magyarázatot tartalmaz, 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. + +- [Átfogó útmutató: PDF konvertálása HTML‑re Aspose.PDF .NET‑el egyedi stratégiákkal](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [PDF konvertálása HTML‑re egyedi képelérési URL‑ekkel Aspose.PDF .NET‑el: Átfogó útmutató](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF‑t HTML‑re konvertálás Aspose.PDF .NET‑el: képek mentése külső PNG‑ként](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/programming-with-forms/_index.md b/pdf/hungarian/net/programming-with-forms/_index.md index dd21f2ab98..9de9236e6f 100644 --- a/pdf/hungarian/net/programming-with-forms/_index.md +++ b/pdf/hungarian/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Ezek az oktatóanyagok részletes kódpéldákat, világos magyarázatokat és i | [Rádiógomb feliratának beállítása](./set-radio-button-caption/) Ismerje meg, hogyan állíthat be választógomb-feliratokat PDF-fájlokban az Aspose.PDF for .NET használatával. Ez a lépésről lépésre szóló útmutató végigvezeti Önt a PDF-űrlapok betöltésén, módosításán és mentésén. | | [Szövegdoboz](./text-box/) | Fedezze fel, hogyan adhat könnyedén szövegdobozokat PDF-fájlokhoz az Aspose.PDF for .NET használatával ezzel a lépésről lépésre szóló útmutatóval. Fokozza a felhasználói interakciót. | | [PDF létrehozása Aspose-szal – Űrlapmező és oldalak hozzáadása](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Ismerje meg, hogyan hozhat létre PDF-et Aspose használatával, és adhat hozzá űrlapmezőket és oldalakat lépésről lépésre. | +| [PDF űrlapmező létrehozása C#‑ban – lépésről lépésre útmutató](./create-pdf-form-field-in-c-step-by-step-guide/) | Tanulja meg, hogyan hozhat létre PDF űrlapmezőket C#‑ban az Aspose.PDF for .NET segítségével lépésről lépésre. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/hungarian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..06bbd0bdea --- /dev/null +++ b/pdf/hungarian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Hozzon létre PDF űrlapmezőt gyorsan C#-val. Tanulja meg, hogyan adjon + szövegmezőt a PDF-hez, és módosítsa a PDF-et, hogy szövegmezőt tartalmazzon az Aspose.PDF + használatával. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: hu +lastmod: 2026-08-14 +og_description: PDF űrlapmező létrehozása C#-val. Ez az útmutató bemutatja, hogyan + lehet szövegdobozt hozzáadni egy PDF-hez, és módosítani egy PDF-et úgy, hogy szövegdobozt + tartalmazzon az Aspose.PDF használatával. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: PDF űrlapmező létrehozása C#‑ban – teljes programozási útmutató +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: PDF űrlapmező létrehozása C#‑ban – lépésről‑lépésre útmutató +url: /hu/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF űrlapmező létrehozása C#‑ban – lépésről‑lépésre útmutató + +Ha **create pdf form field** egy dokumentumban, ez az útmutató végigvezet a teljes folyamaton. Megmutatjuk, hogyan **add text box to pdf** oldalakon, és hogyan **modify pdf to include text box** az Aspose.PDF könyvtár .NET‑hez használatával. + +A PDF űrlapok kezelése gyakori követelmény számlázási rendszerek, felmérések vagy bármely felhasználói adatot gyűjtő munkafolyamat esetén. A tutorial végére egy újrahasználható kódrészletet kap, amely teljesen működőképes szövegdoboz mezőt hoz létre, a kívánt helyre helyezi, és elmenti a módosított PDF‑et – mindezt anélkül, hogy elhagyná a C# projektet. + +## Előfeltételek + +Mielőtt elkezdené, győződjön meg róla, hogy rendelkezik: + +* .NET 6.0 vagy újabb (a kód .NET Framework 4.7+‑vel is működik) +* Visual Studio 2022 vagy bármely C#‑ot támogató IDE +* Aktív Aspose.PDF for .NET licenccel (a ingyenes próbaverzió fejlesztéshez elegendő) +* Egy `input.pdf` nevű PDF fájllal, amely egy ismert könyvtárban van (a tutorial a `YOUR_DIRECTORY`‑t használja helyőrzőként) + +> **Pro tip:** Ha még nincs licence, kérhet ideiglenes kulcsot az Aspose weboldaláról; a könyvtár értékelő módban működik kómmódosítás nélkül. + +## Hogyan hozhatunk létre PDF űrlapmezőt C#‑ban (áttekintés) + +1. Töltse be a meglévő PDF dokumentumot. +2. Hozzon létre egy `TextBoxField`‑et, és állítsa be a nevét és megjelenését. +3. Adj hozzá egy widget annotációt, amely meghatározza a vizuális téglalapot a céloldalon. +4. Illessze be a mezőt a dokumentum űrlapgyűjteményébe. +5. Mentse el a módosított PDF‑et. + +Minden lépést részletesen kifejtünk alább, teljes kódrészletekkel és az API‑hívások mögötti indoklással. + +## Step 1: Load the PDF document + +Az első művelet a forrás PDF beolvasása. Az Aspose.PDF a PDF fájlt a `Document` osztállyal reprezentálja. A dokumentum betöltése hozzáférést biztosít az oldalakhoz, az űrlapgyűjteményhez és egyéb struktúrákhoz. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Miért fontos ez:** +A fájl betöltése egy memóriában lévő modellt hoz létre a PDF‑ről, lehetővé téve objektumok hozzáadását, eltávolítását vagy szerkesztését az eredeti fájl sérülése nélkül. A `Document` objektum emellett elérhetővé teszi a `Form` tulajdonságot, ahol később **add text box to pdf**. + +## Step 2: Create a text box field + +A szövegdoboz mező egy olyan űrlapmező típus, amely lehetővé teszi a felhasználók számára a szabad szöveg beírását. Az Aspose.PDF‑ben a `TextBoxField` példányosításával hozható létre, megadva a céloldalt és egy téglalapot, amely a widget kezdeti méretét definiálja. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Miért fontos ez:** +* `PartialName` az a kulcs, amelyet az űrlapfeldolgozó eszközök (pl. Adobe Acrobat, szerver‑oldali elemzők) használnak a beírt érték lekérdezéséhez. +* A megadott téglalap csak a *kezdeti* widget méretét határozza meg; később a widget annotációval (következő lépés) módosítható a vizuális elhelyezés. +* A `DefaultAppearance` beállítása biztosítja, hogy a szöveg a dobozban konzisztensen jelenjen meg a különböző megjelenítőkben. + +## Step 3: Define the visual widget annotation + +Egy űrlapmezőnek egy vagy több **widget annotation**‑ja lehet, amely meghatározza, hogy a mező hol jelenik meg az egyes oldalakon. Widget hozzáadásával ugyanazt a logikai mezőt elhelyezheti különböző helyeken vagy akár több oldalon is. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Miért fontos ez:** +A widget téglalap határozza meg a képernyőkoordinátákat, amelyeket a felhasználók látnak. Ha kihagyja ezt a lépést, a mező létezhet a PDF adatstruktúrájában, de a végfelhasználó számára nem lesz látható. A widget hozzáadása az a lépés, amely valóban **add text box to pdf**. + +## Step 4: Add the configured field to the document’s form + +Miután a `TextBoxField` teljesen konfigurálva van, regisztrálni kell a PDF űrlapgyűjteményében. Ez a mezőt az interaktív űrlap részévé teszi, és biztosítja, hogy el legyen mentve. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Miért fontos ez:** +A `pdfDocument.Form`‑hoz való hozzáadás nélkül a PDF‑megtekintő figyelmen kívül hagyja a widget annotációt, és a mező adatai soha nem kerülnek beküldésre. Ez a sor véglegesíti a **modify pdf to include text box** műveletet. + +## Step 5: Save the updated PDF + +Végül írja vissza a változásokat a lemezre. Felülírhatja az eredeti fájlt, vagy létrehozhat egy újat; a példában `output.pdf`‑ként mentünk. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Amikor megnyitja az `output.pdf`‑t az Adobe Acrobat Readerben, egy „Comments” felirattal ellátott téglalap alakú szövegdoboz látható a 2. oldalon. A felhasználók rákattintva beírhatnak, és a beírt szöveg a PDF űrlap adatai közé kerül. + +## Full working example + +Az összes elemet egybe rakva itt egy teljes, futtatható program. Másolja be egy új konzolprojektbe, cserélje le a `YOUR_DIRECTORY`‑t egy valós mappára, és futtassa. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Várható kimenet:** +A program futtatása két megerősítő üzenetet ír a konzolra. Az `output.pdf` megnyitásakor egy szövegdoboz jelenik meg a 2. oldalon, ahol a felhasználó megjegyzéseket írhat. Amikor az űrlapot beküldik (pl. az Adobe Acrobat „Submit” gombjával), a `Comments` mezőnév megjelenik az exportált FDF vagy XFDF adatokban. + +## Common variations and edge cases + +| Szituáció | Hogyan kell módosítani a kódot | +|-----------|-------------------------------| +| **A mező hozzáadása egy másik oldalhoz** | Módosítsa a `pdfDocument.Pages[1]` értéket a kívánt oldal indexére (`0`‑alapú). | +| **Többsoros szövegdoboz létrehozása** | Állítsa be a `textBox.Multiline = true;` sort a widget hozzáadása előtt. | +| **Alapértelmezett érték beállítása** | Adja meg a `textBox.Value = "Enter your comments here";` értéket. | +| **A mező kötelezővé tétele** | Állítsa be a `textBox.Required = true;` értéket. | +| **A mező elhelyezése több oldalon** | Hívja meg a `textBox.AddWidgetAnnotation`‑t minden további téglalaphoz a céloldalakon. | +| **Egyedi betűtípus használata** | Töltse be a betűtípust a `FontRepository.AddFont("path/to/font.ttf")`‑vel, és hivatkozzon rá a `DefaultAppearance`‑ben. | + +**Pro tip:** Mindig ellenőrizze a téglalap koordinátáit a oldal méretéhez képest (`pdfDocument.Pages[1].Rect`). Ha a widget az oldal határain kívül helyezkedik el, a megjelenítők levághatják vagy elrejthetik a mezőt. + +## Testing the form field + +1. Nyissa meg az `output.pdf`‑t az Adobe Acrobat Readerben. +2. Kattintson a „Comments” dobozba; a kurzornak meg kell jelennie. +3. Írjon be tetszőleges szöveget, majd nyomja meg a **Tab**‑ot vagy kattintson máshová. +4. Válassza a **File → Save As** lehetőséget a beírt érték mentéséhez. +5. (Opcionális) Használja az Aspose.PDF `Form` API‑ját az érték programozott kinyeréséhez: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Ez a kódrészlet azt mutatja, hogy a mező nem csak látható, hanem kódból is lekérdezhető – ami elengedhetetlen a szerver‑oldali feldolgozáshoz. + +## Conclusion + +Most már tudja, hogyan **create pdf form field** C#‑ban a kezdetektől a befejezésig. A tutorial lefedte a PDF betöltését, egy `TextBoxField` konfigurálását, a widget annotáció hozzáadását, a mező regisztrálását, és az eredmény mentését. Ezekkel az építőelemekkel **add text box to pdf** dokumentumokat hozhat létre, **modify pdf to include text box**, és kiterjesztheti a megközelítést más mezőtípusokra, például jelölőnégyzetekre, rádiógombokra vagy legördülő listákra. + +Ezután fedezze fel a kapcsolódó témákat, mint a **extracting form data**, **flattening PDF forms**, vagy a **styling fields with borders and colors**. Mindegyik koncepció ugyanazon alap API‑n épül, amelyet most már elsajátított, lehetővé téve, hogy teljesen C#‑ban hozzon létre összetett interaktív PDF‑eket. + +Boldog kódolást, és nyugodtan kísérletezzen különböző téglalapokkal, betűtípusokkal és validációs szabályokkal, hogy megfeleljen alkalmazása igényeinek! + +## What Should You Learn Next? + +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 teljes, 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 módok felfedezését saját projektjeiben. + +- [PDF dokumentum létrehozása Aspose‑szal – oldal, szövegdoboz és űrlap hozzáadása](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Hogyan hozzunk létre PDF‑et Aspose‑szal – űrlapmező és oldalak hozzáadása](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Hogyan adjunk szövegbélyegzőt PDF‑hez Aspose.PDF .NET használatával: átfogó útmutató](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/programming-with-operators/_index.md b/pdf/hungarian/net/programming-with-operators/_index.md index 27868b3575..02fa9b6a97 100644 --- a/pdf/hungarian/net/programming-with-operators/_index.md +++ b/pdf/hungarian/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Az Aspose.PDF for .NET „Operátorokkal való programozás” című oktatóany | [XForm rajzolása az oldalon](./draw-xform-on-page/) | Tanuld meg, hogyan rajzolhatsz XForm-okat PDF-ben az Aspose.PDF for .NET segítségével ezzel az átfogó, lépésről lépésre szóló útmutatóval. | | [PDF-operátorok](./pdf-operators/) | Lépésről lépésre útmutató a PDF operátorok használatához az Aspose.PDF for .NET fájlban. Kép hozzáadása egy PDF oldalhoz és a pozíciójának megadása. | | [Grafikus objektumok eltávolítása PDF fájlból](./remove-graphics-objects/) Tanulja meg, hogyan távolíthat el grafikus objektumokat egy PDF fájlból az Aspose.PDF for .NET segítségével ebben a lépésenkénti útmutatóban. Egyszerűsítse PDF-szerkesztési feladatait. | +| [Üres PDF szótár létrehozása C#-ban az Aspose.Pdf segítségével](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Ismerje meg, hogyan hozhat létre üres PDF szótárat C#-ban az Aspose.Pdf könyvtárral. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/hungarian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..52e5a59ad0 --- /dev/null +++ b/pdf/hungarian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: Üres PDF szótár létrehozása C#-ban az Aspose.Pdf használatával – tanulja + meg, hogyan adhat hozzá grafikai állapotot az ExtGState gyűjteményhez, és hogyan + módosíthatja programozottan a PDF-eket. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: hu +lastmod: 2026-08-14 +og_description: Üres PDF-szótár létrehozása C#-ban az Aspose.Pdf segítségével. Kövesse + ezt a teljes útmutatót, hogy egy egyéni grafikai állapotot adjon hozzá a PDF ExtGState + gyűjteményéhez. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Üres PDF szótár létrehozása C#-ban – Aspose.Pdf lépésről lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Üres PDF szótár létrehozása C#‑ban az Aspose.Pdf segítségével +url: /hu/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Üres PDF szótár létrehozása C#-ban az Aspose.Pdf segítségével + +Ha **üres PDF szótár** objektumokat kell létrehoznod PDF fájlokkal dolgozva, ez az útmutató pontosan megmutatja, hogyan teheted ezt C#-ban az Aspose.Pdf könyvtár használatával. Akár egy egyedi grafikai állapotot építesz, új erőforrást adsz hozzá, vagy egy sablont készítesz későbbi felhasználásra, az alábbi lépések egy teljes, futtatható megoldást nyújtanak. + +Megtanulod, hogyan tölts be egy PDF-et, hogyan érj el az első oldal erőforrás‑szótárához, hogyan építs egy vadonatúj `CosPdfDictionary`‑t, és hogyan illeszd be az `ExtGState` gyűjteménybe. A tutorial végére egy működő `output.pdf`-t kapsz, amely a frissen létrehozott szótárat tartalmazza. + +## Prerequisites + +Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel: + +- .NET 6.0 vagy újabb (a kód .NET Framework 4.6+‑nal is működik) +- Visual Studio 2022 vagy bármelyik kedvenc C# IDE +- Aspose.Pdf for .NET licenc (vagy ideiglenes értékelő kulcs) +- Egy **input.pdf** nevű minta‑PDF, amely egy általad irányított mappában van (a mappa útvonalát `dataDir`‑ként használjuk) + +Nem szükséges további NuGet csomag a `Aspose.Pdf`‑n kívül. + +## Step 1: Set up the project and reference Aspose.Pdf + +1. Hozz létre egy új **Console App** projektet a Visual Studio‑ban. +2. Nyisd meg a **NuGet Package Manager**‑t, és telepítsd a `Aspose.Pdf`‑t: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Add hozzá a következő `using` direktívákat a `Program.cs` tetejéhez: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Miért ezek a névterek?* Az `Aspose.Pdf` tartalmazza a központi `Document` osztályt, míg az `Aspose.Pdf.Operators.Gfx` biztosítja a `CosPdfDictionary`, `CosPdfNumber` és a kapcsolódó alacsony szintű PDF objektumokat, amelyekre a **üres PDF szótár** struktúrák **létrehozásához** szükség van. + +## Step 2: Load the source PDF + +Az első művelet a meglévő PDF fájl betöltése egy `Document` példányba. Ez hozzáférést biztosít az összes oldalhoz, erőforráshoz és alacsony szintű szótárhoz. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Magyarázat*: A `Document` beolvassa a fájlt a memóriába, és előkészíti a belső struktúrákat. A `using` utasítás biztosítja, hogy a fájlkezelő a feldolgozás befejezése után felszabaduljon. + +## Step 3: Access the first page’s resource dictionary + +Minden PDF oldalnak van egy **Resources** szótára, amely a betűtípusokat, képeket, ExtGState objektumokat és egyéb megosztott erőforrásokat csoportosítja. Új grafikai állapot beillesztéséhez ezt a szótárt kell szerkesztenünk. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +A `DictionaryEditor` egy segédosztály, amely lehetővé teszi, hogy egy PDF szótárt úgy kezelj, mint egy C# `Dictionary`‑et. + +## Step 4: Retrieve (or create) the ExtGState collection + +Az `ExtGState` grafikai állapot objektumokat tárol, mint például átlátszóság, keverési mód és vonalvastagság. Ha a forrás‑PDF már tartalmaz `ExtGState` bejegyzést, azt újrahasználjuk; ellenkező esetben egy új üres szótárt hozunk létre. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Miért ez az ellenőrzés?* Egyes PDF-ek egyáltalán nem tartalmazzák az `ExtGState` bejegyzést. Mindkét eset kezelése révén a tutorial bármely bemeneti fájlra robusztus marad. + +## Step 5: **Create empty PDF dictionary** for a new graphics state + +Most ténylegesen **üres PDF szótár** objektumokat hozunk létre, amelyek a grafikai állapot paramétereit definiálják. A szótár kezdetben üres, majd hozzáadjuk a szükséges kulcsokat: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### What each entry does + +| Kulcs | Típus | Jelentés | +|------|-------|----------| +| **CA** | `CosPdfNumber` | Vonal átlátszóság (0‑1 tartomány) | +| **ca** | `CosPdfNumber` | Kitöltés átlátszóság (0‑1 tartomány) | +| **BM** | `CosPdfName` | Keverési mód; a `"Normal"` a leggyakoribb | + +Mivel egy **üres PDF szótárral** indultunk, teljes kontrollunk van azon, hogy mely bejegyzéseket adjuk hozzá. A szótárat bővítheted további grafikai állapot paraméterekkel, például `LW` (vonalvastagság) vagy `LC` (vonalvége) szerint, amikor csak szükséges. + +## Step 6: Insert the new graphics state into ExtGState + +Az `ExtGState` szótár egy térképhez hasonlóan működik, ahol minden bejegyzést egy név (pl. `GS0`, `GS1`) azonosít. Az általunk frissen épített szótárat egy egyedi kulcs alá tesszük. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Ha több állapotot szeretnél hozzáadni, növeld a végződést (`GS1`, `GS2`, …), hogy elkerüld a névütközéseket. + +## Step 7: Save the modified PDF + +Végül írjuk vissza a változtatásokat a lemezre. A `Save` metódus automatikusan sorosítja a frissített szótárakat. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Nyisd meg az `output.pdf`‑et bármely PDF‑megtekintőben, és ellenőrizd a **Resources → ExtGState** bejegyzést (a legtöbb néző elrejti ezt, de az Adobe Acrobat Preflight vagy a PDF‑Tron feltárhatja). Látnod kell egy `GS0` bejegyzést, amely a megadott átlátszóság‑ és keverési mód‑értékeket tartalmazza. + +## Complete working example + +Az összes részt összerakva, itt a teljes program, amelyet egyszerűen bemásolhatsz a `Program.cs`‑be és futtathatsz: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Várható kimenet** – A konzol egy megerősítő sort ír ki, és az `output.pdf` tartalmazza az új `GS0` bejegyzést az `ExtGState` alatt. Ha egy olyan oldalt renderelsz, amely hivatkozik a `GS0`‑ra (például egy `gs` tartalmi áramló operátorral), a vonalak teljesen átlátszatlanok lesznek, míg a kitöltések 50 % átlátszóak. + +## Common questions and edge‑case handling + +| Kérdés | Válasz | +|--------|--------| +| *Mi a teendő, ha a PDF több oldalt tartalmaz?* | A példa az első oldalra (`Pages[1]`) vonatkozik. Az összes oldal érintéséhez iterálj a `pdfDocument.Pages`‑en, és ismételd meg a 3‑5. lépéseket minden oldal erőforrásainál. | +| *Hozzáadhatom a szótárat egy olyan oldalhoz, amely már rendelkezik “GS0” nevű ExtGState bejegyzéssel?* | Igen, de másik kulcsot kell használnod (`GS1`, `GS2`, …), hogy ne írj felül egy meglévő bejegyzést. | +| *Biztonságos-e a szótár módosítása a mentés után?* | A `Save` meghívása után a memóriabeli reprezentáció leválik a fájlról. A `Document` objektumot tovább szerkesztheted, és ha szükséges, újra meghívhatod a `Save`‑t. | +| *Szükségem van licencre az Aspose.Pdf használatához, hogy ` | + +## 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 komplett, működő kódrészleteket és lépésről‑lépésre magyarázatot tartalmaz, hogy segítsen elsajátítani további API‑funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan hozzunk létre szaggatott vonalakat PDF‑ekben az Aspose.PDF for .NET segítségével: Lépésről‑lépésre útmutató](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Hogyan távolítsunk el grafikákat PDF‑ekből az Aspose.PDF .NET segítségével: Teljes útmutató](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Hogyan hozzunk létre több rétegű PDF‑eket az Aspose.PDF for .NET segítségével: Átfogó útmutató](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/programming-with-security-and-signatures/_index.md b/pdf/hungarian/net/programming-with-security-and-signatures/_index.md index d7868e9856..a9e307f1a4 100644 --- a/pdf/hungarian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hungarian/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Az oktatóanyag részletes áttekintést nyújt a PDF-fájlok titkosságának é | [PDF aláírások ellenőrzése C#-ban – Hogyan olvassuk be az aláírt PDF fájlokat](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Ismerje meg, hogyan ellenőrizheti és olvashatja a PDF dokumentumok digitális aláírásait C#-ban az Aspose.PDF for .NET segítségével. | | [PDF fájlok javítása – Teljes C# útmutató az Aspose.Pdf segítségével](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Ismerje meg, hogyan javíthatja meg a hibás PDF fájlokat C#-ban az Aspose.PDF segítségével. | | [PDF aláírás ellenőrzése C#-ban – Teljes programozási útmutató](./verify-pdf-signature-in-c-complete-programming-guide/) | Ismerje meg, hogyan ellenőrizheti a PDF aláírásokat C#-ban az Aspose.PDF for .NET segítségével, lépésről lépésre útmutató. | +| [Aláírási beállítások létrehozása C#-ban – teljes útmutató a digitális aláíráshoz](./create-signature-options-in-c-full-guide-to-digital-signing/) | Ismerje meg, hogyan hozhat létre aláírási beállításokat C#-ban a digitális aláíráshoz. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/hungarian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..7268446c05 --- /dev/null +++ b/pdf/hungarian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-08-14 +description: Készíts aláírási opciókat C#-ban a digitális aláírás alkalmazásához. + Tanulja meg, hogyan konfigurálja az aláírást, hogyan valósítson meg egy egyedi hash + függvényt, és hogyan írja alá a dokumentumokat programozottan. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: hu +lastmod: 2026-08-14 +og_description: Aláírási beállítások létrehozása C#-ban és digitális aláírás alkalmazása. + Ez az útmutató végigvezet a aláírás konfigurálásán, egy egyedi hash függvény hozzáadásán + és egy dokumentum aláírásán. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Aláírási lehetőségek létrehozása C#-ban – lépésről‑lépésre digitális aláírási + útmutató +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Aláírási lehetőségek létrehozása C#-ban – teljes útmutató a digitális aláíráshoz +url: /hu/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aláírási beállítások létrehozása C#‑ban – teljes útmutató a digitális aláíráshoz + +Aláírási beállításokat hoz létre C#‑ban a digitális aláírási munkafolyamat konfigurálásához. Ez a bemutató megmutatja, hogyan alkalmazzon digitális aláírást, hogyan valósítson meg egy egyéni hash‑függvényt, és hogyan írjon alá egy dokumentumot a `SignatureOptions` osztály segítségével. Ha valaha PDF‑et, XML‑t vagy bármilyen bináris adatot kellett aláírnia egy .NET alkalmazásból, az alábbi lépések egy azonnal futtatható megoldást nyújtanak. + +Megtanulja, hogyan: + +* konfigurálja a `SignatureOptions`‑t egy egyéni hash‑algoritmussal, +* helyesen hívja meg az aláíró metódust, +* ellenőrizze, hogy az aláírás alkalmazásra került‑e, +* elkerülje a gyakori buktatókat az aláírás beállításakor. + +Az egyetlen előfeltétel egy naprakész .NET SDK (≥ .NET 6) és egy aláíró könyvtár, amely biztosítja a `SignatureOptions`‑t (például **GroupDocs.Signature**, **Aspose.Signature** vagy hasonló API). Külső eszközök nem szükségesek. + +--- + +## Előfeltételek + +| Követelmény | Miért fontos | +|-------------|--------------| +| .NET 6 SDK vagy újabb | Biztosítja a példákban használt modern nyelvi funkciókat. | +| Aláíró‑könyvtár NuGet csomag (pl. `GroupDocs.Signature`) | Szolgáltatja a `SignatureOptions` típust és a `Sign` kiterjesztési metódust. | +| Hozzáférés egy privát kulcshoz vagy tanúsítványhoz | Szükséges a hitelesíthető digitális aláírás előállításához. | + +Telepítse a könyvtárat a szokásos CLI‑val: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## 1. lépés: Aláírási beállítások létrehozása + +Az első lépés a `SignatureOptions` példányosítása és a aláírási folyamatot vezérlő tulajdonságok beállítása. Ez az objektum azt mondja a könyvtárnak, *mit* kell aláírni és *hogyan*. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Miért fontos ez:** A `SignatureOptions` szerződésként működik a kódja és az aláíró motor között. Ha előre konfigurálja, elkerüli az ismétlődő sablonkódot több dokumentum aláírásakor. + +--- + +## 2. lépés: Egyéni hash‑függvény megvalósítása + +Egy *egyéni hash‑függvény* teljes kontrollt ad a digest felett, amelyet az aláírási algoritmus aláír. Ez akkor hasznos, ha az alapértelmezett hash (SHA‑256) nem felel meg a megfelelőségi követelményeknek, vagy ha a dokumentum egy részét kell hash‑elni. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Miért fontos ez:** A `CustomSignHash` hozzárendelésével helyettesíti a könyvtár belső hash‑lépését a `MyHash`‑szal. Az aláíró motor most a függvény által visszaadott bájtokat írja alá, biztosítva a saját szabályzatnak való megfelelést. + +--- + +## 3. lépés: Dokumentum betöltése és digitális aláírás alkalmazása + +A beállítások elkészültek, most megnyithatja a célfájlt és meghívhatja az aláíró metódust. A `Sign` metódust a könyvtár biztosítja, és a konfigurált `SignatureOptions`‑t használja. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Miért fontos ez:** A `Sign` hívás három műveletet hajt végre belsőleg: + +1. **Hash‑számítás** – most az Ön egyéni hash‑függvényére delegálva. +2. **Aláírás generálása** – a könyvtár konfigurációjában megadott privát kulcs használatával. +3. **Beágyazás** – a generált aláírás a kimeneti fájlhoz csatolódik. + +Ha bármelyik lépés hibát jelez, a metódus `false`‑t ad vissza, lehetővé téve a hibakezelést. + +--- + +## 4. lépés: Ellenőrzés, hogy a dokumentum alá van‑e írva + +Egy gyors ellenőrzés megerősíti, hogy az aláírás helyesen alkalmazásra került. A legtöbb könyvtár biztosít egy `Verify` metódust, amely a aláírt fájl integritását vizsgálja. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Miért fontos ez:** Az ellenőrzés garantálja, hogy az aláírt dokumentumot nem módosították az aláírás után, és hogy az egyéni hash kompatibilis digestet eredményezett. + +--- + +## Aláírás konfigurálása különböző fájltípusokhoz + +Ugyanaz a `SignatureOptions` objektum újra felhasználható PDF‑ekhez, Word dokumentumokhoz, képekhez vagy egyszerű binárisokhoz. Az egyetlen szükséges változtatás a konkrét opciós osztály (pl. `PdfSignatureOptions`, `WordSignatureOptions`). Íme egy gyors példa JPEG képhez: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Miért fontos ez:** Ha megérti, hogyan *konfigurálja az aláírást* minden formátumhoz, ugyanazt a kódbázist használhatja több dokumentumtípushoz anélkül, hogy újraírná a hash‑logikát. + +--- + +## Gyakori buktatók és legjobb gyakorlatok + +| Buktató | Ajánlott megoldás | +|---------|-------------------| +| Elfelejtett `CustomSignHash` beállítása a `SignatureOptions` létrehozása után | A delegáltat azonnal a beállítási objektum konstrukciója után rendelje hozzá. | +| Olyan hash‑algoritmus használata, amelyet a tanúsítvány nem támogat | Ellenőrizze, hogy a tanúsítvány kulcshasználata egyezik‑e a hash hosszával (pl. RSA‑2048 SHA‑512‑kel). | +| A `Signature` objektumok eldobásának figyelmen kívül hagyása | Tegye a `Signature` példányt egy `using` blokkba a fájlkezelők felszabadításához. | +| Az aláírt fájl felülírása az eredeti forrással | Mindig írjon egy új fájlútvonalra (`outputPath`), hogy megőrizze az eredeti dokumentumot. | + +--- + +## Teljes működő példa + +Az alábbi önálló program összeállítja az összes elemet. Másolja be egy új konzolprojektbe, és futtassa; a konzol jelzi a siker vagy a hiba állapotát. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Várható kimenet** + +``` +Signature verified successfully. +``` + +Ha a konzol a „Signing failed.” vagy a „Signature verification failed.” üzenetet írja ki, ellenőrizze a tanúsítvány beállításait, és győződjön meg arról, hogy az egyéni hash a várt méretű bájt‑tömböt adja vissza. + +--- + +## Összegzés + +Most már tudja, hogyan **hozzon létre aláírási beállításokat** C#‑ban, hogyan csatoljon **egyéni hash‑függvényt**, és hogyan **alkalmazzon digitális aláírást** bármely támogatott dokumentumra. A bemutató lefedte a teljes életciklust: a beállítások konfigurálása, a fájl aláírása és az eredmény ellenőrzése. Azonos `SignatureOptions` példány újrahasználatával **aláírás konfigurálása** képekhez, Word fájlokhoz vagy nyers binárisokhoz is egyszerűen megvalósítható. + +--- + +## Mi a következő? + +* Fedezze fel a `SignatureOptions` további tulajdonságait, például vizuális bélyegzőket, időbélyeg‑szervereket és tanúsítványláncokat – ezek a **digitális aláírás alkalmazása** kulcsszóval összhangban vannak. +* Kísérletezzen más hash‑algoritmusokkal (pl. Blake2b) az `MyHash` megvalósításának cseréjével. +* Integrálja az aláírási folyamatot egy web‑API‑ba, hogy valós időben tudjon dokumentumokat aláírni – ez a **hogyan írjunk alá dokumentumot** szolgáltatás‑orientált architektúrában való kiterjesztése. + +Nyugodtan igazítsa a kódot saját biztonsági szabályzataihoz, és ossza meg tapasztalatait a megjegyzésekben. Boldog aláírást! + +## Mit érdemes legközelebb megtanulni? + +Az alábbi oktatóanyagok 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ódpéldákat és lépésről‑lépésre magyarázatokat tartalmaz, hogy segítsen további API‑funkciók elsajátításában és alternatív megvalósítási megközelítések felfedezésében saját projektjeiben. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/programming-with-stamps-and-watermarks/_index.md b/pdf/hungarian/net/programming-with-stamps-and-watermarks/_index.md index 6050564512..92e0d8f68f 100644 --- a/pdf/hungarian/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/hungarian/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Az Aspose.PDF „Bélyegzők és vízjelek programozása” című .NET oktatóa | [Szöveg a PDF fájl láblécében](./text-in-footer/) | Ismerje meg, hogyan adhat hozzá szöveget a PDF fájlok láblécéhez az Aspose.PDF for .NET segítségével. | | [Szöveg a PDF fájl fejlécében](./text-in-header/) | Tanulja meg, hogyan adhat hozzá szöveges fejléceket PDF-ekhez az Aspose.PDF for .NET használatával ezzel a lépésről lépésre szóló útmutatóval. Javítsa dokumentumai hatékonyságát és eredményességét. | | [Bates-számozás hozzáadása PDF-hez C#-ban – Teljes útmutató](./add-bates-numbering-pdf-in-c-complete-guide/) | Tanulja meg, hogyan adhat hozzá Bates-számozást PDF-fájlokhoz C#-ban az Aspose.PDF for .NET használatával lépésről lépésre útmutatóval. | +| [Bates-számozás beállítási lehetőségek C#-ban – Teljes útmutató](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Tanulja meg, hogyan állíthatja be a Bates-számozás opcióit C#-ban az Aspose.PDF for .NET segítségével, részletes útmutatóval. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/hungarian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..e795a3b7d4 --- /dev/null +++ b/pdf/hungarian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-08-14 +description: Hogyan állítsuk be a Bates-számozási beállításokat C#-ban a GroupDocs + használatával. Kövesse ezt a lépésről‑lépésre útmutatót, hogy egyéni előtagokat + és kezdőszámokat adjon meg a Word PDF-re konvertálásakor. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: hu +lastmod: 2026-08-14 +og_description: Hogyan állítsuk be gyorsan a Bates-számozási opciókat C#-ban. Ez az + útmutató megmutatja, hogyan adhatunk egyedi előtagokat és kezdőszámokat a Word PDF-re + konvertálásakor. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Hogyan állítsuk be a Bates-számozási beállításokat C#-ban – lépésről lépésre + útmutató +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Hogyan állítsuk be a Bates-számozási opciókat C#‑ban – teljes útmutató +url: /hu/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan állítsuk be a Bates számozási beállításokat C#-ban – teljes útmutató + +Ha **hogyan állítsuk be a Bates számozási beállításokat** C#-ban, ez az útmutató lépésről lépésre végigvezet. Megtanulja, hogyan konfigurálja a kezdő számot, adjon hozzá előtagot, és alkalmazza a számozást egy Word dokumentum PDF‑re konvertálása során a GroupDocs API használatával. + +A dokumentumfeldolgozás gyakran egyedi azonosítókat igényel minden oldalon jogi vagy archiválási célokból. A tutorial végére egy újrahasználható kódrészletet kap, amelyet bármely .NET projektbe beilleszthet, legyen szó peres ügyek támogatásáról vagy automatizált jelentéskészítő eszközről. Külső eszközök nem szükségesek – csak a GroupDocs.Conversion könyvtár és néhány C# sor. + +## Amire szüksége lesz + +* .NET 6.0 SDK vagy újabb telepítve +* Visual Studio 2022 (vagy bármely .NET‑t támogató IDE) +* Érvényes GroupDocs.Conversion licenc (az ingyenes próba a teszteléshez megfelelő) +* Egy minta Word dokumentum (`input.docx`), amelyet számozni szeretne + +Ezek az előfeltételek biztosítják, hogy a kód további konfiguráció nélkül fusson. + +## Hogyan állítsuk be a Bates számozási beállításokat – áttekintés + +A **hogyan állítsuk be a Bates számozási beállításokat** lényege három objektumban rejlik: + +1. `Document` – betölti a forrásfájlt. +2. `BatesNumberingOptions` – tartalmazza a kezdő számot, előtagot és egyéb formázási részleteket. +3. `AddBatesNumbering` – a metódus, amely a számozást minden oldalra beilleszti. + +Az egyes elemek létezésének megértése segít a megoldást összetettebb helyzetekhez, például egyedi betűtípusokhoz vagy többnyelvű számozáshoz igazítani. + +## 1. lépés: A GroupDocs.Conversion NuGet csomag telepítése + +Nyisson egy terminált a megoldás mappájában, és futtassa: + +```bash +dotnet add package GroupDocs.Conversion +``` + +A **GroupDocs API** biztosítja a `Document` osztályt és a `AddBatesNumbering` kiterjesztési metódust, amelyet később a tutorialban használunk. + +## 2. lépés: A forrásdokumentum betöltése + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Miért ez a lépés?* +A fájl betöltése egy memóriában létező reprezentációt hoz létre, amelyet a konverziós motor manipulálhat. `Document` példány nélkül nem tud Bates számozást vagy bármilyen más átalakítást alkalmazni. + +## 3. lépés: A Bates számozási beállítások létrehozása + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Miért ez a lépés?* +A `BatesNumberingOptions` tartalmazza az összes beállítást, amelyre a **Bates számozási beállítások beállításakor** szükség lehet. A `StartNumber` és a `Prefix` módosítása lehetővé teszi a kimenet összehangolását az ügykezelő rendszerével. A `Position` tulajdonság a vizuális elhelyezést szabályozza, ami gyakran megfelelőségi követelmény. + +## 4. lépés: Bates számozás alkalmazása a dokumentumra + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +A `AddBatesNumbering` metódus végigjárja a betöltött `Document` minden oldalát, és beilleszti a beállított karakterláncot. Mivel a metódus a memóriában létező reprezentáción dolgozik, további feldolgozási lépéseket (pl. vízjel) fűzhet hozzá a mentés előtt. + +## 5. lépés: Az eredmény konvertálása és mentése PDF‑ként + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Miért ez a lépés?* +A PDF‑ként mentés gyakori végső formátum a jogi dokumentumoknál. A `PdfConvertOptions` objektum finomhangolást tesz lehetővé, de az alap számozáshoz nem szükséges. A `Save` hívás a teljesen számozott PDF‑et a lemezre írja. + +## Teljes, futtatható példa + +Mindent összevonva, itt egy önálló konzolalkalmazás, amelyet lefordíthat és futtathat: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Várható kimenet** + +A program futtatása létrehozza az `output.pdf` fájlt, ahol minden oldal jobb láblécében egy olyan címke jelenik meg, mint `CASE-1000`, `CASE-1001` stb. Nyissa meg a PDF‑et bármely megjelenítőben, hogy ellenőrizze, a számok a kívánt módon jelennek meg. + +## Gyakori buktatók és legjobb gyakorlatok + +| Probléma | Miért fordul elő | Hogyan kerülhető el | +|-------|----------------|-----------------| +| **Relatív útvonalak `FileNotFoundException`-t okoznak** | A konzolalkalmazás munkakönyvtára eltérhet a Visual Studioétól. | Használjon abszolút útvonalakat vagy `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **A számozás átfedi a meglévő lábléceket** | Ha a forrásdokumentumnak már van tartalma a kiválasztott lábléc területen, az új szám elrejtődhet. | Válasszon másik `Position` értéket (pl. `HeaderLeft`), vagy módosítsa a forrás sablont. | +| **Nagy dokumentumok lassúak** | A Bates számozás minden oldalon iterál; a memóriahasználat a fájl méretével nő. | `Document.Split` használatával dolgozza fel a dokumentumot darabokban, ha több mint 500 oldala van. | +| **Licenc lejárása** | A GroupDocs ingyenes próbaverziója 30 nap után lejár, ami kivételt okoz a `AddBatesNumbering` hívásakor. | Alkalmazzon érvényes licenckulcsot a dokumentum betöltése előtt: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tipp:** Ha esetenként különböző számformátumra van szükség (pl. `2023-CASE-001`), építse fel az előtagot dinamikusan a `BatesNumberingOptions` létrehozása előtt. + +## A megoldás kiterjesztése + +Ugyanaz a **Bates numbering C#** megközelítés más forrásformátumokkal is működik, például `.txt`, `.html` vagy akár képek esetén. Egyszerűen változtassa meg a fájlkiterjesztést a `Document` objektum létrehozásakor, és a konverziós motor a többit elvégzi. + +Összekapcsolhatja a **document conversion C#**‑t OCR-rel beolvasott PDF‑ekhez is: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Következtetés + +Most már tudja, **hogyan állítsuk be a Bates számozási beállításokat** C#-ban az elejétől a végéig. A `BatesNumberingOptions` objektum létrehozásával, a `AddBatesNumbering` alkalmazásával és az eredmény PDF‑ként mentésével automatizálhatja a jogilag megfelelõ, egyedi azonosítóval ellátott dokumentumok előállítását. + +Innen tovább felfedezheti a kapcsolódó témákat, mint a **C# PDF generálás**, **document conversion C#**, vagy a fejlett **GroupDocs API** funkciók, például vízjel és digitális aláírás. Kísérletezzen különböző előtagokkal, pozíciókkal és számformátumokkal, hogy a munkafolyamatához illeszkedjen. + +Boldog kódolást! + +## 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 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. + +- [Bates számozás PDF hozzáadása C#-ban – Teljes útmutató](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Hogyan adjunk hozzá és testre szabjuk az oldalszámokat PDF‑ekben az Aspose.PDF for .NET használatával | Dokumentumkezelési útmutató](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Hogyan adjunk hozzá szöveges pecsét láblécet PDF‑ekhez az Aspose.PDF for .NET: Lépésről‑lépésre útmutató](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/annotations/_index.md b/pdf/indonesian/net/annotations/_index.md index eff1bd0361..50ced95a3a 100644 --- a/pdf/indonesian/net/annotations/_index.md +++ b/pdf/indonesian/net/annotations/_index.md @@ -35,6 +35,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Atur Format Anotasi Teks Bebas](./setfreetextannotationformatting/) | Pelajari cara mengatur format anotasi teks bebas dalam dokumen PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah ini. Bahasa Indonesia: | [Coret Kata-kata](./strikeoutwords/) | Pelajari cara mencoret kata-kata dalam PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah yang komprehensif ini. Tingkatkan keterampilan mengedit dokumen Anda. Bahasa Indonesia: | [Perbarui Anotasi PDF Teks Gratis](./updatefreetextannotation/) Pelajari cara memperbarui anotasi teks bebas dalam dokumen PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah ini. | +| [Gambar Persegi Panjang pada PDF – panduan langkah demi langkah C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Pelajari cara menggambar persegi panjang pada PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah dalam C#. Bahasa Indonesia: {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/indonesian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..a7d3df7308 --- /dev/null +++ b/pdf/indonesian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Gambar persegi panjang pada PDF dengan cepat menggunakan C#. Pelajari + cara menentukan dimensi persegi panjang dan menambahkan bentuk ke halaman PDF hanya + dalam beberapa baris. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: id +lastmod: 2026-08-14 +og_description: gambar persegi panjang pada PDF dengan C# dalam hitungan detik. Panduan + ini menunjukkan cara menentukan dimensi persegi panjang, menambahkan bentuk, dan + memverifikasi batas halaman untuk grafik PDF yang andal. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Menggambar persegi panjang pada PDF – tutorial lengkap C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: menggambar persegi panjang pada PDF – panduan langkah demi langkah C# +url: /id/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# menggambar persegi panjang pada pdf – tutorial lengkap C# + +Jika Anda perlu **draw rectangle on pdf** menggunakan C#, panduan ini menunjukkan solusi yang singkat dan siap produksi. Anda akan melihat secara tepat **how to define rectangle dimensions**, memverifikasi bahwa bentuknya cocok, dan menambahkannya ke halaman dengan satu panggilan metode. + +Tutorial ini mencakup semua hal mulai dari membuat dokumen PDF hingga merender persegi panjang, sehingga Anda dapat menyalin‑tempel kode ke dalam proyek Anda sendiri dan melihat hasilnya secara langsung. Tidak diperlukan dokumentasi eksternal—hanya langkah‑langkah di bawah ini. + +## Prasyarat + +Sebelum Anda memulai, pastikan Anda memiliki: + +* .NET 6.0 atau lebih baru (kode juga berfungsi dengan .NET Framework 4.7+) +* Paket NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Pemahaman dasar tentang sintaks C# +* IDE seperti Visual Studio atau VS Code + +> **Pro tip:** Gunakan lisensi evaluasi gratis Aspose.PDF untuk percobaan cepat; lisensi ini menambahkan watermark kecil tetapi memungkinkan Anda menguji semua fitur. + +## Cara menggambar persegi panjang pada PDF dengan C# + +Inti dari tugas ini adalah membuat `RectangleShape`, mengatur ukuran dan garis tepinya, serta melampirkannya ke `Page`. Header H2 berikut berisi kata kunci utama, memenuhi persyaratan SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Penjelasan setiap langkah + +| Langkah | Mengapa penting | +|---------|-----------------| +| **1️⃣ Buat dokumen PDF baru** | Inisialisasi kontainer yang akan menampung halaman dan grafik. | +| **2️⃣ Tambahkan halaman kosong** | Anda memerlukan objek `Page` karena bentuk dilampirkan ke halaman, bukan langsung ke dokumen. | +| **3️⃣ Tentukan batas persegi panjang** | Di sinilah Anda **how to define rectangle dimensions**. Konstruktor `Rectangle` menerima `x`, `y`, `width`, dan `height` dalam satuan point (1 pt = 1/72 in). | +| **4️⃣ Buat bentuk persegi panjang** | `RectangleShape` adalah kelas Aspose yang merender persegi panjang. Menetapkan `StrokeColor` menentukan garis tepi; Anda juga dapat mengatur `FillColor` untuk isi padat. | +| **5️⃣ Verifikasi batas halaman** | `CheckShapeBoundary` melempar pengecualian jika persegi panjang melebihi ukuran halaman, mencegah PDF yang rusak. | +| **6️⃣ Tambahkan bentuk ke halaman** | Bentuk menjadi bagian dari aliran konten halaman. | +| **7️⃣ Simpan PDF** | Menyimpan dokumen ke file yang dapat Anda buka dengan penampil PDF apa pun. | + +File `RectangleDemo.pdf` yang dihasilkan berisi persegi panjang hitam yang ditempatkan di sudut kiri‑atas halaman, dengan lebar tepat 500 pt dan tinggi 700 pt. + +![contoh menggambar persegi panjang pada pdf](https://example.com/rectangle-demo.png "contoh menggambar persegi panjang pada pdf") + +*Teks alt gambar: contoh menggambar persegi panjang pada pdf menunjukkan persegi panjang hitam di sudut kiri atas halaman PDF.* + +## Cara menentukan dimensi persegi panjang untuk ukuran halaman yang berbeda + +Potongan kode di atas menggunakan nilai tetap (`500 x 700`). Dalam aplikasi nyata Anda sering perlu agar persegi panjang menyesuaikan lebar dan tinggi halaman. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Poin penting:** + +* Gunakan `page.PageInfo.Width` dan `Height` untuk membaca ukuran halaman yang sebenarnya. +* Mengalikan dengan faktor (misalnya `0.8f`) memungkinkan Anda menyatakan dimensi sebagai persentase dari halaman. +* Pemusatan dicapai dengan mengurangi ukuran persegi panjang dari ukuran halaman dan membagi sisa menjadi dua. + +## Kesalahan umum dan cara menghindarinya + +| Kesalahan | Mengapa terjadi | Solusi | +|-----------|----------------|--------| +| Persegi panjang melampaui halaman | Dimensi yang dikodekan keras lebih besar dari ukuran halaman. | Panggil `page.CheckShapeBoundary` **sebelum** menambahkan bentuk; sesuaikan dimensi jika pengecualian dilempar. | +| Garis tepi tidak terlihat | `StrokeColor` dibiarkan pada nilai default (`Color.Empty`). | Tetapkan `StrokeColor` secara eksplisit (mis., `Color.Black`). | +| Persegi panjang muncul di luar layar | Koordinat dimulai dari kiri‑bawah dalam ruang PDF; menggunakan koordinat gaya layar kiri‑atas menyebabkan pembalikan. | Ingat bahwa asal `(0,0)` adalah sudut kiri‑bawah. Sesuaikan `y` sesuai atau gunakan `pageHeight - desiredY`. | +| Ketebalan garis tidak terduga | Lebar garis default mungkin terlalu tipis untuk pencetakan. | Setel `rectangleShape.LineWidth = 2;` untuk meningkatkan ketebalan. | + +## Memperluas contoh + +Setelah Anda dapat **draw rectangle on pdf**, Anda dapat dengan mudah menambahkan bentuk lain: + +* **EllipseShape** – untuk lingkaran atau oval. +* **PolygonShape** – untuk poligon khusus. +* **TextFragment** – untuk memberi label pada persegi panjang Anda. + +Semua bentuk berbagi alur kerja yang sama: tentukan batas, konfigurasikan tampilan, verifikasi batas, lalu tambahkan ke halaman. + +## Program lengkap yang dapat dijalankan + +Berikut adalah program lengkap yang menggabungkan contoh persegi panjang dasar dan contoh penyesuaian ukuran dinamis. Salin ke proyek konsol baru, pulihkan paket NuGet `Aspose.PDF`, dan jalankan. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Output yang diharapkan:** +Buka `CombinedRectangles.pdf`. Anda akan melihat persegi panjang hitam yang ditempatkan di sudut kiri‑bawah dan persegi panjang biru‑gelap terpusat dengan isi kuning‑terang. Kedua persegi panjang menghormati margin halaman. + +## Kesimpulan + +Anda kini tahu cara **draw rectangle on pdf** dengan C# dan secara tepat **how to define rectangle dimensions** untuk tata letak tetap maupun responsif. Pendekatan ini menggunakan `RectangleShape` Aspose.PDF, pemeriksaan batas, dan aritmetika sederhana untuk menyesuaikan dengan ukuran halaman apa pun. + +Selanjutnya, Anda mungkin ingin menjelajahi: + +* Menambahkan **warna isi** dan **gaya garis** (garis putus, titik‑titik) – kata kunci sekunder: how to define rectangle dimensions with style. +* Menggabungkan beberapa bentuk menjadi satu `Page` untuk membuat diagram atau formulir. +* Mengekspor PDF ke stream untuk API web alih‑alih menyimpan ke disk. + +Bereksperimenlah dengan berbagai ukuran, warna, dan posisi untuk menguasai grafik PDF dalam aplikasi .NET Anda. Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan menjelajahi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Cara Menyesuaikan PDF dengan Aspose.PDF untuk .NET: Atur Margin Halaman dan Gambar Garis](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Cara Menambahkan Stempel Halaman pada PDF Menggunakan Aspose.PDF untuk .NET: Panduan Lengkap](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Cara Menambahkan Stempel Nomor Halaman pada PDF Menggunakan Aspose.PDF untuk .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/conversion-export/_index.md b/pdf/indonesian/net/conversion-export/_index.md index 78cc5d9a14..356fbe8535 100644 --- a/pdf/indonesian/net/conversion-export/_index.md +++ b/pdf/indonesian/net/conversion-export/_index.md @@ -141,7 +141,7 @@ Pelajari cara memotong bagian tertentu dari halaman PDF dan mengubahnya menjadi Pelajari cara mengekspor data dari aplikasi ke PDF secara efisien menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup pengaturan, contoh kode dalam C#, dan fitur-fitur utama. ### [Ekspor Anotasi PDF dengan Aspose.PDF .NET: Panduan Lengkap](./export-annotations-aspose-pdf-net/) -Pelajari cara mengekspor anotasi dari PDF secara efisien menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup penyiapan, penerapan, dan praktik terbaik. +Pelajari cara mengekspor anotasi dari PDF secara efisien menggunakan Aspose.PDF .NET. Panduan ini mencakup penyiapan, penerapan, dan praktik terbaik. ### [Ekspor Data PDF ke XML dengan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](./export-pdf-data-to-xml-aspose-dotnet-guide/) Pelajari cara mengekspor data formulir PDF secara efisien ke XML terstruktur menggunakan Aspose.PDF untuk .NET, pustaka canggih yang dirancang untuk manipulasi PDF. @@ -228,7 +228,8 @@ Tutorial kode untuk Aspose.PDF Net Pelajari cara mengonversi dokumen PDF ke gambar TIFF menggunakan Aspose.PDF untuk .NET. Kuasai kedalaman warna khusus dan teknik pemrosesan gambar tingkat lanjut. ### [Cara Menyimpan PDF dengan Aspose – Panduan Langkah demi Langkah](./how-to-save-pdf-with-aspose-step-by-step-guide/) -Pelajari cara menyimpan dokumen PDF menggunakan Aspose dengan contoh kode C# langkah demi langkah. + +### [Simpan PDF sebagai HTML dan Konversi ke PDF/X‑4 dengan Aspose.PDF di C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) ## Sumber Daya Tambahan diff --git a/pdf/indonesian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/indonesian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..966cdbf57f --- /dev/null +++ b/pdf/indonesian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Simpan PDF sebagai HTML dan konversi PDF ke PDF/X‑4 menggunakan Aspose.PDF + untuk C#. Kode langkah demi langkah menunjukkan ekspor HTML, daftar tanda tangan, + dan penyuntingan status grafis. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: id +lastmod: 2026-08-14 +og_description: Simpan PDF sebagai HTML dan konversi PDF ke PDF/X‑4 menggunakan Aspose.PDF + untuk C#. Ikuti panduan lengkap ini untuk mengekspor HTML, menampilkan daftar tanda + tangan, dan mengedit status grafis. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Simpan PDF sebagai HTML dan Konversi ke PDF/X‑4 dengan Aspose.PDF – Panduan + C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Simpan PDF sebagai HTML dan Konversi ke PDF/X‑4 dengan Aspose.PDF di C# +url: /id/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Simpan PDF sebagai HTML dan Konversi ke PDF/X‑4 dengan Aspose.PDF di C# + +Jika Anda perlu **menyimpan PDF sebagai HTML**, Aspose.Pdf membuat prosesnya sederhana. Tutorial ini juga menunjukkan cara **mengonversi PDF ke PDF/X‑4**, menampilkan daftar bidang tanda tangan, dan menambahkan ExtGState khusus, memberikan alur kerja end‑to‑end yang lengkap. + +Anda akan belajar cara: + +* Mengekspor PDF ke HTML bersih sambil melewatkan gambar raster. +* Mengonversi dokumen PDF ke standar PDF/X‑4 untuk output siap cetak. +* Menenumerasi semua bidang tanda tangan dalam PDF. +* Menyisipkan keadaan grafik (ExtGState) khusus pada halaman pertama. + +Semua kode berjalan pada .NET 6 atau yang lebih baru dan memerlukan paket NuGet Aspose.Pdf untuk .NET. + +## Prasyarat + +| Persyaratan | Alasan | +|-------------|--------| +| .NET 6 SDK atau yang lebih baru | Menyediakan runtime untuk contoh C#. | +| Visual Studio 2022 (atau IDE C# apa pun) | Memungkinkan pengeditan dan debugging yang mudah. | +| Aspose.Pdf untuk .NET (v23.12 atau lebih baru) | Menyediakan kelas `Document`, `PdfFormatConversionOptions`, dan `HtmlSaveOptions` yang digunakan dalam tutorial. | +| File PDF contoh (`sample.pdf`) | Dokumen sumber yang akan diproses. | + +Instal perpustakaan dengan: + +```bash +dotnet add package Aspose.Pdf +``` + +## Gambaran Umum Solusi + +Program melakukan enam langkah logis: + +1. Memuat PDF sumber. +2. Menampilkan setiap nama bidang tanda tangan. +3. **Mengonversi PDF ke PDF/X‑4** dan menyimpan hasilnya. +4. **Menyimpan PDF sebagai HTML** sambil melewatkan gambar raster. +5. Menambahkan ExtGState (keadaan grafik) khusus ke halaman pertama. +6. Menyimpan PDF yang telah dimodifikasi dengan keadaan grafik baru. + +Setiap langkah dijelaskan di bawah ini, dengan kode lengkap dan alasan di balik pilihan tersebut. + +## Langkah 1: Muat dokumen PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Mengapa ini penting*: `Document` mewakili seluruh file PDF. Memuatnya sekali memungkinkan Anda menggunakan kembali objek yang sama untuk semua operasi berikutnya, yang mengurangi beban I/O. + +## Langkah 2: Tampilkan semua nama bidang tanda tangan + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Mengapa ini penting*: Mengetahui nama bidang tanda tangan sangat penting ketika Anda perlu memvalidasi, menghapus, atau mengganti tanda tangan digital nanti. Koleksi `Signatures` menyediakan tampilan baca‑saja yang cepat dari bidang‑bidang tersebut. + +## Langkah 3: Mengonversi PDF ke PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Poin penting** + +* `PdfStandard.PdfX4` memberi tahu Aspose.Pdf untuk menyematkan semua sumber daya yang diperlukan (font, profil warna) dan menegakkan batasan PDF/X‑4. +* Konversi dijalankan di memori; hanya file akhir yang ditulis ke disk, sehingga operasi tetap cepat. + +> **Tip profesional:** Verifikasi output dengan validator PDF/X‑4 (misalnya, Adobe Preflight) jika alur kerja hilir Anda sangat ketat mengenai kepatuhan. + +## Langkah 4: Simpan PDF sebagai HTML sambil melewatkan gambar raster + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Mengapa Anda mungkin menginginkannya**: Output HTML berguna untuk pratinjau web atau pengindeksan konten. Melewatkan gambar raster (`SkipRasterImages = true`) membuat HTML lebih ringan dan meningkatkan waktu muat, terutama ketika PDF asli berisi pemindaian resolusi tinggi. + +## Langkah 5: Tambahkan ExtGState khusus ke halaman pertama + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Penjelasan*: Objek **ExtGState** mengontrol transparansi, mode pencampuran, dan parameter grafik lainnya. Dengan menambahkan `GS0`, Anda dapat merujuk keadaan ini nanti dalam aliran konten (misalnya, untuk overlay semi‑transparan). Kode menggunakan API COS tingkat rendah karena Aspose.Pdf tidak menyediakan pembungkus tingkat tinggi untuk pembuatan ExtGState. + +## Langkah 6: Simpan PDF yang telah dimodifikasi dengan ExtGState baru + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +File akhir (`sample_with_extgstate.pdf`) berisi: + +* Semua halaman dan konten asli. +* Versi PDF/X‑4 yang sesuai standar (`sample_pdfx4.pdf`). +* Representasi HTML tanpa gambar raster (`sample.html`). +* ExtGState khusus (`GS0`) yang terlampir pada sumber daya halaman pertama. + +### Output konsol yang diharapkan + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Jika PDF sumber tidak memiliki tanda tangan, loop tidak mencetak apa‑apa tetapi tetap melanjutkan tanpa error. + +## Situasi dan Penyesuaian Umum + +| Situasi | Penyesuaian | +|-----------|------------| +| **PDF tidak memiliki halaman** | Periksa `doc.Pages.Count` sebelum mengakses `doc.Pages[1]` untuk menghindari `IndexOutOfRangeException`. | +| **Anda memerlukan PDF/A‑2b alih-alih PDF/X‑4** | Ubah `PdfStandard.PdfX4` menjadi `PdfStandard.PdfA2b` dalam `PdfFormatConversionOptions`. | +| **Anda ingin mempertahankan gambar raster** | Setel `SkipRasterImages = false` (atau hilangkan properti) dalam `HtmlSaveOptions`. | +| **Beberapa objek ExtGState** | Gunakan kunci unik (`GS1`, `GS2`, …) saat menambahkan ke `extGStateDict`. | +| **PDF besar (ratusan MB)** | Aktifkan `doc.OptimizeResources = true` sebelum menyimpan untuk mengurangi penggunaan memori. | + +## Kode sumber lengkap (dapat dijalankan) + + + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait dan membangun di atas teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan 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 sendiri. + +- [Panduan Komprehensif: Mengonversi PDF ke HTML Menggunakan Aspose.PDF .NET dengan Strategi Kustom](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Mengonversi PDF ke HTML dengan URL Gambar Kustom Menggunakan Aspose.PDF .NET: Panduan Komprehensif](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Konversi PDF ke HTML Menggunakan Aspose.PDF .NET: Simpan Gambar sebagai PNG Eksternal](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/programming-with-forms/_index.md b/pdf/indonesian/net/programming-with-forms/_index.md index 4a592ec797..b56999441e 100644 --- a/pdf/indonesian/net/programming-with-forms/_index.md +++ b/pdf/indonesian/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Mengatur Judul Tombol Radio](./set-radio-button-caption/) Pelajari cara mengatur teks tombol radio dalam PDF menggunakan Aspose.PDF untuk .NET. Panduan langkah demi langkah ini memandu Anda dalam memuat, memodifikasi, dan menyimpan formulir PDF. Bahasa Indonesia: | [Kotak Teks](./text-box/) | Temukan cara mudah menambahkan kotak teks ke PDF menggunakan Aspose.PDF for .NET dengan panduan langkah demi langkah ini. Tingkatkan interaksi pengguna. | | [Cara Membuat PDF dengan Aspose – Tambahkan Bidang Formulir dan Halaman](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Pelajari cara membuat PDF, menambahkan bidang formulir, dan menambah halaman menggunakan Aspose.PDF for .NET. | +| [Buat bidang formulir PDF di C# – panduan langkah demi langkah](./create-pdf-form-field-in-c-step-by-step-guide/) | Pelajari cara membuat bidang formulir PDF menggunakan C# dengan panduan langkah demi langkah. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/indonesian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..f11ca527e8 --- /dev/null +++ b/pdf/indonesian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Buat bidang formulir PDF dengan cepat menggunakan C#. Pelajari cara menambahkan + kotak teks ke PDF dan memodifikasi PDF untuk menyertakan kotak teks menggunakan + Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: id +lastmod: 2026-08-14 +og_description: Buat bidang formulir PDF dengan C#. Tutorial ini menunjukkan cara + menambahkan kotak teks ke PDF dan memodifikasi PDF untuk menyertakan kotak teks + menggunakan Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Buat bidang formulir PDF di C# – panduan pemrograman lengkap +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Buat bidang formulir PDF di C# – panduan langkah demi langkah +url: /id/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat bidang formulir pdf di C# – panduan langkah‑demi‑langkah + +Jika Anda perlu **create pdf form field** dalam sebuah dokumen, panduan ini akan memandu Anda melalui seluruh proses. Anda akan melihat secara tepat cara **add text box to pdf** pada halaman, dan cara **modify pdf to include text box** menggunakan pustaka Aspose.PDF untuk .NET. + +Bekerja dengan formulir PDF adalah kebutuhan umum untuk sistem penagihan, survei, atau alur kerja apa pun yang mengumpulkan masukan pengguna. Pada akhir tutorial ini Anda akan memiliki potongan kode yang dapat digunakan kembali yang membuat bidang kotak teks yang berfungsi penuh, menempatkannya di lokasi yang Anda inginkan, dan menyimpan PDF yang telah diperbarui—semua tanpa meninggalkan proyek C# Anda. + +## Prasyarat + +Sebelum Anda memulai, pastikan Anda memiliki: + +* .NET 6.0 atau yang lebih baru (kode ini juga berfungsi dengan .NET Framework 4.7+) +* Visual Studio 2022 atau IDE apa pun yang mendukung C# +* Lisensi aktif Aspose.PDF untuk .NET (versi percobaan gratis dapat digunakan untuk pengembangan) +* File PDF bernama `input.pdf` yang ditempatkan di direktori yang diketahui (tutorial ini menggunakan `YOUR_DIRECTORY` sebagai placeholder) + +> **Pro tip:** Jika Anda belum memiliki lisensi, Anda dapat meminta kunci sementara dari situs web Aspose; pustaka ini berfungsi dalam mode evaluasi tanpa perubahan kode. + +## Cara membuat bidang formulir pdf di C# (ikhtisar) + +1. Muat dokumen PDF yang sudah ada. +2. Buat instance `TextBoxField` dan konfigurasikan nama serta tampilannya. +3. Tambahkan anotasi widget yang menentukan persegi visual pada halaman target. +4. Sisipkan bidang ke dalam koleksi formulir dokumen. +5. Simpan PDF yang telah dimodifikasi. + +Setiap langkah dijelaskan secara detail di bawah ini, dengan contoh kode lengkap dan penjelasan di balik pemanggilan API. + +## Langkah 1: Muat dokumen PDF + +Operasi pertama adalah membaca PDF sumber. Aspose.PDF merepresentasikan file PDF dengan kelas `Document`. Memuat dokumen memberi Anda akses ke halaman‑halamannya, koleksi formulir, dan struktur lainnya. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Mengapa ini penting:** +Memuat file membuat model PDF dalam memori, memungkinkan Anda menambah, menghapus, atau mengedit objek tanpa merusak file asli. Objek `Document` juga menyediakan properti `Form`, yang nantinya akan Anda gunakan untuk **add text box to pdf**. + +## Langkah 2: Buat bidang kotak teks + +Bidang kotak teks adalah jenis bidang formulir yang memungkinkan pengguna mengetik teks bebas. Di Aspose.PDF Anda membuatnya dengan menginstansiasi `TextBoxField`, memberikan halaman target dan persegi yang mendefinisikan ukuran awal widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Mengapa ini penting:** +* `PartialName` adalah kunci yang digunakan alat pemrosesan formulir (misalnya Adobe Acrobat, parser sisi‑server) untuk mengambil nilai yang dimasukkan. +* Persegi yang Anda berikan di sini hanya menentukan ukuran *awal* widget; Anda dapat menyesuaikan lokasinya secara visual dengan anotasi widget (langkah berikutnya). +* Menetapkan `DefaultAppearance` memastikan teks di dalam kotak ditampilkan secara konsisten di semua penampil. + +## Langkah 3: Definisikan anotasi widget visual + +Sebuah bidang formulir dapat memiliki satu atau lebih **widget annotations** yang mengontrol di mana bidang muncul pada setiap halaman. Dengan menambahkan widget Anda dapat menempatkan bidang logis yang sama di lokasi berbeda atau bahkan pada beberapa halaman. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Mengapa ini penting:** +Persegi widget menentukan koordinat layar yang dilihat pengguna. Jika Anda melewatkan langkah ini, bidang mungkin ada dalam struktur data PDF tetapi tidak akan terlihat oleh pengguna akhir. Menambahkan widget adalah langkah yang benar‑benar **adds text box to pdf**. + +## Langkah 4: Tambahkan bidang yang telah dikonfigurasi ke formulir dokumen + +Setelah `TextBoxField` sepenuhnya dikonfigurasi, Anda perlu mendaftarkannya ke koleksi formulir PDF. Ini menjadikan bidang bagian dari formulir interaktif dan memastikan bidang tersebut disimpan. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Mengapa ini penting:** +Tanpa menambahkan bidang ke `pdfDocument.Form`, penampil PDF akan mengabaikan anotasi widget, dan data bidang tidak akan pernah dikirim. Baris ini menyelesaikan operasi **modify pdf to include text box**. + +## Langkah 5: Simpan PDF yang telah diperbarui + +Akhirnya, tulis perubahan kembali ke disk. Anda dapat menimpa file asli atau membuat file baru; contoh ini menyimpan ke `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Saat Anda membuka `output.pdf` di Adobe Acrobat Reader, Anda akan melihat kotak teks berbentuk persegi berlabel “Comments” pada halaman 2. Pengguna dapat mengklik di dalamnya, mengetik, dan teks yang dimasukkan akan menjadi bagian dari data formulir PDF. + +## Contoh kerja lengkap + +Menggabungkan semua potongan, berikut program lengkap yang siap dijalankan. Salin ke proyek konsol baru, ganti `YOUR_DIRECTORY` dengan jalur folder yang sebenarnya, dan jalankan. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Output yang diharapkan:** +Menjalankan program mencetak dua baris konfirmasi ke konsol. Membuka `output.pdf` menampilkan kotak teks pada halaman 2 tempat pengguna dapat mengetik komentar. Ketika formulir dikirim (misalnya melalui tombol “Submit” di Adobe Acrobat), nama bidang `Comments` muncul dalam data FDF atau XFDF yang diekspor. + +## Variasi umum dan kasus tepi + +| Situasi | Cara menyesuaikan kode | +|-----------|-----------------------| +| **Tambahkan bidang ke halaman yang berbeda** | Ubah `pdfDocument.Pages[1]` ke indeks halaman yang diinginkan (`0`‑based). | +| **Buat kotak teks multi‑baris** | Set `textBox.Multiline = true;` sebelum menambahkan widget. | +| **Tetapkan nilai default** | Assign `textBox.Value = "Enter your comments here";`. | +| **Jadikan bidang wajib** | Set `textBox.Required = true;`. | +| **Tempatkan bidang pada beberapa halaman** | Call `textBox.AddWidgetAnnotation` untuk setiap persegi tambahan pada halaman target. | +| **Gunakan font khusus** | Load the font with `FontRepository.AddFont("path/to/font.ttf")` and reference it in `DefaultAppearance`. | + +**Pro tip:** Selalu validasi koordinat persegi terhadap ukuran halaman (`pdfDocument.Pages[1].Rect`). Jika widget berada di luar batas halaman, penampil mungkin memotong atau menyembunyikan bidang tersebut. + +## Menguji bidang formulir + +1. Buka `output.pdf` di Adobe Acrobat Reader. +2. Klik di dalam kotak “Comments”; kursor harus muncul. +3. Ketik teks apa saja dan tekan **Tab** atau klik di tempat lain. +4. Pilih **File → Save As** untuk menyimpan nilai yang dimasukkan. +5. (Opsional) Gunakan API `Form` Aspose.PDF untuk mengekstrak nilai secara programatis: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Potongan kode ini menunjukkan bahwa bidang tidak hanya terlihat tetapi juga dapat diambil melalui kode—penting untuk pemrosesan sisi‑server. + +## Kesimpulan + +Anda kini tahu cara **create pdf form field** di C# dari awal hingga akhir. Tutorial ini mencakup memuat PDF, mengonfigurasi `TextBoxField`, menambahkan anotasi widget, mendaftarkan bidang, dan menyimpan hasilnya. Dengan blok‑blok bangunan ini Anda dapat **add text box to pdf** dokumen, **modify pdf to include text box**, dan memperluas pendekatan ke tipe bidang lain seperti kotak centang, tombol radio, atau dropdown. + +Selanjutnya, jelajahi topik terkait seperti **extracting form data**, **flattening PDF forms**, atau **styling fields with borders and colors**. Masing‑masing konsep ini dibangun di atas API inti yang baru saja Anda kuasai, memungkinkan Anda membuat PDF interaktif yang canggih sepenuhnya dalam C#. + +Selamat coding, dan jangan ragu bereksperimen dengan persegi yang berbeda, font, serta aturan validasi untuk menyesuaikan kebutuhan aplikasi Anda! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang 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. + +- [Buat Dokumen PDF dengan Aspose – Tambah Halaman, Kotak Teks, dan Formulir](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Cara Membuat PDF dengan Aspose – Tambah Bidang Formulir dan Halaman](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Cara Menambahkan Stempel Teks ke PDF Menggunakan Aspose.PDF .NET: Panduan Komprehensif](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/programming-with-operators/_index.md b/pdf/indonesian/net/programming-with-operators/_index.md index 0539c962ff..beedbdf6a3 100644 --- a/pdf/indonesian/net/programming-with-operators/_index.md +++ b/pdf/indonesian/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Menggambar XForm Di Halaman](./draw-xform-on-page/) | pelajari cara menggambar XForms dalam PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah yang komprehensif ini. Bahasa Indonesia: | [Operator PDF](./pdf-operators/) | Panduan langkah demi langkah untuk menggunakan operator PDF dengan Aspose.PDF untuk .NET. Tambahkan gambar ke halaman PDF dan tentukan posisinya. Bahasa Indonesia: | [Hapus Objek Grafik Dalam File PDF](./remove-graphics-objects/) Pelajari cara menghapus objek grafik dari berkas PDF menggunakan Aspose.PDF untuk .NET dalam panduan langkah demi langkah ini. Sederhanakan tugas manipulasi PDF Anda. | +| [Buat kamus PDF kosong di C# dengan Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Panduan membuat kamus PDF kosong menggunakan Aspose.PDF untuk .NET dalam bahasa C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/indonesian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..7b076b1f33 --- /dev/null +++ b/pdf/indonesian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-14 +description: Buat kamus PDF kosong di C# menggunakan Aspose.Pdf – pelajari cara menambahkan + state grafis ke koleksi ExtGState dan memodifikasi PDF secara programatik. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: id +lastmod: 2026-08-14 +og_description: Buat kamus PDF kosong dalam C# dengan Aspose.Pdf. Ikuti panduan lengkap + ini untuk menambahkan state grafis khusus ke koleksi ExtGState PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Buat kamus PDF kosong di C# – Panduan langkah demi langkah Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Buat kamus PDF kosong di C# dengan Aspose.Pdf +url: /id/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat kamus PDF kosong di C# dengan Aspose.Pdf + +Jika Anda perlu **create empty PDF dictionary** objek saat bekerja dengan file PDF, panduan ini menunjukkan secara tepat cara melakukannya di C# menggunakan pustaka Aspose.Pdf. Baik Anda sedang membangun state grafis khusus, menambahkan sumber daya baru, atau menyiapkan templat untuk penggunaan nanti, langkah‑langkah di bawah ini memberi Anda solusi lengkap yang dapat dijalankan. + +Anda akan belajar cara memuat PDF, mengakses kamus sumber daya halaman pertama, membangun `CosPdfDictionary` baru, dan menyisipkannya ke dalam koleksi `ExtGState`. Pada akhir tutorial Anda akan memiliki `output.pdf` yang berfungsi dan berisi kamus yang baru dibuat. + +## Prasyarat + +- .NET 6.0 atau yang lebih baru (kode juga berfungsi dengan .NET Framework 4.6+) +- Visual Studio 2022 atau IDE C# apa pun yang Anda sukai +- Lisensi Aspose.Pdf untuk .NET (atau kunci evaluasi sementara) +- Contoh PDF bernama **input.pdf** yang ditempatkan di folder yang Anda kontrol (jalur folder akan digunakan sebagai `dataDir`) + +Tidak ada paket NuGet tambahan yang diperlukan selain `Aspose.Pdf`. + +## Langkah 1: Siapkan proyek dan referensikan Aspose.Pdf + +1. Buat proyek **Console App** baru di Visual Studio. +2. Buka **NuGet Package Manager** dan instal `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Tambahkan direktif `using` berikut di bagian atas `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Mengapa namespace ini?* `Aspose.Pdf` berisi kelas inti `Document`, sementara `Aspose.Pdf.Operators.Gfx` menyediakan `CosPdfDictionary`, `CosPdfNumber`, dan objek PDF tingkat‑rendah terkait yang diperlukan untuk **create empty PDF dictionary** struktur. + +## Langkah 2: Muat PDF sumber + +Operasi pertama adalah memuat file PDF yang ada ke dalam instance `Document`. Ini memberi Anda akses ke semua halaman, sumber daya, dan kamus tingkat‑rendah. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Penjelasan*: `Document` membaca file ke memori dan menyiapkan struktur internal. Pernyataan `using` memastikan handle file dilepaskan setelah selesai memproses. + +## Langkah 3: Akses kamus sumber daya halaman pertama + +Setiap halaman PDF memiliki kamus **Resources** yang mengelompokkan font, gambar, objek ExtGState, dan sumber daya bersama lainnya. Untuk menyisipkan state grafis baru, kita perlu mengedit kamus ini. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` adalah kelas pembantu yang memungkinkan Anda memperlakukan kamus PDF seperti `Dictionary` di C#. + +## Langkah 4: Dapatkan (atau buat) koleksi ExtGState + +`ExtGState` menyimpan objek state grafis seperti opacity, blend mode, dan line width. Jika PDF sumber sudah berisi entri `ExtGState`, kami menggunakannya kembali; jika tidak, kami membuat kamus kosong baru. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Mengapa pengecekan ini?* Beberapa PDF tidak menyertakan entri `ExtGState` sama sekali. Dengan menangani kedua kasus, tutorial tetap kuat untuk file masukan apa pun. + +## Langkah 5: **Create empty PDF dictionary** untuk state grafis baru + +Sekarang kami benar‑benarnya **create empty PDF dictionary** objek yang mendefinisikan parameter state grafis. Kamus dimulai kosong, dan kami menambahkan kunci yang diperlukan: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Apa yang dilakukan setiap entri + +| Kunci | Tipe | Makna | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Opacity garis (rentang 0‑1). | +| **ca** | `CosPdfNumber` | Opacity isi (rentang 0‑1). | +| **BM** | `CosPdfName` | Mode pencampuran; `"Normal"` adalah yang paling umum. | + +Karena kami memulai dengan **empty PDF dictionary**, kami memiliki kontrol penuh atas entri yang ditambahkan. Anda dapat memperluas kamus ini dengan parameter state grafis tambahan seperti `LW` (lebar garis) atau `LC` (cap garis) kapan pun diperlukan. + +## Langkah 6: Sisipkan state grafis baru ke dalam ExtGState + +Kamus `ExtGState` berfungsi seperti peta di mana setiap entri diidentifikasi dengan nama (mis., `GS0`, `GS1`). Kami menambahkan kamus yang baru dibangun di bawah kunci unik. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Jika Anda berencana menambahkan beberapa state, tingkatkan sufiks (`GS1`, `GS2`, …) untuk menghindari bentrok nama. + +## Langkah 7: Simpan PDF yang dimodifikasi + +Akhirnya, tulis perubahan kembali ke disk. Metode `Save` secara otomatis menyerialkan kamus yang diperbarui. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Buka `output.pdf` di penampil PDF apa pun dan periksa entri **Resources → ExtGState** (sebagian besar penampil menyembunyikannya, tetapi alat seperti Adobe Acrobat Preflight atau PDF‑Tron dapat menampilkannya). Anda harus melihat entri `GS0` yang berisi nilai opacity dan blend mode yang Anda definisikan. + +## Contoh kerja lengkap + +Menggabungkan semua bagian, berikut program lengkap yang dapat Anda salin‑tempel ke `Program.cs` dan jalankan: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Output yang diharapkan** – Konsol mencetak baris konfirmasi, dan `output.pdf` berisi entri `GS0` baru di bawah `ExtGState`. Saat Anda merender halaman yang merujuk ke `GS0` (mis., melalui operator aliran konten `gs`), garis akan sepenuhnya opaque sementara isi menjadi 50 % transparan. + +## Pertanyaan umum dan penanganan kasus tepi + +| Pertanyaan | Jawaban | +|----------|--------| +| *Bagaimana jika PDF memiliki banyak halaman?* | Contoh ini menargetkan halaman pertama (`Pages[1]`). Untuk memengaruhi semua halaman, lakukan loop melalui `pdfDocument.Pages` dan ulangi langkah 3‑5 untuk sumber daya setiap halaman. | +| *Bisakah saya menambahkan kamus ke halaman yang sudah memiliki entri ExtGState bernama “GS0”?* | Ya, tetapi Anda harus menggunakan kunci berbeda (`GS1`, `GS2`, …) untuk menghindari menimpa entri yang ada. | +| *Apakah aman memodifikasi kamus setelah menyimpan?* | Setelah Anda memanggil `Save`, representasi dalam memori terlepas dari file. Anda dapat terus mengedit objek `Document` dan memanggil `Save` lagi jika diperlukan. | +| *Apakah saya memerlukan lisensi untuk Aspose.Pdf untuk menggunakan `* | | + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah‑demi‑langkah untuk membantu Anda menguasai fitur API tambahan dan menjelajahi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Cara Membuat Garis Putus-Putus di PDF Menggunakan Aspose.PDF untuk .NET: Panduan Langkah demi Langkah](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Cara Menghapus Grafik dari PDF Menggunakan Aspose.PDF .NET: Panduan Lengkap](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Cara Membuat PDF Multi‑Lapisan Menggunakan Aspose.PDF untuk .NET: Panduan Komprehensif](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/programming-with-security-and-signatures/_index.md b/pdf/indonesian/net/programming-with-security-and-signatures/_index.md index 113851407b..37b1847b08 100644 --- a/pdf/indonesian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/indonesian/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Periksa Tanda Tangan PDF di C# – Cara Membaca File PDF yang Ditandatangani](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Pelajari cara memeriksa tanda tangan PDF dan membaca file PDF yang ditandatangani menggunakan Aspose.PDF untuk .NET. | | [Cara Memperbaiki File PDF – Panduan Lengkap C# dengan Aspose.PDF](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Pelajari cara memperbaiki file PDF yang rusak menggunakan Aspose.PDF untuk .NET dengan panduan lengkap C#. Bahasa Indonesia: | [Verifikasi Tanda Tangan PDF di C# – Panduan Pemrograman Lengkap](./verify-pdf-signature-in-c-complete-programming-guide/) | Pelajari cara memverifikasi tanda tangan PDF menggunakan C# dengan Aspose.PDF untuk .NET dalam panduan pemrograman lengkap. | +| [Buat opsi tanda tangan di C# – panduan lengkap penandatanganan digital](./create-signature-options-in-c-full-guide-to-digital-signing/) | Pelajari cara membuat opsi tanda tangan digital di C# dengan panduan lengkap menggunakan Aspose.PDF untuk .NET. Bahasa Indonesia: {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/indonesian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..e90dc9ee9d --- /dev/null +++ b/pdf/indonesian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,313 @@ +--- +category: general +date: 2026-08-14 +description: Buat opsi tanda tangan di C# untuk menerapkan tanda tangan digital. Pelajari + cara mengkonfigurasi tanda tangan, mengimplementasikan fungsi hash khusus, dan menandatangani + dokumen secara programatis. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: id +lastmod: 2026-08-14 +og_description: Buat opsi tanda tangan di C# dan terapkan tanda tangan digital. Tutorial + ini memandu Anda melalui konfigurasi tanda tangan, menambahkan fungsi hash khusus, + dan menandatangani dokumen. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Buat opsi tanda tangan di C# – panduan penandatanganan digital langkah demi + langkah +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Buat opsi tanda tangan di C# – panduan lengkap untuk penandatanganan digital +url: /id/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat opsi tanda tangan di C# – panduan lengkap untuk penandatanganan digital + +Buat opsi tanda tangan di C# untuk mengonfigurasi alur kerja tanda tangan digital. Tutorial ini menunjukkan cara menerapkan tanda tangan digital, mengimplementasikan fungsi hash khusus, dan menandatangani dokumen menggunakan kelas `SignatureOptions`. Jika Anda pernah perlu menandatangani PDF, XML, atau payload biner apa pun dari aplikasi .NET, langkah‑langkah di bawah ini memberikan solusi siap‑jalankan. + +Anda akan belajar cara: + +* mengonfigurasi `SignatureOptions` dengan algoritma hash khusus, +* memanggil metode penandatanganan dengan benar, +* memverifikasi bahwa tanda tangan telah diterapkan, +* menghindari jebakan umum saat mengonfigurasi tanda tangan. + +Prasyarat satu-satunya adalah .NET SDK terbaru (≥ .NET 6) dan perpustakaan penandatanganan yang menyediakan `SignatureOptions` (misalnya, **GroupDocs.Signature**, **Aspose.Signature**, atau API serupa). Tidak diperlukan alat eksternal. + +--- + +## Prasyarat + +| Persyaratan | Mengapa penting | +|-------------|-----------------| +| .NET 6 SDK atau lebih baru | Menyediakan fitur bahasa modern yang digunakan dalam contoh. | +| Paket NuGet perpustakaan penandatanganan (misalnya, `GroupDocs.Signature`) | Menyediakan tipe `SignatureOptions` dan metode ekstensi `Sign`. | +| Akses ke kunci pribadi atau sertifikat | Diperlukan untuk menghasilkan tanda tangan digital yang dapat diverifikasi. | + +Instal perpustakaan dengan CLI standar: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Langkah 1: Buat opsi tanda tangan + +Langkah pertama adalah menginstansiasi `SignatureOptions` dan mengatur properti yang mengontrol proses penandatanganan. Objek ini memberi tahu perpustakaan *apa* yang harus ditandatangani dan *bagaimana* menandatanganinya. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Mengapa ini penting:** `SignatureOptions` berfungsi sebagai kontrak antara kode Anda dan mesin penandatanganan. Dengan mengonfigurasinya di awal, Anda menghindari boilerplate berulang saat menandatangani banyak dokumen. + +--- + +## Langkah 2: Implementasikan fungsi hash khusus + +Fungsi *hash khusus* memberi Anda kontrol penuh atas digest yang ditandatangani oleh algoritma tanda tangan. Ini berguna ketika hash default (SHA‑256) tidak memenuhi persyaratan kepatuhan atau ketika Anda perlu melakukan hash pada subset dokumen. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Mengapa ini penting:** Dengan menetapkan `CustomSignHash`, Anda menggantikan langkah hashing internal perpustakaan dengan `MyHash`. Mesin penandatanganan kini akan menandatangani byte yang dikembalikan oleh fungsi Anda, memastikan kepatuhan dengan kebijakan khusus apa pun. + +--- + +## Langkah 3: Muat dokumen dan terapkan tanda tangan digital + +Dengan opsi yang telah disiapkan, Anda kini dapat membuka file target dan memanggil metode penandatanganan. Metode `Sign` disediakan oleh perpustakaan dan menggunakan `SignatureOptions` yang telah dikonfigurasi. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Mengapa ini penting:** Pemanggilan `Sign` melakukan tiga aksi secara internal: + +1. **Perhitungan hash** – kini didelegasikan ke fungsi hash khusus Anda. +2. **Pembuatan tanda tangan** – menggunakan kunci pribadi yang disediakan dalam konfigurasi perpustakaan. +3. **Penyisipan** – tanda tangan yang dihasilkan dilampirkan ke file output. + +Jika ada langkah yang gagal, metode akan mengembalikan `false`, memungkinkan Anda menangani kesalahan dengan elegan. + +--- + +## Langkah 4: Verifikasi bahwa dokumen telah ditandatangani + +Verifikasi cepat memastikan bahwa tanda tangan telah diterapkan dengan benar. Sebagian besar perpustakaan menyediakan metode `Verify` yang memeriksa integritas file yang ditandatangani. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Mengapa ini penting:** Verifikasi memastikan bahwa dokumen yang ditandatangani tidak diubah setelah penandatanganan dan bahwa hash khusus menghasilkan digest yang kompatibel. + +--- + +## Cara mengonfigurasi tanda tangan untuk berbagai jenis file + +Objek `SignatureOptions` yang sama dapat digunakan kembali untuk PDF, dokumen Word, gambar, atau file biner biasa. Satu‑satunya perubahan yang diperlukan adalah kelas opsi spesifik (misalnya, `PdfSignatureOptions`, `WordSignatureOptions`). Berikut contoh cepat untuk gambar JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Mengapa ini penting:** Memahami cara *mengonfigurasi tanda tangan* untuk setiap format memungkinkan Anda memperluas basis kode yang sama ke berbagai jenis dokumen tanpa menulis ulang logika hashing. + +--- + +## Jebakan umum dan praktik terbaik + +| Jebakan | Perbaikan yang disarankan | +|---------|---------------------------| +| Lupa mengatur `CustomSignHash` setelah membuat `SignatureOptions` | Tetapkan delegate segera setelah membangun objek opsi. | +| Menggunakan algoritma hash yang tidak didukung oleh sertifikat penandatangan | Verifikasi bahwa penggunaan kunci sertifikat cocok dengan panjang hash (misalnya, RSA‑2048 dengan SHA‑512). | +| Mengabaikan kebutuhan untuk membuang objek `Signature` | Bungkus instance `Signature` dalam blok `using` untuk melepaskan handle file. | +| Menyimpan file yang ditandatangani di atas sumber asli | Selalu tulis ke jalur file baru (`outputPath`) untuk mempertahankan dokumen asli. | + +--- + +## Contoh lengkap yang berfungsi + +Berikut adalah program mandiri yang menyatukan semua bagian. Salin ke proyek konsol baru dan jalankan; konsol akan melaporkan keberhasilan atau kegagalan. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Output yang diharapkan** + +``` +Signature verified successfully. +``` + +Jika konsol mencetak “Signing failed.” atau “Signature verification failed.”, periksa kembali konfigurasi sertifikat dan pastikan hash khusus mengembalikan array byte dengan ukuran yang diharapkan. + +--- + +## Kesimpulan + +Anda sekarang tahu cara **membuat opsi tanda tangan** di C#, melampirkan **fungsi hash khusus**, dan **menerapkan tanda tangan digital** ke dokumen apa pun yang didukung. Tutorial ini mencakup siklus hidup lengkap: mengonfigurasi opsi, menandatangani file, dan memverifikasi hasil. Dengan menggunakan kembali instance `SignatureOptions` yang sama, Anda juga dapat **mengonfigurasi tanda tangan** untuk gambar, file Word, atau biner mentah. + +--- + +## Selanjutnya? + +* Jelajahi properti tambahan `SignatureOptions` seperti stempel visual, server timestamp, dan rantai sertifikat – ini selaras dengan kata kunci **apply digital signature**. +* Bereksperimen dengan algoritma hash lain (mis., Blake2b) dengan mengganti implementasi di dalam `MyHash`. +* Integrasikan alur penandatanganan ke dalam API web untuk memungkinkan penandatanganan dokumen secara langsung – ekstensi alami dari **how to sign document** dalam arsitektur berbasis layanan. + +Silakan sesuaikan kode untuk kebijakan keamanan Anda sendiri, dan bagikan pengalaman Anda di kolom komentar. Selamat menandatangani! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait erat yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan 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 Mengubah Bahasa Tanda Tangan PDF dengan Aspose.PDF untuk .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Tutorial Tanda Tangan Digital Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial Tanda Tangan Digital Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/programming-with-stamps-and-watermarks/_index.md b/pdf/indonesian/net/programming-with-stamps-and-watermarks/_index.md index 3e9aa0688b..b1265ef0fe 100644 --- a/pdf/indonesian/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/indonesian/net/programming-with-stamps-and-watermarks/_index.md @@ -38,8 +38,9 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Stempel Nomor Halaman Dalam File PDF](./page-number-stamps/) Pelajari cara menambahkan stempel nomor halaman ke file PDF menggunakan Aspose.PDF untuk .NET melalui panduan kami yang mudah diikuti, lengkap dengan contoh kode. Bahasa Indonesia: | [Tabel Di Bagian Header Footer](./table-in-header-footer-section/) | Pelajari cara mudah menambahkan teks ke bagian bawah berkas PDF menggunakan Aspose.PDF for .NET. Panduan langkah demi langkah disertakan untuk integrasi yang lancar. Bahasa Indonesia: | [Teks Di Footer File PDF](./text-in-footer/) | Pelajari cara menambahkan teks di footer file PDF dengan Aspose.PDF for .NET. Bahasa Indonesia: -| [Teks Di Header File PDF](./text-in-header/) | Pelajari cara menambahkan tajuk teks ke PDF menggunakan Aspose.PDF for .NET dengan tutorial langkah demi langkah ini. Sempurnakan dokumen Anda secara efisien dan efektif. | +| [Teks Di Header File PDF](./text-in-header/) | Pelajari cara menambahkan tajuk teks ke PDF menggunakan Aspose.PDF untuk .NET dengan tutorial langkah demi langkah ini. Sempurnakan dokumen Anda secara efisien dan efektif. | | [Tambahkan Penomoran Bates PDF di C# – Panduan Lengkap](./add-bates-numbering-pdf-in-c-complete-guide/) | Pelajari cara menambahkan penomoran Bates ke file PDF menggunakan Aspose.PDF untuk .NET dengan contoh kode lengkap dalam C#. Bahasa Indonesia: +| [Cara Mengatur Opsi Penomoran Bates di C# – Panduan Lengkap](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Pelajari cara mengatur opsi penomoran Bates dalam file PDF menggunakan Aspose.PDF untuk .NET dengan contoh kode lengkap dalam C#. Bahasa Indonesia: {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/indonesian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..a86e0026c1 --- /dev/null +++ b/pdf/indonesian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: Cara mengatur opsi penomoran Bates di C# menggunakan GroupDocs. Ikuti + tutorial langkah demi langkah ini untuk menambahkan awalan khusus dan nomor mulai + saat mengonversi Word ke PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: id +lastmod: 2026-08-14 +og_description: Cara mengatur opsi penomoran Bates di C# dengan cepat. Panduan ini + menunjukkan cara menambahkan awalan khusus dan nomor mulai saat mengonversi Word + ke PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Cara mengatur opsi penomoran Bates di C# – tutorial langkah demi langkah +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Cara mengatur opsi penomoran Bates di C# – panduan lengkap +url: /id/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara mengatur opsi penomoran Bates di C# – panduan lengkap + +Jika Anda membutuhkan **cara mengatur opsi penomoran bates** di C#, panduan ini akan memandu Anda melalui langkah‑langkah yang tepat. Anda akan belajar cara mengonfigurasi nomor mulai, menambahkan awalan, dan menerapkan penomoran saat mengonversi dokumen Word ke PDF menggunakan GroupDocs API. + +Pemrosesan dokumen sering memerlukan pengidentifikasi unik pada setiap halaman untuk keperluan hukum atau arsip. Pada akhir tutorial ini Anda akan memiliki potongan kode yang dapat digunakan kembali dan dapat dimasukkan ke dalam proyek .NET apa pun, baik Anda sedang membangun alat dukungan litigasi atau generator laporan otomatis. Tidak diperlukan alat eksternal—hanya pustaka GroupDocs.Conversion dan beberapa baris kode C#. + +## Apa yang Anda perlukan + +* .NET 6.0 SDK atau yang lebih baru terpasang +* Visual Studio 2022 (atau IDE apa pun yang mendukung .NET) +* Lisensi GroupDocs.Conversion yang valid (versi percobaan gratis dapat digunakan untuk pengujian) +* Dokumen Word contoh (`input.docx`) yang ingin Anda beri nomor + +Prasyarat ini memastikan kode berjalan tanpa konfigurasi tambahan. + +## Cara mengatur opsi penomoran bates – ikhtisar + +Inti dari **cara mengatur opsi penomoran bates** terletak pada tiga objek: + +1. `Document` – memuat file sumber. +2. `BatesNumberingOptions` – menyimpan nomor mulai, awalan, dan detail pemformatan lainnya. +3. `AddBatesNumbering` – metode yang menyisipkan penomoran ke setiap halaman. + +Memahami mengapa setiap komponen ada membantu Anda menyesuaikan solusi untuk skenario yang lebih kompleks, seperti font khusus atau penomoran multi‑bahasa. + +## Langkah 1: Instal paket NuGet GroupDocs.Conversion + +Buka terminal di folder solusi Anda dan jalankan: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** menyediakan kelas `Document` dan metode ekstensi `AddBatesNumbering` yang digunakan nanti dalam tutorial. + +## Langkah 2: Muat dokumen sumber + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Mengapa langkah ini?* +Memuat file membuat representasi dalam memori yang dapat dimanipulasi oleh mesin konversi. Tanpa instance `Document` Anda tidak dapat menerapkan penomoran Bates atau transformasi lainnya. + +## Langkah 3: Buat opsi penomoran Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Mengapa langkah ini?* +`BatesNumberingOptions` mengenkapsulasi semua pengaturan yang mungkin Anda perlukan saat **mengatur opsi penomoran bates**. Menyesuaikan `StartNumber` dan `Prefix` memungkinkan Anda menyelaraskan output dengan sistem manajemen kasus Anda. Properti `Position` mengontrol penempatan visual, yang sering menjadi persyaratan kepatuhan. + +## Langkah 4: Terapkan penomoran Bates ke dokumen + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Metode `AddBatesNumbering` melintasi setiap halaman dari `Document` yang dimuat dan menyisipkan string yang telah dikonfigurasi. Karena metode ini bekerja pada representasi dalam memori, Anda dapat menambahkan langkah pemrosesan tambahan (misalnya, watermark) sebelum menyimpan. + +## Langkah 5: Konversi dan simpan hasil sebagai PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Mengapa langkah ini?* +Menyimpan sebagai PDF adalah format akhir yang umum untuk dokumen hukum. Objek `PdfConvertOptions` memungkinkan Anda menyesuaikan output secara detail, tetapi tidak diperlukan untuk penomoran dasar. Pemanggilan `Save` menulis PDF yang telah diberi nomor sepenuhnya ke disk. + +## Contoh lengkap yang dapat dijalankan + +Menggabungkan semua, berikut adalah aplikasi konsol mandiri yang dapat Anda kompilasi dan jalankan: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Output yang diharapkan** + +Menjalankan program akan membuat `output.pdf` di mana setiap halaman menampilkan label seperti `CASE-1000`, `CASE-1001`, dll., yang ditempatkan di footer kanan. Buka PDF tersebut dengan penampil apa pun untuk memverifikasi bahwa nomor muncul sesuai yang diharapkan. + +## Kesalahan umum dan praktik terbaik + +| Masalah | Mengapa terjadi | Cara menghindarinya | +|---------|----------------|---------------------| +| **Path relatif menyebabkan `FileNotFoundException`** | Direktori kerja aplikasi konsol dapat berbeda dari Visual Studio. | Gunakan path absolut atau `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Penomoran menutupi footer yang ada** | Jika dokumen sumber sudah memiliki konten di area footer yang dipilih, nomor baru dapat tersembunyi. | Pilih `Position` yang berbeda (misalnya, `HeaderLeft`) atau sesuaikan templat sumber. | +| **Dokumen besar menjadi lambat** | Penomoran Bates mengiterasi setiap halaman; penggunaan memori meningkat seiring ukuran file. | Proses dokumen dalam potongan menggunakan `Document.Split` jika melebihi 500 halaman. | +| **Kedaluwarsa lisensi** | Versi percobaan gratis GroupDocs berakhir setelah 30 hari, menyebabkan pengecualian pada `AddBatesNumbering`. | Terapkan kunci lisensi yang valid sebelum memuat dokumen: `License license = new License(); license.SetLicense("license.lic");`. | + +**Tips profesional:** Jika Anda membutuhkan format nomor yang berbeda per kasus (mis., `2023-CASE-001`), bangun awalan secara dinamis sebelum membuat `BatesNumberingOptions`. + +## Memperluas solusi + +Pendekatan **Bates numbering C#** yang sama bekerja dengan format sumber lain seperti `.txt`, `.html`, atau bahkan gambar. Cukup ubah ekstensi file saat membuat objek `Document`, dan mesin konversi akan menangani sisanya. + +Anda juga dapat menggabungkan **document conversion C#** dengan OCR untuk PDF yang dipindai: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Kesimpulan + +Anda kini tahu **cara mengatur opsi penomoran bates** di C# dari awal hingga akhir. Dengan membuat objek `BatesNumberingOptions`, menerapkannya dengan `AddBatesNumbering`, dan menyimpan hasilnya sebagai PDF, Anda dapat mengotomatisasi produksi dokumen yang secara hukum mematuhi regulasi dan memiliki identifikasi unik. + +Dari sini Anda dapat menjelajahi topik terkait seperti **C# PDF generation**, **document conversion C#**, atau fitur lanjutan **GroupDocs API** seperti watermarking dan tanda tangan digital. Bereksperimenlah dengan awalan, posisi, dan format nomor yang berbeda untuk menyesuaikan alur kerja Anda. + +Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan menjelajahi pendekatan implementasi alternatif dalam proyek Anda. + +- [Tambahkan Penomoran Bates PDF di C# – Panduan Lengkap](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Cara Menambahkan dan Menyesuaikan Nomor Halaman di PDF Menggunakan Aspose.PDF untuk .NET | Panduan Manipulasi Dokumen](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Cara Menambahkan Footer Stempel Teks di PDF Menggunakan Aspose.PDF untuk .NET: Panduan Langkah‑per‑Langkah](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/annotations/_index.md b/pdf/italian/net/annotations/_index.md index d8402634e6..0156575156 100644 --- a/pdf/italian/net/annotations/_index.md +++ b/pdf/italian/net/annotations/_index.md @@ -35,6 +35,7 @@ Una raccolta completa di tutorial che illustra come utilizzare le annotazioni ne | [Imposta la formattazione delle annotazioni di testo libero](./setfreetextannotationformatting/) | Scopri come impostare la formattazione delle annotazioni di testo libero nei documenti PDF utilizzando Aspose.PDF per .NET con questa guida dettagliata. | [Parole cancellate](./strikeoutwords/) | Scopri come barrare le parole in un PDF usando Aspose.PDF per .NET con questa guida completa passo dopo passo. Migliora le tue capacità di editing dei documenti. | | [Aggiorna annotazione PDF in testo libero](./updatefreetextannotation/) Scopri come aggiornare le annotazioni di testo libero nei documenti PDF utilizzando Aspose.PDF per .NET con questa guida dettagliata. +| [Disegna un rettangolo su PDF – guida passo‑passo C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) Scopri come disegnare un rettangolo in un PDF usando Aspose.PDF per .NET con una guida dettagliata passo‑passo in C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/italian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..6fbfc91766 --- /dev/null +++ b/pdf/italian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Disegna un rettangolo su PDF rapidamente usando C#. Scopri come definire + le dimensioni del rettangolo e aggiungere forme a una pagina PDF in poche righe. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: it +lastmod: 2026-08-14 +og_description: disegna un rettangolo su PDF con C# in pochi secondi. Questa guida + mostra come definire le dimensioni del rettangolo, aggiungere una forma e verificare + i limiti della pagina per una grafica PDF affidabile. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: disegnare un rettangolo su PDF – tutorial completo C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Disegnare un rettangolo su PDF – guida passo‑passo C# +url: /it/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# disegnare un rettangolo su pdf – tutorial completo C# + +Se hai bisogno di **draw rectangle on pdf** usando C#, questa guida ti mostra una soluzione concisa, pronta per la produzione. Vedrai esattamente **how to define rectangle dimensions**, verifica che la forma si adatti e aggiungila a una pagina con una singola chiamata di metodo. + +Il tutorial copre tutto, dalla creazione di un documento PDF al rendering del rettangolo, così puoi copiare‑incollare il codice nel tuo progetto e vedere i risultati immediatamente. Non è necessaria alcuna documentazione esterna—basta seguire i passaggi qui sotto. + +## Prerequisiti + +* .NET 6.0 o versioni successive (il codice funziona anche con .NET Framework 4.7+) +* Il pacchetto NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Una conoscenza di base della sintassi C# +* Un IDE come Visual Studio o VS Code + +> **Consiglio professionale:** Usa la licenza di valutazione gratuita di Aspose.PDF per esperimenti rapidi; aggiunge una piccola filigrana ma ti consente di testare tutte le funzionalità. + +## Come disegnare un rettangolo su PDF con C# + +Il nucleo del compito è creare un `RectangleShape`, impostarne le dimensioni e lo spessore, e collegarlo a una `Page`. L'intestazione H2 seguente contiene la parola chiave principale, soddisfacendo i requisiti SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Spiegazione di ogni passaggio + +| Passaggio | Perché è importante | +|------|----------------| +| **1️⃣ Create a new PDF document** | Inizializza il contenitore che conterrà pagine e grafica. | +| **2️⃣ Add a blank page** | Hai bisogno di un oggetto `Page` perché le forme vengono collegate a una pagina, non direttamente al documento. | +| **3️⃣ Define the rectangle bounds** | Qui è dove **how to define rectangle dimensions**. Il costruttore `Rectangle` accetta `x`, `y`, `width` e `height` in punti (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape` è la classe Aspose che renderizza un rettangolo. Impostare `StrokeColor` definisce il contorno; puoi anche impostare `FillColor` per un riempimento solido. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` lancia un'eccezione se il rettangolo supera le dimensioni della pagina, evitando PDF malformati. | +| **6️⃣ Add the shape to the page** | La forma diventa parte del flusso di contenuto della pagina. | +| **7️⃣ Save the PDF** | Salva il documento su un file che puoi aprire con qualsiasi visualizzatore PDF. | + +Il risultato `RectangleDemo.pdf` contiene un rettangolo nero posizionato nell'angolo in alto a sinistra della pagina, esattamente 500 pt di larghezza e 700 pt di altezza. + +![disegnare rettangolo su pdf esempio](https://example.com/rectangle-demo.png "disegnare rettangolo su pdf esempio") + +*Testo alternativo dell'immagine: disegnare rettangolo su pdf esempio che mostra un rettangolo nero nell'angolo superiore sinistro di una pagina PDF.* + +## Come definire le dimensioni del rettangolo per diverse dimensioni di pagina + +Il frammento sopra utilizza valori fissi (`500 x 700`). Nelle applicazioni reali spesso è necessario che il rettangolo si adatti alla larghezza e all'altezza della pagina. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Punti chiave:** + +* Usa `page.PageInfo.Width` e `Height` per leggere le dimensioni effettive della pagina. +* Moltiplicare per un fattore (ad esempio `0.8f`) ti consente di esprimere le dimensioni come percentuale della pagina. +* Il centraggio si ottiene sottraendo la dimensione del rettangolo dalla dimensione della pagina e dividendo a metà il resto. + +## Errori comuni e come evitarli + +| Problema | Perché succede | Soluzione | +|---------|----------------|-----| +| Rectangle extends beyond the page | Dimensioni codificate rigide più grandi della dimensione della pagina. | Chiama `page.CheckShapeBoundary` **prima** di aggiungere la forma; regola le dimensioni se viene lanciata un'eccezione. | +| Stroke not visible | `StrokeColor` lasciato al valore predefinito (`Color.Empty`). | Imposta esplicitamente `StrokeColor` (ad esempio `Color.Black`). | +| Rectangle appears off‑screen | Le coordinate iniziano in basso a sinistra nello spazio PDF; usare coordinate stile schermo in alto a sinistra provoca un'inversione. | Ricorda che l'origine `(0,0)` è l'angolo in basso a sinistra. Regola `y` di conseguenza o usa `pageHeight - desiredY`. | +| Unexpected line thickness | Lo spessore di linea predefinito può essere troppo sottile per la stampa. | Imposta `rectangleShape.LineWidth = 2;` per aumentare lo spessore. | + +## Estendere l'esempio + +Una volta che puoi **draw rectangle on pdf**, puoi facilmente aggiungere altre forme: + +* **EllipseShape** – per cerchi o ovali. +* **PolygonShape** – per poligoni personalizzati. +* **TextFragment** – per etichettare i tuoi rettangoli. + +Tutte le forme condividono lo stesso flusso di lavoro: definire i limiti, configurare l'aspetto, verificare i confini, quindi aggiungere alla pagina. + +## Programma completo e eseguibile + +Di seguito è riportato il programma completo che combina il rettangolo di base e l'esempio di dimensionamento dinamico. Copialo in un nuovo progetto console, ripristina il pacchetto NuGet `Aspose.PDF` e avvialo. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Output previsto:** +Apri `CombinedRectangles.pdf`. Vedrai un rettangolo nero ancorato nell'angolo in basso a sinistra e un rettangolo blu scuro centrato con riempimento giallo chiaro. Entrambi i rettangoli rispettano i margini della pagina. + +## Conclusione + +Ora sai come **draw rectangle on pdf** con C# e precisamente **how to define rectangle dimensions** per layout sia fissi che reattivi. L'approccio utilizza `RectangleShape` di Aspose.PDF, il controllo dei confini e semplici operazioni aritmetiche per adattarsi a qualsiasi dimensione di pagina. + +Successivamente, potresti esplorare: + +* Aggiungere **colori di riempimento** e **stili di linea** (tratteggiata, puntinata) – parola chiave secondaria: how to define rectangle dimensions with style. +* Combinare più forme in una singola `Page` per creare grafici o moduli. +* Esportare il PDF in uno stream per API web invece di salvarlo su disco. + +Sperimenta con diverse dimensioni, colori e posizioni per padroneggiare la grafica PDF nelle tue applicazioni .NET. Buon coding! + +## 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 personalizzare i PDF con Aspose.PDF per .NET: impostare i margini della pagina e disegnare linee](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Come aggiungere timbri di pagina nei PDF usando Aspose.PDF per .NET: guida completa](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Come aggiungere timbri numerati di pagina nei PDF usando Aspose.PDF per .NET | Timbri e sfondi](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/conversion-export/_index.md b/pdf/italian/net/conversion-export/_index.md index 4c76648242..fa92f7a844 100644 --- a/pdf/italian/net/conversion-export/_index.md +++ b/pdf/italian/net/conversion-export/_index.md @@ -104,6 +104,9 @@ Scopri come convertire i file PDF in formato XML con Aspose.PDF per .NET. Miglio ### [Convertire PDF/A in PDF standard utilizzando Aspose.PDF .NET: una guida completa](./convert-pdf-a-standard-pdf-aspose-net/) Scopri come convertire senza problemi i documenti PDF/A in PDF standard utilizzando Aspose.PDF per .NET con questa guida dettagliata. +### [Salva PDF come HTML e converti in PDF/X‑4 con Aspose.PDF in C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Scopri come salvare un PDF come HTML e poi convertirlo in PDF/X‑4 usando Aspose.PDF per .NET con C#. + ### [Convertire i PDF in HTML interattivo con CSS personalizzato utilizzando Aspose.PDF .NET](./convert-pdfs-to-html-custom-css-aspose-pdf-net/) Scopri come trasformare i documenti PDF in formati HTML interattivi e adatti al Web utilizzando Aspose.PDF .NET, completo di stile CSS personalizzato. diff --git a/pdf/italian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/italian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..0486b1c9bf --- /dev/null +++ b/pdf/italian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-14 +description: Salva PDF come HTML e converti PDF in PDF/X‑4 usando Aspose.PDF per C#. + Il codice passo‑passo mostra l'esportazione HTML, l'elenco delle firme e la modifica + dello stato grafico. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: it +lastmod: 2026-08-14 +og_description: Salva PDF come HTML e converti PDF in PDF/X‑4 usando Aspose.PDF per + C#. Segui questa guida completa per esportare HTML, elencare le firme e modificare + gli stati grafici. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Salva PDF come HTML e converti in PDF/X‑4 con Aspose.PDF – Guida C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Salva PDF come HTML e converti in PDF/X‑4 con Aspose.PDF in C# +url: /it/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salva PDF come HTML e Converti in PDF/X‑4 con Aspose.PDF in C# + +Se hai bisogno di **salvare PDF come HTML**, Aspose.Pdf rende il processo semplice. Questo tutorial mostra anche come **convertire PDF in PDF/X‑4**, elencare i campi firma e aggiungere un ExtGState personalizzato, fornendoti un flusso di lavoro completo end‑to‑end. + +Imparerai a: + +* Esportare un PDF in HTML pulito saltando le immagini raster. +* Convertire un documento PDF nello standard PDF/X‑4 per output pronto per la stampa. +* Enumerare tutti i campi firma in un PDF. +* Inserire uno stato grafico personalizzato (ExtGState) nella prima pagina. + +Tutto il codice funziona su .NET 6 o versioni successive e richiede il pacchetto NuGet Aspose.Pdf per .NET. + +## Prerequisiti + +| Requisito | Motivo | +|-------------|--------| +| .NET 6 SDK o più recente | Fornisce l’ambiente di runtime per il campione C#. | +| Visual Studio 2022 (o qualsiasi IDE C#) | Consente una facile modifica e debug. | +| Aspose.Pdf per .NET (v23.12 o successiva) | Fornisce le classi `Document`, `PdfFormatConversionOptions` e `HtmlSaveOptions` usate nel tutorial. | +| Un file PDF di esempio (`sample.pdf`) | Il documento sorgente che verrà elaborato. | + +Installa la libreria con: + +```bash +dotnet add package Aspose.Pdf +``` + +## Panoramica della soluzione + +Il programma esegue sei passaggi logici: + +1. Carica il PDF di origine. +2. Elenca tutti i nomi dei campi firma. +3. **Converti PDF in PDF/X‑4** e salva il risultato. +4. **Salva PDF come HTML** saltando le immagini raster. +5. Aggiungi un ExtGState (stato grafico) personalizzato alla prima pagina. +6. Salva il PDF modificato con il nuovo stato grafico. + +Ogni passaggio è spiegato di seguito, con codice completo e motivazioni delle scelte. + +## Passaggio 1: Carica il documento PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Perché è importante*: `Document` rappresenta l’intero file PDF. Caricarlo una sola volta consente di riutilizzare lo stesso oggetto per tutte le operazioni successive, riducendo il sovraccarico di I/O. + +## Passaggio 2: Elenca tutti i nomi dei campi firma + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Perché è importante*: Conoscere i nomi dei campi firma è essenziale quando devi convalidare, rimuovere o sostituire firme digitali in seguito. La collezione `Signatures` fornisce una visualizzazione veloce e di sola lettura dei campi. + +## Passaggio 3: Converti PDF in PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Punti chiave** + +* `PdfStandard.PdfX4` indica ad Aspose.Pdf di incorporare tutte le risorse necessarie (font, profili colore) e di applicare i vincoli PDF/X‑4. +* La conversione avviene in memoria; solo il file finale viene scritto su disco, mantenendo l’operazione veloce. + +> **Suggerimento professionale:** Verifica l’output con un validatore PDF/X‑4 (ad es., Adobe Preflight) se il tuo flusso di lavoro richiede una stretta conformità. + +## Passaggio 4: Salva PDF come HTML saltando le immagini raster + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Perché potresti volerlo**: L’output HTML è utile per l’anteprima web o l’indicizzazione dei contenuti. Saltare le immagini raster (`SkipRasterImages = true`) mantiene l’HTML leggero e migliora i tempi di caricamento, soprattutto quando il PDF originale contiene scansioni ad alta risoluzione. + +## Passaggio 5: Aggiungi un ExtGState personalizzato alla prima pagina + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Spiegazione*: Un oggetto **ExtGState** controlla trasparenza, modalità di fusione e altri parametri grafici. Aggiungendo `GS0`, potrai fare riferimento a questo stato nei flussi di contenuto (ad es., per sovrapposizioni semitrasparenti). Il codice utilizza l’API COS a basso livello perché Aspose.Pdf non espone un wrapper di alto livello per la creazione di ExtGState. + +## Passaggio 6: Salva il PDF modificato con il nuovo ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Il file finale (`sample_with_extgstate.pdf`) contiene: + +* Tutte le pagine e i contenuti originali. +* Una versione PDF/X‑4 conforme (`sample_pdfx4.pdf`). +* Una rappresentazione HTML senza immagini raster (`sample.html`). +* Un ExtGState personalizzato (`GS0`) collegato alle risorse della prima pagina. + +### Output console previsto + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Se il PDF di origine non contiene firme, il ciclo non stampa nulla ma continua comunque senza errori. + +## Variazioni comuni e casi limite + +| Situazione | Adeguamento | +|-----------|------------| +| **Il PDF non contiene pagine** | Controlla `doc.Pages.Count` prima di accedere a `doc.Pages[1]` per evitare `IndexOutOfRangeException`. | +| **Hai bisogno di PDF/A‑2b invece di PDF/X‑4** | Cambia `PdfStandard.PdfX4` in `PdfStandard.PdfA2b` in `PdfFormatConversionOptions`. | +| **Vuoi mantenere le immagini raster** | Imposta `SkipRasterImages = false` (o ometti la proprietà) in `HtmlSaveOptions`. | +| **Più oggetti ExtGState** | Usa chiavi uniche (`GS1`, `GS2`, …) quando aggiungi a `extGStateDict`. | +| **PDF di grandi dimensioni (centinaia di MB)** | Abilita `doc.OptimizeResources = true` prima del salvataggio per ridurre l’uso di memoria. | + +## Codice sorgente completo (eseguibile) + + + +## Cosa dovresti imparare dopo? + +I tutorial seguenti trattano 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à aggiuntive dell’API ed esplorare approcci alternativi di implementazione nei tuoi progetti. + +- [Guida completa: Converti PDF in HTML usando Aspose.PDF .NET con strategie personalizzate](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Converti PDF in HTML con URL immagine personalizzati usando Aspose.PDF .NET: Guida completa](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Conversione PDF in HTML usando Aspose.PDF .NET: Salva immagini come PNG esterni](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/programming-with-forms/_index.md b/pdf/italian/net/programming-with-forms/_index.md index bada850c65..2f76d1d8ad 100644 --- a/pdf/italian/net/programming-with-forms/_index.md +++ b/pdf/italian/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Questi tutorial forniscono anche esempi di codice dettagliati, spiegazioni chiar | [Imposta la didascalia del pulsante di scelta](./set-radio-button-caption/) Scopri come impostare le didascalie dei pulsanti di opzione nei PDF utilizzando Aspose.PDF per .NET. Questa guida dettagliata ti guiderà passo passo nel caricamento, nella modifica e nel salvataggio dei tuoi moduli PDF. | | [Casella di testo](./text-box/) | Scopri come aggiungere facilmente caselle di testo ai PDF utilizzando Aspose.PDF per .NET con questa guida passo passo. Migliora l'interazione con l'utente. | | [Come creare PDF con Aspose – Aggiungere campo modulo e pagine](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Scopri come creare un PDF, aggiungere campi modulo e gestire le pagine usando Aspose.PDF per .NET. | +| [Creare campo modulo PDF in C# – guida passo‑passo](./create-pdf-form-field-in-c-step-by-step-guide/) | Scopri come creare un campo modulo PDF in C# con Aspose.PDF per .NET, passo dopo passo, con esempi di codice. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/italian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..d5fcbba7d5 --- /dev/null +++ b/pdf/italian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Crea rapidamente un campo modulo PDF con C#. Scopri come aggiungere una + casella di testo al PDF e modificare il PDF per includere la casella di testo usando + Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: it +lastmod: 2026-08-14 +og_description: Crea campo modulo PDF con C#. Questo tutorial mostra come aggiungere + una casella di testo a un PDF e modificare un PDF per includere una casella di testo + usando Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Crea campo modulo PDF in C# – guida completa di programmazione +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Crea campo modulo PDF in C# – guida passo passo +url: /it/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crea campo modulo PDF in C# – guida passo‑passo + +Se hai bisogno di **creare campo modulo PDF** in un documento, questa guida ti accompagna attraverso l’intero processo. Vedrai esattamente come **aggiungere una casella di testo al PDF** alle pagine e come **modificare il PDF per includere una casella di testo** usando la libreria Aspose.PDF per .NET. + +Lavorare con i moduli PDF è una necessità comune per sistemi di fatturazione, sondaggi o qualsiasi flusso di lavoro che raccoglie input dall’utente. Alla fine di questo tutorial avrai uno snippet di codice riutilizzabile che crea un campo casella di testo completamente funzionale, lo posiziona dove desideri e salva il PDF aggiornato—tutto senza uscire dal tuo progetto C#. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +* .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.7+) +* Visual Studio 2022 o qualsiasi IDE che supporti C# +* Una licenza attiva di Aspose.PDF per .NET (la versione di prova gratuita è sufficiente per lo sviluppo) +* Un file PDF chiamato `input.pdf` collocato in una directory nota (il tutorial usa `YOUR_DIRECTORY` come segnaposto) + +> **Pro tip:** Se non hai ancora una licenza, puoi richiedere una chiave temporanea dal sito di Aspose; la libreria funziona in modalità valutazione senza modifiche al codice. + +## Come creare campo modulo PDF in C# (panoramica) + +1. Carica il documento PDF esistente. +2. Istanzia un `TextBoxField` e configura il suo nome e aspetto. +3. Aggiungi un’annotazione widget che definisce il rettangolo visivo nella pagina di destinazione. +4. Inserisci il campo nella collezione dei moduli del documento. +5. Salva il PDF modificato. + +Ogni passaggio è spiegato in dettaglio di seguito, con esempi di codice completi e la logica dietro le chiamate API. + +## Passo 1: Carica il documento PDF + +La prima operazione è leggere il PDF di origine. Aspose.PDF rappresenta un file PDF con la classe `Document`. Caricare il documento ti dà accesso alle sue pagine, alla collezione dei moduli e ad altre strutture. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Perché è importante:** +Il caricamento del file crea un modello in‑memoria del PDF, consentendoti di aggiungere, rimuovere o modificare oggetti senza corrompere il file originale. L’oggetto `Document` espone anche la proprietà `Form`, dove più avanti **aggiungerai una casella di testo al PDF**. + +## Passo 2: Crea un campo casella di testo + +Un campo casella di testo è un tipo di campo modulo che permette agli utenti di digitare testo libero. In Aspose.PDF lo crei istanziando `TextBoxField`, passando la pagina di destinazione e un rettangolo che definisce la dimensione iniziale del widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Perché è importante:** +* `PartialName` è la chiave che gli strumenti di elaborazione dei moduli (ad es. Adobe Acrobat, parser lato server) usano per recuperare il valore inserito. +* Il rettangolo passato qui definisce solo la dimensione *iniziale* del widget; potrai successivamente regolare la sua posizione visiva con un’annotazione widget (passo successivo). +* Impostare `DefaultAppearance` garantisce che il testo all’interno della casella venga renderizzato in modo coerente su tutti i visualizzatori. + +## Passo 3: Definisci l’annotazione widget visiva + +Un campo modulo può avere una o più **annotazioni widget** che controllano dove il campo appare su ciascuna pagina. Aggiungendo un widget puoi posizionare lo stesso campo logico in una posizione diversa o anche su più pagine. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Perché è importante:** +Il rettangolo del widget determina le coordinate sullo schermo che gli utenti vedono. Se salti questo passaggio, il campo potrebbe esistere nella struttura dati del PDF ma non sarà visibile all’utente finale. L’aggiunta del widget è il passaggio che realmente **aggiunge una casella di testo al PDF**. + +## Passo 4: Aggiungi il campo configurato al modulo del documento + +Ora che il `TextBoxField` è completamente configurato, devi registrarlo nella collezione dei moduli del PDF. Questo rende il campo parte del modulo interattivo e ne assicura il salvataggio. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Perché è importante:** +Senza aggiungere il campo a `pdfDocument.Form`, il visualizzatore PDF ignorerebbe l’annotazione widget e i dati del campo non verrebbero mai inviati. Questa riga finalizza l’operazione di **modificare il PDF per includere una casella di testo**. + +## Passo 5: Salva il PDF aggiornato + +Infine, scrivi le modifiche su disco. Puoi sovrascrivere il file originale o crearne uno nuovo; l’esempio salva in `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Quando apri `output.pdf` in Adobe Acrobat Reader, vedrai una casella di testo rettangolare etichettata “Comments” nella pagina 2. Gli utenti possono cliccare all’interno, digitare, e il testo inserito farà parte dei dati del modulo PDF. + +## Esempio completo funzionante + +Riunendo tutti i pezzi, ecco un programma completo, pronto per l’esecuzione. Copialo in un nuovo progetto console, sostituisci `YOUR_DIRECTORY` con un percorso di cartella reale e avvialo. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Output previsto:** +L’esecuzione del programma stampa due righe di conferma sulla console. L’apertura di `output.pdf` mostra una casella di testo nella pagina 2 dove l’utente può digitare commenti. Quando il modulo viene inviato (ad es. tramite il pulsante “Submit” di Adobe Acrobat), il nome campo `Comments` appare nei dati esportati in FDF o XFDF. + +## Varianti comuni e casi limite + +| Situazione | Come adattare il codice | +|-----------|-----------------------| +| **Aggiungere il campo a una pagina diversa** | Cambia `pdfDocument.Pages[1]` con l’indice della pagina desiderata (indice basato su `0`). | +| **Creare una casella di testo multilinea** | Imposta `textBox.Multiline = true;` prima di aggiungere il widget. | +| **Impostare un valore predefinito** | Assegna `textBox.Value = "Enter your comments here";`. | +| **Rendere il campo obbligatorio** | Imposta `textBox.Required = true;`. | +| **Posizionare il campo su più pagine** | Chiama `textBox.AddWidgetAnnotation` per ogni rettangolo aggiuntivo sulle pagine di destinazione. | +| **Usare un font personalizzato** | Carica il font con `FontRepository.AddFont("path/to/font.ttf")` e riferiscilo in `DefaultAppearance`. | + +**Pro tip:** Convalida sempre le coordinate del rettangolo rispetto alle dimensioni della pagina (`pdfDocument.Pages[1].Rect`). Se il widget si trova fuori dai bordi della pagina, i visualizzatori potrebbero ritagliarlo o nasconderlo. + +## Testare il campo modulo + +1. Apri `output.pdf` in Adobe Acrobat Reader. +2. Clicca all’interno della casella “Comments”; dovrebbe apparire il cursore. +3. Digita del testo e premi **Tab** o clicca altrove. +4. Scegli **File → Save As** per salvare il valore inserito. +5. (Facoltativo) Usa l’API `Form` di Aspose.PDF per estrarre il valore programmaticamente: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Questo snippet dimostra che il campo non è solo visibile, ma anche recuperabile via codice—essenziale per l’elaborazione lato server. + +## Conclusione + +Ora sai come **creare campo modulo PDF** in C# dall’inizio alla fine. Il tutorial ha coperto il caricamento di un PDF, la configurazione di un `TextBoxField`, l’aggiunta di un’annotazione widget, la registrazione del campo e il salvataggio del risultato. Con questi blocchi di costruzione potrai **aggiungere una casella di testo al PDF**, **modificare il PDF per includere una casella di testo** e estendere l’approccio ad altri tipi di campo come caselle di controllo, pulsanti radio o menu a discesa. + +Successivamente, esplora argomenti correlati come **estrarre dati dal modulo**, **appiattire i moduli PDF** o **stilizzare i campi con bordi e colori**. Ognuno di questi concetti si basa sulla stessa API di base che hai appena padroneggiato, permettendoti di creare PDF interattivi sofisticati interamente in C#. + +Buona programmazione, e sentiti libero di sperimentare con rettangoli, font e regole di validazione diversi per adattarli alle esigenze della tua applicazione! + +## Cosa dovresti imparare dopo? + +I tutorial seguenti trattano argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/programming-with-operators/_index.md b/pdf/italian/net/programming-with-operators/_index.md index 0bc8780b31..4e42cb95b4 100644 --- a/pdf/italian/net/programming-with-operators/_index.md +++ b/pdf/italian/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ tutorial "Programmazione con operatori" di Aspose.PDF per .NET ti guideranno att | [Disegna XForm sulla pagina](./draw-xform-on-page/) | Impara a disegnare XForms in PDF usando Aspose.PDF per .NET con questa guida completa passo dopo passo. | | [Operatori PDF](./pdf-operators/) | Guida passo passo all'utilizzo degli operatori PDF con Aspose.PDF per .NET. Aggiungi un'immagine a una pagina PDF e specificane la posizione. | | [Rimuovi oggetti grafici nel file PDF](./remove-graphics-objects/) Scopri come rimuovere oggetti grafici da un file PDF utilizzando Aspose.PDF per .NET in questa guida passo passo. Semplifica le tue attività di manipolazione PDF. | +| [Crea un dizionario PDF vuoto in C# con Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Guida passo passo per creare un dizionario PDF vuoto in C# utilizzando Aspose.Pdf. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/italian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..cd22699ba3 --- /dev/null +++ b/pdf/italian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Crea un dizionario PDF vuoto in C# usando Aspose.Pdf – scopri come aggiungere + uno stato grafico alla collezione ExtGState e modificare i PDF programmaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: it +lastmod: 2026-08-14 +og_description: Crea un dizionario PDF vuoto in C# con Aspose.Pdf. Segui questa guida + completa per aggiungere uno stato grafico personalizzato alla collezione ExtGState + di un PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Crea un dizionario PDF vuoto in C# – Guida passo‑passo a Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Crea un dizionario PDF vuoto in C# con Aspose.Pdf +url: /it/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Creare un dizionario PDF vuoto in C# con Aspose.Pdf + +Se hai bisogno di **creare oggetti dizionario PDF vuoti** mentre lavori con file PDF, questa guida ti mostra esattamente come farlo in C# usando la libreria Aspose.Pdf. Che tu stia costruendo uno stato grafico personalizzato, aggiungendo una nuova risorsa o preparando un modello per uso futuro, i passaggi seguenti ti forniscono una soluzione completa e pronta all'uso. + +Imparerai come caricare un PDF, accedere al dizionario delle risorse della prima pagina, costruire un nuovo `CosPdfDictionary` e inserirlo nella collezione `ExtGState`. Alla fine del tutorial avrai un `output.pdf` funzionante che contiene il dizionario appena creato. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +- .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.6+) +- Visual Studio 2022 o qualsiasi IDE C# tu preferisca +- Una licenza Aspose.Pdf per .NET (o una chiave di valutazione temporanea) +- Un PDF di esempio chiamato **input.pdf** posizionato in una cartella di tua scelta (il percorso della cartella sarà usato come `dataDir`) + +Non sono richiesti pacchetti NuGet aggiuntivi oltre a `Aspose.Pdf`. + +## Passo 1: Configurare il progetto e fare riferimento ad Aspose.Pdf + +1. Crea un nuovo progetto **Console App** in Visual Studio. +2. Apri il **NuGet Package Manager** e installa `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Aggiungi le seguenti direttive `using` all'inizio di `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Perché questi namespace?* `Aspose.Pdf` contiene la classe core `Document`, mentre `Aspose.Pdf.Operators.Gfx` fornisce `CosPdfDictionary`, `CosPdfNumber` e altri oggetti PDF a basso livello necessari per **creare dizionari PDF vuoti**. + +## Passo 2: Caricare il PDF di origine + +La prima operazione è caricare il file PDF esistente in un'istanza `Document`. Questo ti dà accesso a tutte le pagine, risorse e dizionari a basso livello. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Spiegazione*: `Document` legge il file in memoria e prepara le strutture interne. L'istruzione `using` garantisce che il handle del file venga rilasciato dopo aver terminato l'elaborazione. + +## Passo 3: Accedere al dizionario delle risorse della prima pagina + +Ogni pagina PDF ha un dizionario **Resources** che raggruppa font, immagini, oggetti ExtGState e altre risorse condivise. Per inserire un nuovo stato grafico dobbiamo modificare questo dizionario. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` è una classe di supporto che ti permette di trattare un dizionario PDF come un `Dictionary` di C#. + +## Passo 4: Recuperare (o creare) la collezione ExtGState + +`ExtGState` contiene oggetti di stato grafico come opacità, modalità di fusione e larghezza della linea. Se il PDF di origine contiene già una voce `ExtGState`, la riutilizziamo; altrimenti creiamo un nuovo dizionario vuoto. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Perché questo controllo?* Alcuni PDF omettono completamente la voce `ExtGState`. Gestendo entrambi i casi, il tutorial rimane robusto per qualsiasi file di input. + +## Passo 5: **Creare un dizionario PDF vuoto** per un nuovo stato grafico + +Ora creiamo effettivamente gli oggetti **dizionario PDF vuoto** che definiscono i parametri dello stato grafico. Il dizionario parte vuoto e aggiungiamo le chiavi richieste: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Cosa fa ogni voce + +| Chiave | Tipo | Significato | +|--------|------|-------------| +| **CA** | `CosPdfNumber` | Opacità del tratto (intervallo 0‑1). | +| **ca** | `CosPdfNumber` | Opacità del riempimento (intervallo 0‑1). | +| **BM** | `CosPdfName` | Modalità di fusione; `"Normal"` è la più comune. | + +Poiché abbiamo iniziato con un **dizionario PDF vuoto**, abbiamo il pieno controllo su quali voci vengono aggiunte. Puoi estendere questo dizionario con ulteriori parametri di stato grafico come `LW` (larghezza linea) o `LC` (cap line) quando necessario. + +## Passo 6: Inserire il nuovo stato grafico in ExtGState + +Il dizionario `ExtGState` funziona come una mappa dove ogni voce è identificata da un nome (es. `GS0`, `GS1`). Aggiungiamo il nostro dizionario appena creato sotto una chiave unica. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Se prevedi di aggiungere più stati, incrementa il suffisso (`GS1`, `GS2`, …) per evitare collisioni di nomi. + +## Passo 7: Salvare il PDF modificato + +Infine, scrivi le modifiche su disco. Il metodo `Save` serializza automaticamente i dizionari aggiornati. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Apri `output.pdf` in qualsiasi visualizzatore PDF e ispeziona la voce **Resources → ExtGState** (la maggior parte dei visualizzatori nasconde questa sezione, ma strumenti come Adobe Acrobat Preflight o PDF‑Tron possono rivelarla). Dovresti vedere una voce `GS0` contenente i valori di opacità e modalità di fusione che hai definito. + +## Esempio completo funzionante + +Riunendo tutti i pezzi, ecco il programma completo che puoi copiare‑incollare in `Program.cs` e eseguire: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Output previsto** – La console stampa una riga di conferma, e `output.pdf` contiene la nuova voce `GS0` sotto `ExtGState`. Quando renderizzi una pagina che fa riferimento a `GS0` (ad esempio tramite l'operatore di flusso di contenuto `gs`), i tratti saranno completamente opachi mentre i riempimenti saranno trasparenti al 50 %. + +## Domande comuni e gestione dei casi limite + +| Domanda | Risposta | +|----------|----------| +| *E se il PDF ha più pagine?* | L'esempio si rivolge alla prima pagina (`Pages[1]`). Per influenzare tutte le pagine, itera su `pdfDocument.Pages` e ripeti i passi 3‑5 per le risorse di ciascuna pagina. | +| *Posso aggiungere il dizionario a una pagina che ha già una voce ExtGState chiamata “GS0”?* | Sì, ma devi usare una chiave diversa (`GS1`, `GS2`, …) per non sovrascrivere la voce esistente. | +| *È sicuro modificare il dizionario dopo il salvataggio?* | Dopo aver chiamato `Save`, la rappresentazione in memoria è separata dal file. Puoi continuare a modificare l'oggetto `Document` e chiamare nuovamente `Save` se necessario. | +| *Ho bisogno di una licenza per Aspose.Pdf per usare ` | *(il contenuto originale è troncato; mantenere così)* | + +## 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 con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità aggiuntive dell'API e a esplorare approcci alternativi nei tuoi progetti. + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/programming-with-security-and-signatures/_index.md b/pdf/italian/net/programming-with-security-and-signatures/_index.md index 50714845b9..4b47a1a319 100644 --- a/pdf/italian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/italian/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Questo tutorial offre una panoramica dettagliata di metodi e tecniche per garant | [Verifica le firme PDF in C# – Come leggere i file PDF firmati](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Scopri come leggere e analizzare le firme digitali nei PDF usando C# e Aspose.PDF per .NET. | | [Come riparare i file PDF – Guida completa C# con Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Scopri come riparare i PDF danneggiati con Aspose.PDF per .NET usando C#. Guida passo passo per recuperare i contenuti. | | [Verifica firma PDF in C# – Guida completa di programmazione](./verify-pdf-signature-in-c-complete-programming-guide/) | Scopri come verificare le firme PDF usando C# e Aspose.PDF, con esempi completi e best practice. | +| [Crea opzioni di firma in C# – guida completa alla firma digitale](./create-signature-options-in-c-full-guide-to-digital-signing/) | Scopri come creare opzioni di firma personalizzate in C# con Aspose.PDF per .NET, guida passo passo completa. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/italian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..febb5dcb5c --- /dev/null +++ b/pdf/italian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Crea opzioni di firma in C# per applicare la firma digitale. Scopri come + configurare la firma, implementare una funzione hash personalizzata e firmare i + documenti programmaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: it +lastmod: 2026-08-14 +og_description: Crea opzioni di firma in C# e applica una firma digitale. Questo tutorial + ti guida nella configurazione della firma, nell'aggiunta di una funzione hash personalizzata + e nella firma di un documento. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Crea opzioni di firma in C# – guida passo‑passo alla firma digitale +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Crea opzioni di firma in C# – guida completa alla firma digitale +url: /it/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crea opzioni di firma in C# – guida completa alla firma digitale + +Crea opzioni di firma in C# per configurare un flusso di lavoro di firma digitale. Questo tutorial mostra come applicare una firma digitale, implementare una funzione hash personalizzata e firmare un documento utilizzando la classe `SignatureOptions`. Se hai mai dovuto firmare un PDF, XML o qualsiasi payload binario da un'applicazione .NET, i passaggi seguenti ti forniscono una soluzione pronta all'uso. + +Imparerai a: + +* configurare `SignatureOptions` con un algoritmo hash personalizzato, +* chiamare correttamente il metodo di firma, +* verificare che la firma sia stata applicata, +* evitare le insidie comuni nella configurazione della firma. + +Le uniche prerequisiti sono un SDK .NET recente (≥ .NET 6) e una libreria di firma che espone `SignatureOptions` (ad esempio, **GroupDocs.Signature**, **Aspose.Signature**, o un'API simile). Non sono necessari strumenti esterni. + +--- + +## Prerequisiti + +| Requisito | Perché è importante | +|-------------|----------------| +| .NET 6 SDK or later | Fornisce le moderne funzionalità del linguaggio utilizzate negli esempi. | +| A signing‑library NuGet package (e.g., `GroupDocs.Signature`) | Fornisce il tipo `SignatureOptions` e il metodo di estensione `Sign`. | +| Access to a private key or certificate | Necessario per generare una firma digitale verificabile. | + +Installa la libreria con la CLI standard: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Passo 1: Crea opzioni di firma + +Il primo passo è istanziare `SignatureOptions` e impostare le proprietà che controllano il processo di firma. Questo oggetto indica alla libreria *cosa* firmare e *come* farlo. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Perché è importante:** `SignatureOptions` funge da contratto tra il tuo codice e il motore di firma. Configurandolo in anticipo eviti boilerplate ripetuto quando firmi più documenti. + +--- + +## Passo 2: Implementa una funzione hash personalizzata + +Una *funzione hash personalizzata* ti dà il pieno controllo sul digest che l'algoritmo di firma firma. Questo è utile quando l'hash predefinito (SHA‑256) non soddisfa i requisiti di conformità o quando è necessario hashare una parte del documento. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Perché è importante:** Assegnando `CustomSignHash`, sostituisci il passaggio di hashing interno della libreria con `MyHash`. Il motore di firma ora firmerà i byte restituiti dalla tua funzione, garantendo la conformità a qualsiasi politica personalizzata. + +--- + +## Passo 3: Carica il documento e applica la firma digitale + +Con le opzioni pronte, ora puoi aprire il file di destinazione e chiamare il metodo di firma. Il metodo `Sign` è fornito dalla libreria e utilizza le `SignatureOptions` configurate. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Perché è importante:** La chiamata a `Sign` esegue tre azioni internamente: + +1. **Calcolo hash** – ora delegato alla tua funzione hash personalizzata. +2. **Generazione firma** – usando la chiave privata fornita nella configurazione della libreria. +3. **Incorporamento** – la firma generata viene allegata al file di output. + +Se qualche passaggio fallisce, il metodo restituisce `false`, consentendoti di gestire l'errore in modo elegante. + +--- + +## Passo 4: Verifica che il documento sia firmato + +Una rapida verifica conferma che la firma sia stata applicata correttamente. La maggior parte delle librerie espone un metodo `Verify` che controlla l'integrità del file firmato. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Perché è importante:** La verifica assicura che il documento firmato non sia stato manomesso dopo la firma e che l'hash personalizzato abbia prodotto un digest compatibile. + +--- + +## Come configurare la firma per diversi tipi di file + +Lo stesso oggetto `SignatureOptions` può essere riutilizzato per PDF, documenti Word, immagini o binari grezzi. L'unica modifica necessaria è la classe di opzioni specifica (ad es., `PdfSignatureOptions`, `WordSignatureOptions`). Ecco un rapido esempio per un'immagine JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Perché è importante:** Comprendere come *configurare la firma* per ogni formato ti consente di estendere lo stesso codice a più tipi di documento senza riscrivere la logica di hashing. + +--- + +## Problemi comuni e migliori pratiche + +| Problema | Correzione consigliata | +|---------|-----------------| +| Dimenticare di impostare `CustomSignHash` dopo aver creato `SignatureOptions` | Assegnare il delegato subito dopo aver costruito l'oggetto delle opzioni. | +| Usare un algoritmo hash non supportato dal certificato di firma | Verificare che l'uso della chiave del certificato corrisponda alla lunghezza dell'hash (ad es., RSA‑2048 con SHA‑512). | +| Trascurare la necessità di rilasciare gli oggetti `Signature` | Avvolgere l'istanza `Signature` in un blocco `using` per rilasciare i handle dei file. | +| Salvare il file firmato sovrascrivendo l'originale | Scrivere sempre su un nuovo percorso file (`outputPath`) per preservare il documento originale. | + +--- + +## Esempio completo funzionante + +Di seguito è riportato un programma autonomo che mette insieme tutti i componenti. Copialo in un nuovo progetto console e eseguilo; la console segnalerà successo o fallimento. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Output previsto** + +``` +Signature verified successfully. +``` + +Se la console stampa “Signing failed.” o “Signature verification failed.”, ricontrolla la configurazione del certificato e assicurati che l'hash personalizzato restituisca un array di byte della dimensione prevista. + +--- + +## Conclusione + +Ora sai come **creare opzioni di firma** in C#, allegare una **funzione hash personalizzata** e **applicare la firma digitale** a qualsiasi documento supportato. Il tutorial ha coperto l'intero ciclo di vita: configurare le opzioni, firmare il file e verificare il risultato. Riutilizzando la stessa istanza di `SignatureOptions` puoi anche **configurare la firma** per immagini, file Word o binari grezzi. + +--- + +## Cosa fare dopo? + +* Esplora proprietà aggiuntive di `SignatureOptions` come timbri visivi, server di timestamp e catene di certificati – questi sono allineati con la parola chiave **apply digital signature**. +* Sperimenta con altri algoritmi hash (ad es., Blake2b) sostituendo l'implementazione all'interno di `MyHash`. +* Integra il flusso di firma in un'API web per abilitare la firma di documenti al volo – un'estensione naturale di **how to sign document** in un'architettura orientata ai servizi. + +Sentiti libero di adattare il codice alle tue politiche di sicurezza e condividi la tua esperienza nei commenti. Buona firma! + +## 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 cambiare la lingua della firma PDF con Aspose.PDF per .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Tutorial di firma digitale Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial di firma digitale Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/programming-with-stamps-and-watermarks/_index.md b/pdf/italian/net/programming-with-stamps-and-watermarks/_index.md index cba26234c3..3d33981e2c 100644 --- a/pdf/italian/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/italian/net/programming-with-stamps-and-watermarks/_index.md @@ -39,7 +39,8 @@ I tutorial di Aspose.PDF "Programmazione con timbri e filigrane" per .NET ti gui | [Tabella nella sezione Intestazione Piè di pagina](./table-in-header-footer-section/) | Scopri come aggiungere facilmente testo al piè di pagina di un file PDF utilizzando Aspose.PDF per .NET. Guida passo passo inclusa per un'integrazione perfetta. | | [Testo nel piè di pagina del file PDF](./text-in-footer/) | Scopri come aggiungere testo nel piè di pagina di un file PDF con Aspose.PDF per .NET. | | [Testo nell'intestazione del file PDF](./text-in-header/) | Impara ad aggiungere intestazioni di testo ai PDF utilizzando Aspose.PDF per .NET con questo tutorial passo passo. Migliora i tuoi documenti in modo efficiente ed efficace. | -| [Aggiungi numerazione Bates PDF in C# – Guida completa](./add-bates-numbering-pdf-in-c-complete-guide/) | Scopri come aggiungere la numerazione Bates ai PDF usando Aspose.PDF per .NET con esempi di codice dettagliati. | +| [Aggiungi numerazione Bates PDF in C# – Guida completa](./add-bates-numbering-pdf-in-c-complete-guide/) Scopri come aggiungere la numerazione Bates ai PDF usando Aspose.PDF per .NET con esempi di codice dettagliati. | +| [Come impostare le opzioni di numerazione Bates in C# – guida completa](./how-to-set-bates-numbering-options-in-c-complete-guide/) Scopri come configurare le opzioni di numerazione Bates nei PDF con Aspose.PDF per .NET, includendo esempi di codice. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/italian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..e9955abf30 --- /dev/null +++ b/pdf/italian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Come impostare le opzioni di numerazione Bates in C# usando GroupDocs. + Segui questo tutorial passo passo per aggiungere prefissi personalizzati e numeri + di avvio durante la conversione da Word a PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: it +lastmod: 2026-08-14 +og_description: Come impostare rapidamente le opzioni di numerazione Bates in C#. + Questa guida ti mostra come aggiungere prefissi personalizzati e numeri iniziali + durante la conversione da Word a PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Come impostare le opzioni di numerazione Bates in C# – tutorial passo passo +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Come impostare le opzioni di numerazione Bates in C# – guida completa +url: /it/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come impostare le opzioni di numerazione Bates in C# – guida completa + +Se hai bisogno di **come impostare le opzioni di numerazione Bates** in C#, questa guida ti accompagna passo passo. Imparerai a configurare il numero di partenza, aggiungere un prefisso e applicare la numerazione durante la conversione di un documento Word in PDF usando le API GroupDocs. + +L'elaborazione dei documenti spesso richiede identificatori univoci su ogni pagina per scopi legali o di archiviazione. Alla fine di questo tutorial avrai uno snippet riutilizzabile da inserire in qualsiasi progetto .NET, sia che tu stia costruendo uno strumento di supporto legale o un generatore di report automatizzato. Non servono strumenti esterni—solo la libreria GroupDocs.Conversion e poche righe di C#. + +## Cosa ti serve + +Prima di iniziare, assicurati di avere: + +* .NET 6.0 SDK o versioni successive installate +* Visual Studio 2022 (o qualsiasi IDE che supporti .NET) +* Una licenza valida di GroupDocs.Conversion (la versione di prova gratuita è sufficiente per i test) +* Un documento Word di esempio (`input.docx`) che desideri numerare + +Questi prerequisiti garantiscono che il codice funzioni senza configurazioni aggiuntive. + +## Come impostare le opzioni di numerazione Bates – panoramica + +Il cuore di **come impostare le opzioni di numerazione Bates** risiede in tre oggetti: + +1. `Document` – carica il file sorgente. +2. `BatesNumberingOptions` – contiene il numero di partenza, il prefisso e altri dettagli di formattazione. +3. `AddBatesNumbering` – il metodo che inserisce la numerazione in ogni pagina. + +Comprendere perché esiste ciascun elemento ti aiuta ad adattare la soluzione a scenari più complessi, come font personalizzati o numerazione multilingue. + +## Passo 1: Installa il pacchetto NuGet GroupDocs.Conversion + +Apri un terminale nella cartella della tua soluzione ed esegui: + +```bash +dotnet add package GroupDocs.Conversion +``` + +Le **GroupDocs API** forniscono la classe `Document` e il metodo di estensione `AddBatesNumbering` usati più avanti nel tutorial. + +## Passo 2: Carica il documento sorgente + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Perché questo passo?* +Il caricamento del file crea una rappresentazione in memoria che il motore di conversione può manipolare. Senza un'istanza di `Document` non è possibile applicare la numerazione Bates né altre trasformazioni. + +## Passo 3: Crea le opzioni di numerazione Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Perché questo passo?* +`BatesNumberingOptions` racchiude tutte le impostazioni necessarie quando **si impostano le opzioni di numerazione Bates**. Modificando `StartNumber` e `Prefix` puoi allineare l'output al tuo sistema di gestione dei casi. La proprietà `Position` controlla il posizionamento visivo, spesso requisito di conformità. + +## Passo 4: Applica la numerazione Bates al documento + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Il metodo `AddBatesNumbering` scorre ogni pagina del `Document` caricato e inserisce la stringa configurata. Poiché il metodo opera sulla rappresentazione in memoria, puoi concatenare ulteriori passaggi di elaborazione (ad esempio, l'aggiunta di filigrane) prima del salvataggio. + +## Passo 5: Converti e salva il risultato come PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Perché questo passo?* +Il salvataggio in PDF è un formato finale comune per i documenti legali. L'oggetto `PdfConvertOptions` consente di perfezionare l'output, ma non è obbligatorio per la numerazione di base. La chiamata `Save` scrive il PDF completamente numerato su disco. + +## Esempio completo, eseguibile + +Mettendo insieme tutti i passaggi, ecco un'applicazione console autonoma che puoi compilare ed eseguire: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Output previsto** + +L'esecuzione del programma crea `output.pdf` in cui ogni pagina mostra un'etichetta come `CASE-1000`, `CASE-1001`, ecc., posizionata nel piè di pagina destro. Apri il PDF con qualsiasi visualizzatore per verificare che i numeri compaiano correttamente. + +## Problemi comuni e migliori pratiche + +| Problema | Perché si verifica | Come evitarlo | +|----------|--------------------|---------------| +| **I percorsi relativi causano `FileNotFoundException`** | La directory di lavoro di un'app console può differire da quella di Visual Studio. | Usa percorsi assoluti o `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **La numerazione si sovrappone ai piè di pagina esistenti** | Se il documento sorgente contiene già contenuti nell'area del piè di pagina scelta, il nuovo numero può rimanere nascosto. | Scegli una `Position` diversa (ad esempio `HeaderLeft`) o modifica il modello di origine. | +| **Documenti di grandi dimensioni risultano lenti** | La numerazione Bates itera su ogni pagina; l'uso di memoria cresce con le dimensioni del file. | Processa il documento a blocchi usando `Document.Split` se superi le 500 pagine. | +| **Scadenza della licenza** | La versione di prova di GroupDocs scade dopo 30 giorni, generando un'eccezione su `AddBatesNumbering`. | Applica una chiave di licenza valida prima di caricare il documento: `License license = new License(); license.SetLicense("license.lic");`. | + +**Consiglio professionale:** se ti serve un formato numerico diverso per caso (ad esempio `2023-CASE-001`), genera il prefisso in modo dinamico prima di creare `BatesNumberingOptions`. + +## Estendere la soluzione + +Lo stesso approccio **Bates numbering C#** funziona con altri formati sorgente come `.txt`, `.html` o anche immagini. Basta cambiare l'estensione del file quando costruisci l'oggetto `Document`, e il motore di conversione gestirà il resto. + +Puoi anche combinare **document conversion C#** con OCR per PDF scansionati: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusione + +Ora sai **come impostare le opzioni di numerazione Bates** in C# dall'inizio alla fine. Creando un oggetto `BatesNumberingOptions`, applicandolo con `AddBatesNumbering` e salvando il risultato in PDF, puoi automatizzare la produzione di documenti legalmente conformi e univocamente identificati. + +Da qui puoi esplorare argomenti correlati come **C# PDF generation**, **document conversion C#**, o funzionalità avanzate dell'**GroupDocs API** come filigrane e firme digitali. Sperimenta con prefissi, posizioni e formati numerici diversi per adattarli al tuo flusso di lavoro. + +Buon coding! + +## Cosa dovresti imparare dopo? + +I tutorial seguenti trattano 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 e a esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Aggiungi numerazione Bates PDF in C# – Guida completa](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Come aggiungere e personalizzare i numeri di pagina nei PDF usando Aspose.PDF per .NET | Guida alla manipolazione dei documenti](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Come aggiungere un piè di pagina con timbro di testo nei PDF usando Aspose.PDF per .NET: Guida passo‑a‑passo](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/annotations/_index.md b/pdf/japanese/net/annotations/_index.md index d35b541c27..231ae939fc 100644 --- a/pdf/japanese/net/annotations/_index.md +++ b/pdf/japanese/net/annotations/_index.md @@ -35,6 +35,7 @@ Aspose.PDF for .NET を使用して PDF ドキュメント内の注釈を操作 | [テキスト注釈の書式を自由に設定](./setfreetextannotationformatting/) このステップバイステップ ガイドでは、Aspose.PDF for .NET を使用して PDF ドキュメントにフリー テキスト注釈の書式を設定する方法を学習します。 | | [単語を消す](./strikeoutwords/) Aspose.PDF for .NET を使ってPDF内の単語に取り消し線を引く方法を、この包括的なステップバイステップガイドで学びましょう。ドキュメント編集スキルを向上させましょう。 | | [フリーテキストPDF注釈の更新](./updatefreetextannotation/) このステップバイステップ ガイドでは、Aspose.PDF for .NET を使用して PDF ドキュメント内のフリー テキスト注釈を更新する方法を学習します。 | +| [PDF に矩形を描く – ステップバイステップ C# ガイド](./draw-rectangle-on-pdf-step-by-step-c-guide/) Aspose.PDF for .NET を使用して、PDF に矩形注釈を描く方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/japanese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..e2da110f7e --- /dev/null +++ b/pdf/japanese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: C# を使って PDF に素早く矩形を描く。数行のコードで矩形のサイズを定義し、PDF ページに図形を追加する方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: ja +lastmod: 2026-08-14 +og_description: C#でPDFに数秒で矩形を描く。このガイドでは、矩形のサイズを定義し、シェイプを追加し、信頼性の高いPDFグラフィックのためにページ境界を確認する方法を示します。 +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: PDF上に矩形を描く – 完全なC#チュートリアル +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: PDFに矩形を描く – ステップバイステップ C# ガイド +url: /ja/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF に矩形を描く – 完全な C# チュートリアル + +C# を使用して **draw rectangle on pdf** を行う必要がある場合、このガイドでは簡潔で本番環境でも使えるソリューションを示します。**how to define rectangle dimensions** の方法を正確に確認し、形状がページに収まることを検証し、単一のメソッド呼び出しでページに追加する手順が分かります。 + +このチュートリアルは PDF ドキュメントの作成から矩形の描画までを網羅しているため、コードをコピー&ペーストしてすぐに結果を確認できます。外部ドキュメントは不要です—以下の手順だけで完了します。 + +## Prerequisites + +開始する前に、以下が揃っていることを確認してください。 + +* .NET 6.0 以降(コードは .NET Framework 4.7+ でも動作します) +* **Aspose.PDF for .NET** NuGet パッケージ (`Install-Package Aspose.PDF`) +* C# 文法の基本的な理解 +* Visual Studio や VS Code などの IDE + +> **Pro tip:** 無料の評価ライセンスを使用すれば、少しの透かしが入りますがすべての機能をテストできます。 + +## How to draw rectangle on PDF with C# + +タスクの核心は `RectangleShape` を作成し、サイズとストロークを設定し、`Page` に貼り付けることです。以下の H2 見出しは主要キーワードを含んでおり、SEO 要件を満たしています。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Explanation of each step + +| Step | Why it matters | +|------|----------------| +| **1️⃣ Create a new PDF document** | ページとグラフィックを保持するコンテナを初期化します。 | +| **2️⃣ Add a blank page** | 形状はドキュメントではなくページに付随するため、`Page` オブジェクトが必要です。 | +| **3️⃣ Define the rectangle bounds** | ここで **how to define rectangle dimensions** を行います。`Rectangle` コンストラクタは `x`, `y`, `width`, `height`(単位はポイント、1 pt = 1/72 in)を受け取ります。 | +| **4️⃣ Create the rectangle shape** | `RectangleShape` は Aspose の矩形描画クラスです。`StrokeColor` を設定すると輪郭が描かれ、`FillColor` を設定すれば塗りつぶしが可能です。 | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` は矩形がページサイズを超えている場合に例外をスローし、PDF の破損を防ぎます。 | +| **6️⃣ Add the shape to the page** | 形状がページのコンテンツストリームに組み込まれます。 | +| **7️⃣ Save the PDF** | 任意の PDF ビューアで開けるファイルとしてドキュメントを保存します。 | + +結果として生成される `RectangleDemo.pdf` には、ページ左上隅に幅 500 pt、高さ 700 pt の黒い矩形が配置されます。 + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*Image alt text: draw rectangle on pdf example showing a black rectangle in the upper left corner of a PDF page.* + +## How to define rectangle dimensions for different page sizes + +上記のスニペットは固定値(`500 x 700`)を使用していますが、実際のアプリケーションではページの幅・高さに合わせて矩形を動的に調整する必要があります。 + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Key points:** + +* `page.PageInfo.Width` と `Height` を使用して実際のページサイズを取得します。 +* `0.8f` などの係数で掛け算すると、ページのパーセンテージとして寸法を表現できます。 +* 矩形サイズをページサイズから引き、残りを半分にすることで中央寄せが実現できます。 + +## Common pitfalls and how to avoid them + +| Pitfall | Why it happens | Fix | +|---------|----------------|-----| +| Rectangle extends beyond the page | ハードコードされた寸法がページサイズを超えている。 | 形状を追加する **前に** `page.CheckShapeBoundary` を呼び出し、例外が出たら寸法を調整する。 | +| Stroke not visible | `StrokeColor` がデフォルト(`Color.Empty`)のまま。 | 明示的に `StrokeColor` を設定する(例: `Color.Black`)。 | +| Rectangle appears off‑screen | PDF 空間では座標系の原点が左下にあるが、画面座標系(左上基準)を使用したため。 | 原点が左下であることを意識し、`y` を `pageHeight - desiredY` のように計算する。 | +| Unexpected line thickness | デフォルトの線幅が印刷には薄すぎる。 | `rectangleShape.LineWidth = 2;` で線幅を増やす。 | + +## Extending the example + +**draw rectangle on pdf** ができたら、他の形状も簡単に追加できます。 + +* **EllipseShape** – 円や楕円を描く。 +* **PolygonShape** – 任意の多角形を描く。 +* **TextFragment** – 矩形にラベルを付ける。 + +すべての形状は同じワークフローです:境界を定義し、外観を設定し、境界チェックを行い、ページに追加する。 + +## Complete, runnable program + +以下は基本的な矩形と動的サイズ設定の例を組み合わせたフルプログラムです。新しいコンソールプロジェクトに貼り付け、`Aspose.PDF` NuGet パッケージを復元して実行してください。 + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Expected output:** +`CombinedRectangles.pdf` を開くと、左下隅に黒い矩形、中央に濃い青色の枠線と薄い黄色の塗りつぶしが施された矩形が表示されます。どちらもページ余白を考慮しています。 + +## Conclusion + +これで C# を使って **draw rectangle on pdf** を行う方法と、固定レイアウトとレスポンシブレイアウトの両方で **how to define rectangle dimensions** を正確に指定する方法が分かりました。Aspose.PDF の `RectangleShape`、境界チェック、シンプルな算術演算を組み合わせるだけで、任意のページサイズに対応できます。 + +次に試すべきこと: + +* **塗りつぶしカラー** と **線スタイル**(破線、点線)を追加する – 二次キーワード: how to define rectangle dimensions with style. +* 複数の形状を単一の `Page` に組み合わせてチャートやフォームを作成する。 +* PDF をディスクに保存する代わりにストリームへエクスポートし、Web API で返す。 + +さまざまなサイズ、色、位置で実験し、.NET アプリケーションにおける PDF グラフィックのマスターを目指してください。Happy coding! + +## What Should You Learn Next? + +以下のチュートリアルは、本ガイドで示したテクニックを応用できる関連トピックを扱っています。各リソースには完全なコード例とステップバイステップの解説が含まれており、API の追加機能を習得したり、代替実装アプローチを自分のプロジェクトで試したりするのに役立ちます。 + +- [Aspose.PDF for .NET を使用した PDF のカスタマイズ方法: ページ余白の設定と線の描画](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Aspose.PDF for .NET を使用した PDF へのページスタンプの追加方法: 完全ガイド](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Aspose.PDF for .NET を使用した PDF のページ番号スタンプの追加方法 | ウォーターマークと背景](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/conversion-export/_index.md b/pdf/japanese/net/conversion-export/_index.md index 3e75e99bce..8d96f223d9 100644 --- a/pdf/japanese/net/conversion-export/_index.md +++ b/pdf/japanese/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Aspose.PDF for .NET を使用して PDF ドキュメントを TIFF 画像に変 ### [Aspose を使用して PDF を保存する方法 – ステップバイステップ ガイド](./how-to-save-pdf-with-aspose-step-by-step-guide/) Aspose を使って PDF を保存する手順を詳しく解説し、コード例とベストプラクティスを紹介します。 +### [C# で Aspose.PDF を使用して PDF を HTML として保存し、PDF/X‑4 に変換する](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Aspose.PDF を使い、PDF を HTML に保存し、さらに PDF/X‑4 形式に変換する方法を解説します。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/japanese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..e46cba0852 --- /dev/null +++ b/pdf/japanese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,289 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.PDF for C# を使用して PDF を HTML として保存し、PDF を PDF/X‑4 に変換します。ステップバイステップのコードで + HTML エクスポート、署名の一覧表示、グラフィックスステートの編集を示します。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: ja +lastmod: 2026-08-14 +og_description: Aspose.PDF for C# を使用して PDF を HTML に保存し、PDF を PDF/X‑4 に変換します。この完全ガイドに従って、HTML + のエクスポート、署名の一覧表示、グラフィックス状態の編集を行ってください。 +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Aspose.PDFでPDFをHTMLとして保存し、PDF/X‑4に変換する – C# ガイド +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: C#でAspose.PDFを使用してPDFをHTMLとして保存し、PDF/X‑4に変換する +url: /ja/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF を HTML として保存し、Aspose.PDF を使用して C# で PDF/X‑4 に変換する + +If you need to **save PDF as HTML**, Aspose.Pdf makes the process straightforward. This tutorial also shows how to **convert PDF to PDF/X‑4**, list signature fields, and add a custom ExtGState, giving you a full end‑to‑end workflow. + +PDF を **HTML として保存** する必要がある場合、Aspose.Pdf がプロセスをシンプルにします。このチュートリアルでは、**PDF を PDF/X‑4 に変換** する方法、署名フィールドの一覧取得、カスタム ExtGState の追加方法も示し、エンドツーエンドのワークフローを提供します。 + +You’ll learn how to: + +* ラスタ画像をスキップしながら、PDF をクリーンな HTML にエクスポートします。 +* 印刷用出力のために、PDF ドキュメントを PDF/X‑4 標準に変換します。 +* PDF 内のすべての署名フィールドを列挙します。 +* 最初のページにカスタムグラフィックスステート(ExtGState)を挿入します。 + +All code runs on .NET 6 or later and requires the Aspose.Pdf for .NET NuGet package. + +すべてのコードは .NET 6 以降で実行され、Aspose.Pdf for .NET の NuGet パッケージが必要です。 + +## 前提条件 + +| 要件 | 理由 | +|------|------| +| .NET 6 SDK 以上 | C# サンプルのランタイムを提供します。 | +| Visual Studio 2022(または任意の C# IDE) | 簡単な編集とデバッグを可能にします。 | +| Aspose.Pdf for .NET(v23.12 以上) | チュートリアルで使用される `Document`、`PdfFormatConversionOptions`、`HtmlSaveOptions` クラスを提供します。 | +| サンプル PDF ファイル(`sample.pdf`) | 処理対象となるソースドキュメントです。 | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## ソリューションの概要 + +The program performs six logical steps: + +プログラムは 6 つの論理的ステップを実行します: + +1. ソース PDF をロードします。 +2. すべての署名フィールド名を一覧表示します。 +3. **PDF を PDF/X‑4 に変換**し、結果を保存します。 +4. ラスタ画像をスキップしながら **PDF を HTML として保存** します。 +5. 最初のページにカスタム ExtGState(グラフィックスステート)を追加します。 +6. 新しいグラフィックスステートを含むように変更された PDF を保存します。 + +Each step is explained below, with complete code and the reasoning behind the choices. + +各ステップは以下で説明されており、完全なコードと選択の背後にある理由が示されています。 + +## ステップ 1: PDF ドキュメントのロード + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` は PDF 全体を表します。一度ロードすれば、後続のすべての操作で同じオブジェクトを再利用でき、I/O のオーバーヘッドが削減されます。 + +## ステップ 2: すべての署名フィールド名を一覧表示 + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: 署名フィールド名を把握しておくことは、後でデジタル署名を検証、削除、または置換する必要がある場合に不可欠です。`Signatures` コレクションはフィールドの高速な読み取り専用ビューを提供します。 + +## ステップ 3: PDF を PDF/X‑4 に変換 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**重要ポイント** + +* `PdfStandard.PdfX4` は、必要なすべてのリソース(フォント、カラープロファイル)を埋め込み、PDF/X‑4 の制約を強制するよう Aspose.Pdf に指示します。 +* 変換はメモリ内で実行され、最終ファイルのみがディスクに書き込まれるため、処理が高速です。 + +> **プロのコツ:** 下流のワークフローがコンプライアンスに厳しい場合は、PDF/X‑4 バリデータ(例: Adobe Preflight)で出力を検証してください。 + +## ステップ 4: ラスタ画像をスキップしながら PDF を HTML として保存 + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**このようにしたい理由**: HTML 出力はウェブプレビューやコンテンツインデックス作成に便利です。ラスタ画像をスキップ(`SkipRasterImages = true`)することで、HTML が軽量化され、特に元の PDF に高解像度のスキャンが含まれる場合に読み込み時間が改善されます。 + +## ステップ 5: 最初のページにカスタム ExtGState を追加 + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: **ExtGState** オブジェクトは透明度、ブレンドモード、その他のグラフィックパラメータを制御します。`GS0` を追加することで、後でコンテンツストリーム内でこの状態を参照できます(例: 半透明オーバーレイ用)。Aspose.Pdf が ExtGState 作成用の高レベルラッパーを提供していないため、コードは低レベルの COS API を使用しています。 + +## ステップ 6: 新しい ExtGState を含むように変更された PDF を保存 + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +The final file (`sample_with_extgstate.pdf`) contains: + +最終ファイル(`sample_with_extgstate.pdf`)には以下が含まれます: + +* すべての元のページとコンテンツ。 +* PDF/X‑4 に準拠したバージョン(`sample_pdfx4.pdf`)。 +* ラスタ画像なしの HTML 表現(`sample.html`)。 +* 最初のページのリソースに添付されたカスタム ExtGState(`GS0`)。 + +### 期待されるコンソール出力 + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +If the source PDF has no signatures, the loop prints nothing but still proceeds without error. + +ソース PDF に署名がない場合、ループは何も出力しませんが、エラーなく処理は続行されます。 + +## 一般的なバリエーションとエッジケース + +| 状況 | 調整 | +|------|------| +| PDF にページが含まれていない | `doc.Pages[1]` にアクセスする前に `doc.Pages.Count` を確認し、`IndexOutOfRangeException` を回避してください。 | +| PDF/X‑4 の代わりに PDF/A‑2b が必要 | `PdfFormatConversionOptions` で `PdfStandard.PdfX4` を `PdfStandard.PdfA2b` に変更します。 | +| ラスタ画像を保持したい | `HtmlSaveOptions` で `SkipRasterImages = false`(またはプロパティを省略)に設定します。 | +| 複数の ExtGState オブジェクト | `extGStateDict` に追加する際、ユニークなキー(`GS1`、`GS2`、…)を使用します。 | +| 大きな PDF(数百 MB) | 保存前に `doc.OptimizeResources = true` を有効にしてメモリ使用量を削減します。 | + +## 完全なソースコード(実行可能) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Step 1: Load the PDF document + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Step 2: List all signature field names + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Step 3: Convert the PDF to PDF/X‑4 standard + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Step 4: Save the PDF as HTML while skipping raster images + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Step 5: Add a custom ExtGState (graphics state) to the first page + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした密接に関連するトピックを取り上げています。各リソースには、ステップバイステップの解説と完全な動作コード例が含まれており、追加の API 機能を習得し、独自プロジェクトで代替実装アプローチを検討するのに役立ちます。 + +- [包括的ガイド:Aspose.PDF .NET を使用したカスタム戦略による PDF の HTML 変換](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Aspose.PDF .NET を使用したカスタム画像 URL で PDF を HTML に変換:包括的ガイド](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Aspose.PDF .NET を使用した PDF から HTML への変換:画像を外部 PNG として保存](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/programming-with-forms/_index.md b/pdf/japanese/net/programming-with-forms/_index.md index 5e6131ef82..9f9a7fcd31 100644 --- a/pdf/japanese/net/programming-with-forms/_index.md +++ b/pdf/japanese/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Aspose.PDF for .NETの「フォームを使ったプログラミング」チュ | [ラジオボタンのキャプションを設定する](./set-radio-button-caption/) Aspose.PDF for .NET を使用してPDFにラジオボタンのキャプションを設定する方法を学びましょう。このステップバイステップガイドでは、PDFフォームの読み込み、変更、保存の手順を詳しく説明します。 | | [テキストボックス](./text-box/) Aspose.PDF for .NET を使って PDF にテキストボックスを簡単に追加する方法をステップバイステップで解説します。ユーザーインタラクションを強化します。 | | [AsposeでPDFを作成 – フィールドとページを追加](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) Aspose.PDF for .NET を使用して、PDF にフォームフィールドとページを追加する手順をステップバイステップで解説します。 | +| [C# で PDF フォームフィールドを作成する – ステップバイステップ ガイド](./create-pdf-form-field-in-c-step-by-step-guide/) Aspose.PDF for .NET を使用して C# で PDF フォームフィールドを作成する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/japanese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..fe8e9809e6 --- /dev/null +++ b/pdf/japanese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: C#でPDFフォームフィールドを素早く作成する。Aspose.PDFを使用してPDFにテキストボックスを追加し、テキストボックスを含むようにPDFを変更する方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: ja +lastmod: 2026-08-14 +og_description: C#でPDFフォームフィールドを作成する。このチュートリアルでは、PDFにテキストボックスを追加し、Aspose.PDFを使用してテキストボックスを含むようにPDFを変更する方法を示します。 +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: C#でPDFフォームフィールドを作成する – 完全プログラミングガイド +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: C#でPDFフォームフィールドを作成する – ステップバイステップガイド +url: /ja/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#でPDFフォームフィールドを作成する – ステップバイステップガイド + +ドキュメントに **create pdf form field** が必要な場合、このガイドでは全工程を解説します。**add text box to pdf** ページの方法と、Aspose.PDF ライブラリ for .NET を使用して **modify pdf to include text box** する方法が具体的に分かります。 + +PDFフォームの取り扱いは、請求システムやアンケート、ユーザー入力を収集するあらゆるワークフローで一般的な要件です。このチュートリアルの最後までに、再利用可能なコードスニペットが手に入り、完全に機能するテキストボックスフィールドを作成し、任意の位置に配置し、更新されたPDFを保存できます――すべてC#プロジェクト内で完結します。 + +## 前提条件 + +* .NET 6.0 以降(コードは .NET Framework 4.7+ でも動作します) +* Visual Studio 2022 または C# をサポートする任意の IDE +* 有効な Aspose.PDF for .NET ライセンス(無料トライアルは開発に使用可能) +* `input.pdf` という名前の PDF ファイルを既知のディレクトリに配置します(チュートリアルでは `YOUR_DIRECTORY` をプレースホルダーとして使用) + +> **プロのヒント:** まだライセンスをお持ちでない場合は、Aspose のウェブサイトから一時キーをリクエストできます。コードを変更せずに評価モードでライブラリを使用できます。 + +## C#でPDFフォームフィールドを作成する方法(概要) + +1. 既存の PDF ドキュメントを読み込む。 +2. `TextBoxField` をインスタンス化し、名前と外観を設定する。 +3. 対象ページ上のビジュアル矩形を定義するウィジェットアノテーションを追加する。 +4. フィールドをドキュメントのフォームコレクションに挿入する。 +5. 変更された PDF を保存する。 + +各ステップは以下で詳細に説明し、完全なコード例と API 呼び出しの背後にある考え方を示します。 + +## ステップ 1: PDFドキュメントを読み込む + +最初の操作はソース PDF を読み取ることです。Aspose.PDF は `Document` クラスで PDF ファイルを表現します。ドキュメントをロードすると、ページ、フォームコレクション、その他の構造にアクセスできるようになります。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Why this matters:** +ファイルを読み込むことで PDF のインメモリモデルが作成され、元のファイルを破損させることなくオブジェクトの追加、削除、編集が可能になります。`Document` オブジェクトは `Form` プロパティも公開しており、後で **add text box to pdf** を行う場所となります。 + +## ステップ 2: テキストボックスフィールドを作成する + +テキストボックスフィールドは、ユーザーが自由形式のテキストを入力できるフォームフィールドの一種です。Aspose.PDF では `TextBoxField` をインスタンス化し、対象ページとウィジェットの初期サイズを定義する矩形を渡すことで作成します。 + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Why this matters:** +* `PartialName` は、フォーム処理ツール(例: Adobe Acrobat、サーバー側パーサー)が入力値を取得するために使用するキーです。 +* ここで渡す矩形は *初期* ウィジェットサイズのみを定義します。後でウィジェットアノテーション(次のステップ)で視覚的な位置を調整できます。 +* `DefaultAppearance` を設定すると、ボックス内のテキストがビューア間で一貫して表示されます。 + +## ステップ 3: ビジュアルウィジェットアノテーションを定義する + +フォームフィールドは、各ページ上でフィールドが表示される位置を制御する **widget annotations** を 1 つ以上持つことができます。ウィジェットを追加することで、同じ論理フィールドを別の場所や複数ページに配置できます。 + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Why this matters:** +ウィジェット矩形はユーザーが目にする画面上の座標を決定します。このステップを省略すると、フィールドは PDF のデータ構造に存在してもエンドユーザーには見えません。ウィジェットを追加することが、実際に **adds text box to pdf** するステップです。 + +## ステップ 4: 設定したフィールドをドキュメントのフォームに追加する + +`TextBoxField` の設定が完了したら、PDF のフォームコレクションに登録する必要があります。これによりフィールドはインタラクティブフォームの一部となり、保存時に保持されます。 + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Why this matters:** +`pdfDocument.Form` にフィールドを追加しなければ、PDF ビューアはウィジェットアノテーションを無視し、フィールドデータは送信されません。この行が **modify pdf to include text box** 操作を完了させます。 + +## ステップ 5: 更新されたPDFを保存する + +最後に、変更をディスクに書き戻します。元のファイルを上書きすることも、新しいファイルを作成することも可能です。例では `output.pdf` に保存します。 + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +`output.pdf` を Adobe Acrobat Reader で開くと、2 ページ目に「Comments」とラベル付けされた矩形テキストボックスが表示されます。ユーザーは内部をクリックして入力でき、入力されたテキストは PDF フォームデータの一部となります。 + +## 完全な動作例 + +すべての要素を組み合わせた、実行可能な完全プログラムです。新しいコンソールプロジェクトにコピーし、`YOUR_DIRECTORY` を実際のフォルダパスに置き換えて実行してください。 + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Expected output:** +プログラムを実行するとコンソールに 2 行の確認メッセージが表示されます。`output.pdf` を開くと、2 ページ目にコメント入力用のテキストボックスが表示されます。フォームが送信されると(例: Adobe Acrobat の「Submit」ボタン経由)フィールド名 `Comments` がエクスポートされた FDF または XFDF データに現れます。 + +## 一般的なバリエーションとエッジケース + +| 状況 | コードの適応方法 | +|-----------|-----------------------| +| **Add the field to a different page** | `pdfDocument.Pages[1]` を目的のページインデックス(0 ベース)に変更します。 | +| **Create a multi‑line text box** | ウィジェットを追加する前に `textBox.Multiline = true;` を設定します。 | +| **Set a default value** | `textBox.Value = "Enter your comments here";` を代入します。 | +| **Make the field required** | `textBox.Required = true;` を設定します。 | +| **Place the field on multiple pages** | 対象ページごとに追加の矩形で `textBox.AddWidgetAnnotation` を呼び出します。 | +| **Use a custom font** | `FontRepository.AddFont("path/to/font.ttf")` でフォントをロードし、`DefaultAppearance` で参照します。 | + +**プロのヒント:** 矩形座標は必ずページサイズ(`pdfDocument.Pages[1].Rect`)と照らし合わせて検証してください。ウィジェットがページ境界外にあると、ビューアがフィールドを切り取ったり非表示にしたりする可能性があります。 + +## フィールドのテスト + +1. `output.pdf` を Adobe Acrobat Reader で開く。 +2. 「Comments」ボックス内をクリックし、カーソルが表示されることを確認。 +3. 任意のテキストを入力し、**Tab** キーまたは別の場所をクリックして確定。 +4. **File → Save As** を選択し、入力値を永続化。 +5. (オプション)Aspose.PDF の `Form` API を使用してプログラムから値を抽出する: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +このスニペットは、フィールドが視覚的に表示されるだけでなく、コードから取得可能であることを示しています――サーバー側処理に必須です。 + +## 結論 + +これで C# で **create pdf form field** を最初から最後まで実装する方法が分かりました。チュートリアルでは PDF の読み込み、`TextBoxField` の設定、ウィジェットアノテーションの追加、フィールドの登録、結果の保存をカバーしました。これらの構成要素を使えば **add text box to pdf** ドキュメントや **modify pdf to include text box** が可能になり、チェックボックス、ラジオボタン、ドロップダウンなど他のフィールドタイプにも応用できます。 + +次に、**extracting form data**、**flattening PDF forms**、**styling fields with borders and colors** といった関連トピックを探求してください。これらの概念は今回習得したコア API を基盤にしており、C# だけで高度なインタラクティブ PDF を作成できるようになります。 + +Happy coding, and feel free to experiment with different rectangles, fonts, and validation rules to suit your application’s needs! + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした密接に関連するトピックをカバーしています。各リソースには、ステップバイステップの解説と完全な動作コード例が含まれており、追加の API 機能を習得し、プロジェクトで代替実装アプローチを検討するのに役立ちます。 + +- [AsposeでPDFドキュメントを作成 – ページ、テキストボックス、フォームの追加](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [AsposeでPDFを作成する方法 – フォームフィールドとページの追加](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose.PDF .NETでテキストスタンプをPDFに追加する方法 – 包括的ガイド](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/programming-with-operators/_index.md b/pdf/japanese/net/programming-with-operators/_index.md index fd024c4109..986fce3307 100644 --- a/pdf/japanese/net/programming-with-operators/_index.md +++ b/pdf/japanese/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET の「演算子を使ったプログラミング」チュー | [ページにXFormを描く](./draw-xform-on-page/) この包括的なステップバイステップ ガイドで、Aspose.PDF for .NET を使用して PDF に XForms を描画する方法を学びます。 | | [PDF演算子](./pdf-operators/) Aspose.PDF for .NET で PDF 演算子を使用するためのステップバイステップガイド。PDF ページに画像を追加し、その位置を指定します。 | | [PDFファイル内のグラフィックオブジェクトを削除する](./remove-graphics-objects/) このステップバイステップガイドでは、Aspose.PDF for .NET を使用してPDFファイルからグラフィックオブジェクトを削除する方法を学びます。PDF操作タスクを簡素化します。 | +| [Aspose.Pdf を使用した C# で空の PDF 辞書を作成する](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) Aspose.PDF for .NET を使い、C# で空の PDF 辞書オブジェクトを作成する手順を解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/japanese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..e303494b8a --- /dev/null +++ b/pdf/japanese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.Pdf を使用して C# で空の PDF 辞書を作成 – ExtGState コレクションにグラフィックスステートを追加し、プログラムで + PDF を変更する方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: ja +lastmod: 2026-08-14 +og_description: C# と Aspose.Pdf を使用して空の PDF 辞書を作成します。この完全ガイドに従い、PDF の ExtGState コレクションにカスタム + グラフィックス ステートを追加してください。 +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: C#で空のPDFディクショナリを作成 – Aspose.Pdfステップバイステップガイド +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Aspose.Pdf を使用して C# で空の PDF 辞書を作成する +url: /ja/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# と Aspose.Pdf で空の PDF 辞書を作成する + +PDF ファイルを扱う際に **空の PDF 辞書** オブジェクトを作成する必要がある場合、このガイドでは Aspose.Pdf ライブラリを使用して C# で実際に行う方法を示します。カスタムのグラフィックス状態を構築したり、新しいリソースを追加したり、後で使用するテンプレートを準備したりする際に、以下の手順で完全に実行可能なソリューションを提供します。 + +PDF を読み込み、最初のページのリソース辞書にアクセスし、全く新しい `CosPdfDictionary` を作成して `ExtGState` コレクションに挿入する方法を学びます。チュートリアルの最後まで実行すれば、作成した辞書が含まれた `output.pdf` が生成されます。 + +## 前提条件 + +開始する前に、以下が揃っていることを確認してください。 + +- .NET 6.0 以降(コードは .NET Framework 4.6+ でも動作します) +- Visual Studio 2022 またはお好みの C# IDE +- Aspose.Pdf for .NET のライセンス(または一時評価キー) +- 任意のフォルダーに配置した **input.pdf** というサンプル PDF(フォルダーのパスは `dataDir` として使用します) + +`Aspose.Pdf` 以外に追加の NuGet パッケージは必要ありません。 + +## 手順 1: プロジェクトを作成し Aspose.Pdf を参照する + +1. Visual Studio で新しい **Console App** プロジェクトを作成します。 +2. **NuGet パッケージ マネージャー** を開き、`Aspose.Pdf` をインストールします: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. `Program.cs` の先頭に以下の `using` ディレクティブを追加します: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *なぜこれらの名前空間が必要か?* `Aspose.Pdf` にはコアの `Document` クラスが含まれ、`Aspose.Pdf.Operators.Gfx` には **空の PDF 辞書** 構造を作成するために必要な `CosPdfDictionary`、`CosPdfNumber` などの低レベル PDF オブジェクトが提供されています。 + +## 手順 2: ソース PDF を読み込む + +最初の操作は既存の PDF ファイルを `Document` インスタンスに読み込むことです。これにより、すべてのページ、リソース、低レベル辞書へアクセスできるようになります。 + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*解説*: `Document` はファイルをメモリに読み込み、内部構造を準備します。`using` 文は処理終了後にファイルハンドルを解放することを保証します。 + +## 手順 3: 最初のページのリソース辞書にアクセスする + +各 PDF ページには **Resources** 辞書があり、フォント、画像、ExtGState オブジェクト、その他の共有リソースがまとめられています。新しいグラフィックス状態を挿入するには、この辞書を編集する必要があります。 + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` は PDF 辞書を C# の `Dictionary` のように扱えるヘルパークラスです。 + +## 手順 4: ExtGState コレクションを取得(または作成)する + +`ExtGState` には不透明度、ブレンドモード、線幅などのグラフィックス状態オブジェクトが格納されます。ソース PDF に既に `ExtGState` エントリが存在すればそれを再利用し、存在しなければ新しい空の辞書を作成します。 + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*なぜこのチェックが必要か?* PDF によっては `ExtGState` エントリ自体が省略されていることがあります。両方のケースに対応することで、任意の入力ファイルに対して堅牢なチュートリアルになります。 + +## 手順 5: 新しいグラフィックス状態用に **空の PDF 辞書** を作成する + +ここで実際に **空の PDF 辞書** オブジェクトを作成し、グラフィックス状態パラメータを定義します。辞書は最初は空で、必要なキーを追加していきます。 + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### 各エントリの意味 + +| キー | 型 | 意味 | +|-----|------|---------| +| **CA** | `CosPdfNumber` | ストロークの不透明度(範囲 0‑1)。 | +| **ca** | `CosPdfNumber` | 塗りつぶしの不透明度(範囲 0‑1)。 | +| **BM** | `CosPdfName` | ブレンドモード;最も一般的なのは `"Normal"`。 | + +**空の PDF 辞書** から始めたため、追加するエントリを完全にコントロールできます。必要に応じて `LW`(線幅)や `LC`(線端)などの追加パラメータを拡張してください。 + +## 手順 6: 新しいグラフィックス状態を ExtGState に挿入する + +`ExtGState` 辞書は名前(例: `GS0`、`GS1`)で識別されるマップのように機能します。作成した辞書を一意のキーの下に追加します。 + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +複数の状態を追加する場合は、接尾辞(`GS1`、`GS2` …)をインクリメントして名前衝突を防ぎます。 + +## 手順 7: 変更後の PDF を保存する + +最後に、変更をディスクに書き出します。`Save` メソッドは更新された辞書を自動的にシリアライズします。 + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +任意の PDF ビューアで `output.pdf` を開き、**Resources → ExtGState** エントリを確認してください(多くのビューアは非表示にしますが、Adobe Acrobat Preflight や PDF‑Tron などのツールで確認可能です)。`GS0` エントリに、設定した不透明度とブレンドモードの値が含まれているはずです。 + +## 完全な動作例 + +すべてをまとめたプログラムは以下の通りです。`Program.cs` にコピーして実行できます。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**期待される出力** – コンソールに確認メッセージが表示され、`output.pdf` には `ExtGState` 配下に新しい `GS0` エントリが含まれます。ページのコンテンツストリームで `gs` 演算子を使って `GS0` を参照すれば、ストロークは完全に不透明、塗りは 50 % 透明になることが確認できます。 + +## よくある質問とエッジケースの対処 + +| 質問 | 回答 | +|----------|--------| +| *PDF に複数ページがある場合はどうすればよいですか?* | 本例は最初のページ(`Pages[1]`)を対象としています。すべてのページに適用したい場合は `pdfDocument.Pages` をループし、各ページのリソースに対して手順 3‑5 を繰り返してください。 | +| *既に “GS0” という名前の ExtGState エントリがあるページに辞書を追加できますか?* | 可能ですが、既存エントリを上書きしないように別のキー(`GS1`、`GS2` …)を使用する必要があります。 | +| *保存後に辞書を変更するのは安全ですか?* | `Save` を呼び出した後も、メモリ上の `Document` オブジェクトはファイルから切り離されています。必要に応じてさらに編集し、再度 `Save` することができます。 | +| *Aspose.Pdf のライセンスは必要ですか?* | はい、評価キーでも機能しますが、評価期間が過ぎると機能が制限されます。商用利用の場合は正式ライセンスをご購入ください。 | + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示した手法に密接に関連するトピックを扱っています。各リソースには完全なコード例とステップバイステップの解説が含まれており、API の追加機能を習得したり、独自プロジェクトで代替実装を検討したりするのに役立ちます。 + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/programming-with-security-and-signatures/_index.md b/pdf/japanese/net/programming-with-security-and-signatures/_index.md index 9744d845c1..930e893c76 100644 --- a/pdf/japanese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/japanese/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [C# で PDF 署名を確認する – 署名済み PDF ファイルの読み取り方法](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) Aspose.PDF for .NET を使用して、C# で署名済み PDF の署名情報を取得し、検証する方法を学びます。 | | [PDF ファイルの修復方法 – Aspose.Pdf を使用した完全な C# ガイド](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) Aspose.PDF for .NET を使用して PDF ファイルを修復する方法を学びましょう。ステップバイステップのガイドで、破損した文書を復元できます。 | | [C# で PDF 署名を検証する – 完全プログラミングガイド](./verify-pdf-signature-in-c-complete-programming-guide/) Aspose.PDF for .NET を使用して、C# で PDF 署名を検証し、署名情報を取得する方法を学びます。 | +| [C# で署名オプションを作成する – デジタル署名の完全ガイド](./create-signature-options-in-c-full-guide-to-digital-signing/) Aspose.PDF for .NET を使用して、C# でデジタル署名オプションを作成し、署名プロセスをカスタマイズする方法を学びます。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/japanese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..b6ae9fc676 --- /dev/null +++ b/pdf/japanese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,308 @@ +--- +category: general +date: 2026-08-14 +description: C#でデジタル署名を適用するための署名オプションを作成します。署名の設定方法、カスタムハッシュ関数の実装方法、そしてプログラムで文書に署名する方法を学びます。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: ja +lastmod: 2026-08-14 +og_description: C#で署名オプションを作成し、デジタル署名を適用します。このチュートリアルでは、署名の設定、カスタムハッシュ関数の追加、そしてドキュメントへの署名方法をステップバイステップで解説します。 +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: C#で署名オプションを作成 – ステップバイステップのデジタル署名ガイド +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: C#で署名オプションを作成する – デジタル署名の完全ガイド +url: /ja/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で署名オプションを作成する – デジタル署名の完全ガイド + +C# で署名オプションを作成してデジタル署名ワークフローを構成します。このチュートリアルでは、デジタル署名の適用方法、カスタムハッシュ関数の実装方法、そして `SignatureOptions` クラスを使用してドキュメントに署名する方法を示します。.NET アプリケーションから PDF、XML、または任意のバイナリペイロードに署名する必要がある場合、以下の手順で即座に実行可能なソリューションが得られます。 + +以下を学びます: + +* カスタムハッシュアルゴリズムで `SignatureOptions` を構成する方法 +* 署名メソッドを正しく呼び出す方法 +* 署名が適用されたことを検証する方法 +* 署名を構成する際の一般的な落とし穴を回避する方法 + +必要な前提条件は、最新の .NET SDK(≥ .NET 6)と `SignatureOptions` を提供する署名ライブラリ(例: **GroupDocs.Signature**、**Aspose.Signature**、または類似の API)だけです。外部ツールは必要ありません。 + +--- + +## 前提条件 + +| 要件 | 重要な理由 | +|------|------------| +| .NET 6 SDK or later | サンプルで使用される最新の言語機能を提供します。 | +| A signing‑library NuGet package (e.g., `GroupDocs.Signature`) | `SignatureOptions` 型と `Sign` 拡張メソッドを提供します。 | +| Access to a private key or certificate | 検証可能なデジタル署名を生成するために必要です。 | + +標準 CLI でライブラリをインストールします: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## 手順 1: 署名オプションを作成する + +最初のステップは `SignatureOptions` のインスタンスを作成し、署名プロセスを制御するプロパティを設定することです。このオブジェクトはライブラリに対して、*何を* 署名し、*どのように* 署名するかを指示します。 + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**この重要性:** `SignatureOptions` はコードと署名エンジン間の契約として機能します。事前に設定しておくことで、複数のドキュメントに署名する際に繰り返しの定型コードを回避できます。 + +--- + +## 手順 2: カスタムハッシュ関数を実装する + +*カスタムハッシュ関数* を使用すると、署名アルゴリズムが署名するダイジェストを完全に制御できます。デフォルトのハッシュ(SHA‑256)がコンプライアンス要件を満たさない場合や、ドキュメントの一部だけをハッシュ化したい場合に便利です。 + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**この重要性:** `CustomSignHash` に割り当てることで、ライブラリ内部のハッシュ処理を `MyHash` に置き換えます。署名エンジンは現在、関数が返すバイト列に対して署名を行い、任意のカスタムポリシーへの準拠を保証します。 + +--- + +## 手順 3: ドキュメントを読み込みデジタル署名を適用する + +オプションが準備できたら、対象ファイルを開き、署名メソッドを呼び出します。`Sign` メソッドはライブラリが提供し、設定された `SignatureOptions` を使用します。 + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**この重要性:** `Sign` の呼び出しは内部で次の 3 つの処理を行います。 + +1. **ハッシュ計算** – これがカスタムハッシュ関数に委任されます。 +2. **署名生成** – ライブラリの設定で提供されたプライベートキーを使用します。 +3. **埋め込み** – 生成された署名が出力ファイルに付加されます。 + +いずれかのステップが失敗した場合、メソッドは `false` を返し、エラーを適切に処理できるようにします。 + +--- + +## 手順 4: ドキュメントが署名されていることを検証する + +簡単な検証により、署名が正しく適用されたことを確認できます。ほとんどのライブラリは署名されたファイルの整合性をチェックする `Verify` メソッドを提供しています。 + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**この重要性:** 検証により、署名後にドキュメントが改ざんされていないこと、そしてカスタムハッシュが互換性のあるダイジェストを生成したことが保証されます。 + +--- + +## ファイルタイプ別の署名設定方法 + +同じ `SignatureOptions` オブジェクトを PDF、Word 文書、画像、または単純なバイナリに対して再利用できます。必要な変更は、特定のオプションクラス(例: `PdfSignatureOptions`、`WordSignatureOptions`)だけです。以下は JPEG 画像の簡単な例です。 + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**この重要性:** 各フォーマットごとに *署名を設定* する方法を理解すれば、ハッシュロジックを書き直すことなく、同じコードベースを複数のドキュメントタイプに拡張できます。 + +--- + +## よくある落とし穴とベストプラクティス + +| 落とし穴 | 推奨される対策 | +|----------|----------------| +| `SignatureOptions` 作成後に `CustomSignHash` を設定し忘れる | オプションオブジェクトを構築した直後にデリゲートを割り当てる。 | +| 署名証明書がサポートしないハッシュアルゴリズムを使用する | 証明書のキー使用目的がハッシュ長と一致しているか確認する(例: RSA‑2048 と SHA‑512)。 | +| `Signature` オブジェクトの破棄が必要であることを見落とす | `Signature` インスタンスを `using` ブロックでラップしてファイルハンドルを解放する。 | +| 署名済みファイルを元のソースに上書き保存する | 常に新しいファイルパス(`outputPath`)に書き込み、元のドキュメントを保持する。 | + +--- + +## 完全な動作例 + +以下は、すべての要素を組み合わせた自己完結型プログラムです。新しいコンソールプロジェクトにコピーして実行してください。コンソールに成功または失敗が報告されます。 + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**期待される出力** + +``` +Signature verified successfully. +``` + +コンソールに “Signing failed.” または “Signature verification failed.” と表示された場合は、証明書の設定を再確認し、カスタムハッシュが期待サイズのバイト配列を返すことを確認してください。 + +--- + +## 結論 + +これで C# で **署名オプションを作成**し、**カスタムハッシュ関数を付与**し、任意のサポート対象ドキュメントに **デジタル署名を適用**する方法が分かりました。本チュートリアルでは、オプションの設定、ファイルへの署名、結果の検証というフルライフサイクルをカバーしました。同じ `SignatureOptions` インスタンスを再利用することで、画像、Word ファイル、または生バイナリに対しても **署名の設定方法** を行うことができます。 + +--- + +## 次にやることは? + +* `SignatureOptions` の追加プロパティ(ビジュアルスタンプ、タイムスタンプサーバー、証明書チェーンなど)を調査してください – これらは **apply digital signature** キーワードに対応します。 +* `MyHash` 内の実装を差し替えて、他のハッシュアルゴリズム(例: Blake2b)を試してみてください。 +* 署名フローを Web API に統合し、オンザフライでのドキュメント署名を可能にします – これは **how to sign document** のサービス指向アーキテクチャでの自然な拡張です。 + +ご自身のセキュリティポリシーに合わせてコードを自由に適応させ、コメントで体験を共有してください。署名を楽しんでください! + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を基にした密接に関連するトピックを取り上げています。各リソースには、完全な動作コード例とステップバイステップの解説が含まれており、追加の API 機能を習得し、独自プロジェクトで代替実装アプローチを検討するのに役立ちます。 + +- [Aspose.PDF for .NET で PDF 署名言語を変更する方法](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Aspose PDF .NET デジタル署名チュートリアル(ドイツ語)](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Aspose PDF .NET デジタル署名チュートリアル(フランス語)](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/programming-with-stamps-and-watermarks/_index.md b/pdf/japanese/net/programming-with-stamps-and-watermarks/_index.md index c628b7cc44..97d1e1365d 100644 --- a/pdf/japanese/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/japanese/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF の .NET 向けチュートリアル「スタンプと透かしを使 | [PDFファイルのフッター内のテキスト](./text-in-footer/) Aspose.PDF for .NET を使用して PDF ファイルのフッターにテキストを追加する方法を学習します。 | | [PDFファイルのヘッダー内のテキスト](./text-in-header/) Aspose.PDF for .NET を使用してPDFにテキストヘッダーを追加する方法をステップバイステップで学ぶチュートリアルです。ドキュメントを効率的かつ効果的に強化しましょう。 | | [C#でBates番号付PDFを追加する – 完全ガイド](./add-bates-numbering-pdf-in-c-complete-guide/) Aspose.PDF for .NET を使用して C# で PDF に Bates 番号を付与する方法をステップバイステップで解説します。文書管理に最適です。 | +| [C#でBates番号付けオプションを設定する – 完全ガイド](./how-to-set-bates-numbering-options-in-c-complete-guide/) Aspose.PDF for .NET を使用して C# で Bates 番号付けオプションを設定する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/japanese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..c58f175f3e --- /dev/null +++ b/pdf/japanese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: GroupDocs を使用して C# でベーツ番号付けオプションを設定する方法。Word を PDF に変換する際に、カスタムプレフィックスと開始番号を追加するステップバイステップのチュートリアルをご覧ください。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: ja +lastmod: 2026-08-14 +og_description: C#でベーツ番号付けオプションを迅速に設定する方法。このガイドでは、Word を PDF に変換する際にカスタムプレフィックスと開始番号を追加する方法を示します。 +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: C#でベーツ番号付けオプションを設定する方法 – ステップバイステップチュートリアル +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: C#でベーツ番号付けオプションを設定する方法 – 完全ガイド +url: /ja/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# でベーツ番号付与オプションを設定する方法 – 完全ガイド + +C# で **ベーツ番号付与オプションの設定方法** が必要な方のために、本ガイドでは正確な手順を解説します。開始番号の設定、プレフィックスの追加、Word 文書を PDF に変換しながら番号付与を適用する方法を学べます。 + +文書処理では、法的またはアーカイブ目的で各ページに固有の識別子を付与する必要があることが多いです。このチュートリアルを終える頃には、訴訟支援ツールや自動レポートジェネレータなど、任意の .NET プロジェクトに組み込める再利用可能なスニペットが手に入ります。外部ツールは不要で、GroupDocs.Conversion ライブラリと数行の C# だけで完了します。 + +## 必要なもの + +開始する前に、以下を用意してください。 + +* .NET 6.0 SDK 以降がインストール済み +* Visual Studio 2022(または .NET をサポートする任意の IDE) +* 有効な GroupDocs.Conversion ライセンス(無料トライアルでテスト可能) +* 番号付与したいサンプル Word 文書(`input.docx`) + +これらの前提条件があれば、追加設定なしでコードを実行できます。 + +## ベーツ番号付与オプションの設定概要 + +**ベーツ番号付与オプションの設定方法** の核心は次の 3 つのオブジェクトです。 + +1. `Document` – ソースファイルを読み込みます。 +2. `BatesNumberingOptions` – 開始番号、プレフィックス、その他の書式設定を保持します。 +3. `AddBatesNumbering` – 各ページに番号付与を挿入するメソッド。 + +各要素が何のためにあるかを理解すれば、カスタムフォントや多言語番号付与といった複雑なシナリオにも対応できるようになります。 + +## 手順 1: GroupDocs.Conversion NuGet パッケージをインストール + +ソリューションフォルダーでターミナルを開き、次を実行してください。 + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** は、後述のチュートリアルで使用する `Document` クラスと `AddBatesNumbering` 拡張メソッドを提供します。 + +## 手順 2: ソース文書を読み込む + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*なぜこの手順が必要か?* +ファイルを読み込むことで、変換エンジンが操作できるメモリ上の表現が生成されます。`Document` インスタンスがなければ、ベーツ番号付与やその他の変換は実行できません。 + +## 手順 3: ベーツ番号付与オプションを作成 + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*なぜこの手順が必要か?* +`BatesNumberingOptions` は **ベーツ番号付与オプションの設定** に必要なすべての設定をカプセル化します。`StartNumber` と `Prefix` を調整することで、ケース管理システムに合わせた出力が可能になります。`Position` プロパティは視覚的な配置を制御し、コンプライアンス要件で頻繁に求められます。 + +## 手順 4: 文書にベーツ番号付与を適用 + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` メソッドはロード済みの `Document` の各ページを走査し、設定された文字列を挿入します。メモリ上の表現に対して動作するため、保存前に透かし入れなどの追加処理をチェーンできるのが利点です。 + +## 手順 5: 結果を PDF に変換して保存 + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*なぜこの手順が必要か?* +PDF は法的文書の一般的な最終形式です。`PdfConvertOptions` オブジェクトで出力を細かく調整できますが、基本的な番号付与だけなら必須ではありません。`Save` 呼び出しで、番号付与済みの PDF がディスクに書き出されます。 + +## 完全な実行可能サンプル + +すべてをまとめた自己完結型コンソールアプリケーションは以下の通りです。コンパイルして実行できます。 + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**期待される出力** + +プログラムを実行すると `output.pdf` が生成され、各ページの右フッターに `CASE-1000`、`CASE-1001` などのラベルが表示されます。任意の PDF ビューアで開き、番号が正しく表示されていることを確認してください。 + +## よくある落とし穴とベストプラクティス + +| 問題 | 発生理由 | 回避策 | +|------|----------|--------| +| **相対パスが `FileNotFoundException` を引き起こす** | コンソールアプリの作業ディレクトリは Visual Studio のものと異なる場合があります。 | 絶対パスを使用するか、`Path.Combine(AppContext.BaseDirectory, "input.docx")` を利用してください。 | +| **番号が既存のフッターと重なる** | ソース文書にすでにフッター領域にコンテンツがあると、新しい番号が隠れることがあります。 | 別の `Position`(例: `HeaderLeft`)を選択するか、テンプレート自体を調整してください。 | +| **大容量文書が遅い** | ベーツ番号付与は各ページを走査するため、ファイルサイズが大きくなるとメモリ使用量が増加します。 | 500 ページを超える場合は `Document.Split` でチャンク処理を行ってください。 | +| **ライセンス期限切れ** | 無料トライアルは 30 日で期限切れとなり、`AddBatesNumbering` 実行時に例外が発生します。 | 文書読み込み前に有効なライセンスキーを設定します: `License license = new License(); license.SetLicense("license.lic");` | + +**プロのコツ:** ケースごとに異なる番号形式(例: `2023-CASE-001`)が必要な場合は、`BatesNumberingOptions` を作成する前にプレフィックスを動的に組み立ててください。 + +## ソリューションの拡張 + +同じ **Bates numbering C#** アプローチは、`.txt`、`.html`、画像など他のソース形式でも利用できます。`Document` オブジェクト作成時に拡張子を変更すれば、変換エンジンが自動的に処理します。 + +また、**document conversion C#** と OCR を組み合わせてスキャン済み PDF に対応することも可能です。 + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## 結論 + +これで C# における **ベーツ番号付与オプションの設定方法** を最初から最後まで習得できました。`BatesNumberingOptions` オブジェクトを作成し、`AddBatesNumbering` で適用、PDF として保存することで、法的に準拠した一意の識別文書を自動生成できます。 + +ここからは **C# PDF 生成**、**document conversion C#**、あるいはウォーターマーキングやデジタル署名といった高度な **GroupDocs API** 機能を探求してみましょう。さまざまなプレフィックス、配置、番号形式を試して、ワークフローに最適な設定を見つけてください。 + +Happy coding! + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示したテクニックを基にした関連トピックを扱っています。各リソースには完全なコード例とステップバイステップの解説が含まれており、API の追加機能をマスターしたり、独自プロジェクトで代替実装アプローチを探求したりするのに役立ちます。 + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/annotations/_index.md b/pdf/korean/net/annotations/_index.md index 8d9ca03c28..9f5bbc9b44 100644 --- a/pdf/korean/net/annotations/_index.md +++ b/pdf/korean/net/annotations/_index.md @@ -35,6 +35,7 @@ Aspose.PDF for .NET을 사용하여 PDF 문서에 주석을 추가하는 방법 | [자유 텍스트 주석 서식 설정](./setfreetextannotationformatting/) | 이 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 PDF 문서에 자유 텍스트 주석 서식을 설정하는 방법을 알아보세요. | | [단어를 삭제하세요](./strikeoutwords/) | Aspose.PDF for .NET을 사용하여 PDF에서 단어를 지우는 방법을 단계별로 자세히 알아보세요. 문서 편집 실력을 향상시켜 보세요. | | [자유 텍스트 PDF 주석 업데이트](./updatefreetextannotation/) 이 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 PDF 문서의 자유 텍스트 주석을 업데이트하는 방법을 알아보세요. | +| [PDF에 사각형 그리기 – 단계별 C# 가이드](./draw-rectangle-on-pdf-step-by-step-c-guide/) | PDF에 사각형을 그리는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/korean/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..3dd8073d36 --- /dev/null +++ b/pdf/korean/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: C#를 사용하여 PDF에 사각형을 빠르게 그리세요. 몇 줄만으로 사각형 크기를 정의하고 PDF 페이지에 도형을 추가하는 방법을 + 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: ko +lastmod: 2026-08-14 +og_description: C#로 PDF에 사각형을 몇 초 만에 그리기. 이 가이드는 사각형 크기를 정의하고, 도형을 추가하며, 신뢰할 수 있는 + PDF 그래픽을 위해 페이지 경계를 확인하는 방법을 보여줍니다. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: PDF에 사각형 그리기 – 완전 C# 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: PDF에 사각형 그리기 – 단계별 C# 가이드 +url: /ko/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF에 사각형 그리기 – 완전 C# 튜토리얼 + +If you need to **draw rectangle on pdf** using C#, this guide shows you a concise, production‑ready solution. You’ll see exactly **how to define rectangle dimensions**, verify that the shape fits, and add it to a page with a single method call. + +이 튜토리얼은 PDF 문서 생성부터 사각형 렌더링까지 모든 과정을 다루므로, 코드를 복사‑붙여넣기만 하면 바로 결과를 확인할 수 있습니다. 외부 문서는 필요하지 않으며, 아래 단계만 따르면 됩니다. + +## 사전 요구 사항 + +* .NET 6.0 이상 (코드는 .NET Framework 4.7+에서도 작동합니다) +* The **Aspose.PDF for .NET** NuGet package (`Install-Package Aspose.PDF`) +* C# 구문에 대한 기본 이해 +* Visual Studio 또는 VS Code와 같은 IDE + +> **Pro tip:** 빠른 실험을 위해 Aspose.PDF의 무료 평가 라이선스를 사용하세요; 작은 워터마크가 추가되지만 모든 기능을 테스트할 수 있습니다. + +## C#로 PDF에 사각형 그리기 + +The core of the task is creating a `RectangleShape`, setting its size and stroke, and attaching it to a `Page`. The following H2 header contains the primary keyword, satisfying SEO requirements. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### 각 단계에 대한 설명 + +| Step | Why it matters | +|------|----------------| +| **1️⃣ Create a new PDF document** | 페이지와 그래픽을 담을 컨테이너를 초기화합니다. | +| **2️⃣ Add a blank page** | `Page` 객체가 필요합니다. 도형은 문서가 아니라 페이지에 첨부되기 때문입니다. | +| **3️⃣ Define the rectangle bounds** | 여기가 **how to define rectangle dimensions**을 수행하는 부분입니다. `Rectangle` 생성자는 `x`, `y`, `width`, `height`를 포인트 단위로 받습니다 (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape`은 사각형을 렌더링하는 Aspose 클래스입니다. `StrokeColor`를 설정하면 외곽선을 정의하고, `FillColor`를 설정하면 채워진 색을 지정할 수 있습니다. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary`는 사각형이 페이지 크기를 초과하면 예외를 발생시켜 손상된 PDF를 방지합니다. | +| **6️⃣ Add the shape to the page** | 도형이 페이지의 콘텐츠 스트림에 추가됩니다. | +| **7️⃣ Save the PDF** | 문서를 파일에 저장하여 모든 PDF 뷰어에서 열 수 있게 합니다. | + +결과물인 `RectangleDemo.pdf`에는 페이지의 왼쪽 상단에 위치한 검은색 사각형이 포함되며, 정확히 500 pt 너비와 700 pt 높이를 가집니다. + +![draw rectangle on pdf example](https://example.com/rectangle-demo.png "draw rectangle on pdf example") + +*이미지 대체 텍스트: draw rectangle on pdf example는 PDF 페이지의 왼쪽 상단에 검은 사각형이 표시된 예시입니다.* + +## 다양한 페이지 크기에 맞게 사각형 크기 정의하기 + +위 코드 조각은 고정값(`500 x 700`)을 사용합니다. 실제 애플리케이션에서는 사각형이 페이지의 너비와 높이에 맞게 조정되어야 하는 경우가 많습니다. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Key points:** + +* `page.PageInfo.Width`와 `Height`를 사용하여 실제 페이지 크기를 읽습니다. +* 계수(예: `0.8f`)를 곱하면 페이지의 비율로 차원을 표현할 수 있습니다. +* 중앙 정렬은 페이지 크기에서 사각형 크기를 빼고 남은 값을 절반으로 나누어 얻습니다. + +## 흔히 발생하는 실수와 회피 방법 + +| Pitfall | Why it happens | Fix | +|---------|----------------|-----| +| 사각형이 페이지를 넘어감 | 고정된 차원이 페이지 크기보다 큽니다. | `page.CheckShapeBoundary`를 **도형을 추가하기 전에** 호출하고, 예외가 발생하면 차원을 조정합니다. | +| 스트로크가 보이지 않음 | `StrokeColor`가 기본값(`Color.Empty`)으로 남아 있습니다. | `StrokeColor`를 명시적으로 설정합니다(예: `Color.Black`). | +| 사각형이 화면 밖에 표시됨 | PDF 좌표계는 왼쪽 하단이 원점이며, 화면식 좌표(왼쪽 상단)를 사용하면 뒤집혀 표시됩니다. | 원점 `(0,0)`이 왼쪽 하단임을 기억하세요. `y` 값을 조정하거나 `pageHeight - desiredY`를 사용합니다. | +| 예상치 못한 선 두께 | 기본 선 두께가 인쇄에 너무 얇을 수 있습니다. | `rectangleShape.LineWidth = 2;`를 설정하여 두께를 늘립니다. | + +## 예제 확장하기 + +Once you can **draw rectangle on pdf**, you can easily add other shapes: + +* **EllipseShape** – 원이나 타원에 사용. +* **PolygonShape** – 사용자 정의 다각형에 사용. +* **TextFragment** – 사각형에 라벨을 붙일 때 사용. + +모든 도형은 동일한 워크플로우를 따릅니다: 경계 정의, 외관 설정, 경계 검증, 그리고 페이지에 추가. + +## 완전한 실행 가능한 프로그램 + +Below is the full program that combines the basic rectangle and the dynamic sizing example. Copy it into a new console project, restore the `Aspose.PDF` NuGet package, and run. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**예상 출력:** +`CombinedRectangles.pdf`를 엽니다. 왼쪽 하단에 고정된 검은색 사각형과 중앙에 위치한 어두운 파란색 사각형(연한 노란색 채우기)이 표시됩니다. 두 사각형 모두 페이지 여백을 준수합니다. + +## 결론 + +You now know how to **draw rectangle on pdf** with C# and precisely **how to define rectangle dimensions** for both fixed and responsive layouts. The approach uses Aspose.PDF’s `RectangleShape`, boundary checking, and simple arithmetic to adapt to any page size. + +다음으로, 다음을 탐색해 볼 수 있습니다: + +* **fill colors**와 **line styles**(점선, 파선) 추가 – 부키워드: how to define rectangle dimensions with style. +* 여러 도형을 하나의 `Page`에 결합하여 차트나 양식을 만들기. +* PDF를 파일로 저장하는 대신 웹 API용 스트림으로 내보내기. + +다양한 크기, 색상, 위치를 실험하여 .NET 애플리케이션에서 PDF 그래픽을 마스터하세요! 즐거운 코딩 되세요! + +## 다음에 배울 내용은? + +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. + +- [Aspose.PDF for .NET로 PDF 사용자 정의하기: 페이지 여백 설정 및 선 그리기](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Aspose.PDF for .NET을 사용하여 PDF에 페이지 스탬프 추가하기: 완전 가이드](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Aspose.PDF for .NET을 사용하여 PDF에 페이지 번호 스탬프 추가하기 | 워터마크 및 배경](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/conversion-export/_index.md b/pdf/korean/net/conversion-export/_index.md index fba86a4d00..49c6a7ae40 100644 --- a/pdf/korean/net/conversion-export/_index.md +++ b/pdf/korean/net/conversion-export/_index.md @@ -230,6 +230,8 @@ Aspose.PDF for .NET을 사용하여 PDF 문서를 TIFF 이미지로 변환하는 ### [Aspose로 PDF 저장하기 – 단계별 가이드](./how-to-save-pdf-with-aspose-step-by-step-guide/) Aspose를 사용하여 PDF 파일을 저장하는 방법을 단계별로 안내합니다. +### [C#에서 Aspose.PDF를 사용하여 PDF를 HTML로 저장하고 PDF/X‑4로 변환하기](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/korean/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..964272f114 --- /dev/null +++ b/pdf/korean/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.PDF for C#를 사용하여 PDF를 HTML로 저장하고 PDF를 PDF/X‑4로 변환합니다. 단계별 코드는 + HTML 내보내기, 서명 목록 표시 및 그래픽 상태 편집을 보여줍니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: ko +lastmod: 2026-08-14 +og_description: PDF를 HTML로 저장하고 Aspose.PDF for C#를 사용해 PDF를 PDF/X‑4로 변환합니다. HTML 내보내기, + 서명 목록 확인 및 그래픽 상태 편집에 대한 전체 가이드를 확인하세요. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Aspose.PDF를 사용하여 PDF를 HTML로 저장하고 PDF/X‑4로 변환하기 – C# 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Aspose.PDF를 사용하여 C#에서 PDF를 HTML로 저장하고 PDF/X‑4로 변환 +url: /ko/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF를 HTML로 저장하고 Aspose.PDF를 사용해 PDF/X‑4로 변환하기 (C#) + +PDF를 **HTML로 저장**해야 할 경우, Aspose.Pdf는 과정을 간단하게 만들어 줍니다. 이 튜토리얼에서는 **PDF를 PDF/X‑4로 변환**하고, 서명 필드를 나열하며, 사용자 정의 ExtGState를 추가하는 전체 엔드‑투‑엔드 워크플로우를 보여줍니다. + +다음 내용을 배울 수 있습니다: + +* 래스터 이미지를 건너뛰면서 PDF를 깔끔한 HTML로 내보내기. +* PDF 문서를 인쇄 준비가 된 PDF/X‑4 표준으로 변환하기. +* PDF의 모든 서명 필드를 열거하기. +* 첫 페이지에 사용자 정의 그래픽 상태(ExtGState) 삽입하기. + +모든 코드는 .NET 6 이상에서 실행되며 Aspose.Pdf for .NET NuGet 패키지가 필요합니다. + +## Prerequisites + +| 요구 사항 | 이유 | +|-----------|------| +| .NET 6 SDK 이상 | C# 샘플에 대한 런타임을 제공합니다. | +| Visual Studio 2022 (또는 기타 C# IDE) | 편리한 편집 및 디버깅을 가능하게 합니다. | +| Aspose.Pdf for .NET (v23.12 이상) | 튜토리얼에서 사용되는 `Document`, `PdfFormatConversionOptions`, `HtmlSaveOptions` 클래스를 제공합니다. | +| 샘플 PDF 파일 (`sample.pdf`) | 처리될 원본 문서입니다. | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +The program performs six logical steps: + +1. 소스 PDF를 로드합니다. +2. 모든 서명 필드 이름을 나열합니다. +3. **PDF를 PDF/X‑4로 변환**하고 결과를 저장합니다. +4. 래스터 이미지를 건너뛰면서 **PDF를 HTML로 저장**합니다. +5. 첫 페이지에 사용자 정의 ExtGState(그래픽 상태)를 추가합니다. +6. 새 그래픽 상태가 적용된 수정된 PDF를 저장합니다. + +Each step is explained below, with complete code and the reasoning behind the choices. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*왜 중요한가*: `Document`는 전체 PDF 파일을 나타냅니다. 한 번 로드하면 이후 모든 작업에서 동일한 객체를 재사용할 수 있어 I/O 오버헤드가 감소합니다. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*왜 중요한가*: 서명 필드 이름을 알면 나중에 디지털 서명을 검증, 제거 또는 교체할 때 필수적입니다. `Signatures` 컬렉션은 필드에 대한 빠르고 읽기 전용 뷰를 제공합니다. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**핵심 포인트** + +* `PdfStandard.PdfX4`는 Aspose.Pdf에 필요한 모든 리소스(폰트, 색상 프로파일)를 포함하고 PDF/X‑4 제약 조건을 적용하도록 지시합니다. +* 변환은 메모리 내에서 수행되며, 최종 파일만 디스크에 기록되어 작업이 빠르게 진행됩니다. + +> **Pro tip:** 워크플로우에서 규격 준수가 엄격한 경우 PDF/X‑4 검증기(예: Adobe Preflight)로 출력물을 확인하십시오. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**왜 이 작업을 할까**: HTML 출력은 웹 미리보기나 콘텐츠 인덱싱에 유용합니다. 래스터 이미지(`SkipRasterImages = true`)를 건너뛰면 HTML이 가벼워지고 로드 시간이 개선됩니다, 특히 원본 PDF에 고해상도 스캔이 포함된 경우에 효과적입니다. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: An **ExtGState** object controls transparency, blend mode, and other graphics parameters. By adding `GS0`, you can later reference this state in content streams (e.g., for semi‑transparent overlays). The code uses the low‑level COS API because Aspose.Pdf does not expose a high‑level wrapper for ExtGState creation. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +The final file (`sample_with_extgstate.pdf`) contains: + +* 모든 원본 페이지와 콘텐츠. +* 규격에 맞는 PDF/X‑4 버전(`sample_pdfx4.pdf`). +* 래스터 이미지가 없는 HTML 표현(`sample.html`). +* 첫 페이지 리소스에 연결된 사용자 정의 ExtGState(`GS0`). + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +If the source PDF has no signatures, the loop prints nothing but still proceeds without error. + +## Common variations and edge cases + +| 상황 | 조정 | +|------|------| +| **PDF에 페이지가 없음** | `doc.Pages[1]`에 접근하기 전에 `doc.Pages.Count`를 확인하여 `IndexOutOfRangeException`을 방지합니다. | +| **PDF/X‑4 대신 PDF/A‑2b가 필요할 경우** | `PdfFormatConversionOptions`에서 `PdfStandard.PdfX4`를 `PdfStandard.PdfA2b`로 변경합니다. | +| **래스터 이미지를 유지하고 싶을 경우** | `HtmlSaveOptions`에서 `SkipRasterImages = false`로 설정하거나 해당 속성을 생략합니다. | +| **여러 ExtGState 객체** | `extGStateDict`에 추가할 때 고유 키(`GS1`, `GS2`, …)를 사용합니다. | +| **대용량 PDF(수백 MB)** | 저장하기 전에 `doc.OptimizeResources = true`를 활성화하여 메모리 사용량을 줄입니다. | + +## Full source code (runnable) + + + +## 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. + +- [포괄적인 가이드: Aspose.PDF .NET을 사용한 PDF를 HTML로 변환하기 (맞춤 전략)](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Aspose.PDF .NET을 사용한 맞춤 이미지 URL로 PDF를 HTML로 변환하기: 포괄적인 가이드](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Aspose.PDF .NET을 사용한 PDF to HTML 변환: 이미지를 외부 PNG로 저장](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/programming-with-forms/_index.md b/pdf/korean/net/programming-with-forms/_index.md index 81a7f925d4..81af07ebaa 100644 --- a/pdf/korean/net/programming-with-forms/_index.md +++ b/pdf/korean/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Aspose.PDF for .NET "Forms 프로그래밍" 튜토리얼은 대화형 PDF 양식 | [라디오 버튼 캡션 설정](./set-radio-button-caption/) Aspose.PDF for .NET을 사용하여 PDF에 라디오 버튼 캡션을 설정하는 방법을 알아보세요. 이 단계별 가이드는 PDF 양식을 로드, 수정 및 저장하는 방법을 안내합니다. | | [텍스트 상자](./text-box/) | Aspose.PDF for .NET을 사용하여 PDF에 텍스트 상자를 손쉽게 추가하는 방법을 단계별 가이드를 통해 알아보세요. 사용자 상호 작용을 향상시켜 보세요. | | [Aspose를 사용하여 PDF 만들기 – 양식 필드 및 페이지 추가](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aspose.PDF for .NET을 사용하여 PDF에 양식 필드와 페이지를 추가하는 방법을 단계별로 안내합니다. | +| [C#에서 PDF 양식 필드 만들기 – 단계별 가이드](./create-pdf-form-field-in-c-step-by-step-guide/) | Aspose.PDF for .NET을 사용하여 C#에서 PDF 양식 필드를 생성하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/korean/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..a65dfa6be0 --- /dev/null +++ b/pdf/korean/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-14 +description: C#로 PDF 양식 필드를 빠르게 만들기. Aspose.PDF를 사용하여 PDF에 텍스트 상자를 추가하고 텍스트 상자를 포함하도록 + PDF를 수정하는 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: ko +lastmod: 2026-08-14 +og_description: C#로 PDF 양식 필드 만들기. 이 튜토리얼에서는 PDF에 텍스트 상자를 추가하고 Aspose.PDF를 사용하여 텍스트 + 상자를 포함하도록 PDF를 수정하는 방법을 보여줍니다. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: C#에서 PDF 양식 필드 만들기 – 완전한 프로그래밍 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: C#에서 PDF 양식 필드 만들기 – 단계별 가이드 +url: /ko/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 PDF 양식 필드 만들기 – 단계별 가이드 + +문서에 **create pdf form field**를 만들어야 한다면, 이 가이드는 전체 과정을 단계별로 안내합니다. **add text box to pdf** 페이지를 정확히 어떻게 추가하고, Aspose.PDF 라이브러리 for .NET을 사용해 **modify pdf to include text box**를 수행하는 방법을 보여드립니다. + +PDF 양식 작업은 청구 시스템, 설문 조사 또는 사용자 입력을 수집하는 모든 워크플로우에서 흔히 요구됩니다. 이 튜토리얼을 마치면 재사용 가능한 코드 스니펫을 얻어, 완전한 기능을 갖춘 텍스트 박스 필드를 생성하고 원하는 위치에 배치한 뒤, 업데이트된 PDF를 저장할 수 있습니다—C# 프로젝트를 떠날 필요 없이. + +## 사전 요구 사항 + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +* .NET 6.0 이상 (코드는 .NET Framework 4.7+에서도 작동합니다) +* Visual Studio 2022 또는 C#를 지원하는 기타 IDE +* 활성화된 Aspose.PDF for .NET 라이선스 (무료 체험판도 개발에 사용할 수 있습니다) +* `input.pdf` 라는 이름의 PDF 파일을 알려진 디렉터리에 배치 (튜토리얼에서는 `YOUR_DIRECTORY` 를 자리표시자로 사용) + +> **Pro tip:** 아직 라이선스가 없으시다면 Aspose 웹사이트에서 임시 키를 요청할 수 있습니다; 라이브러리는 코드 변경 없이 평가 모드에서도 동작합니다. + +## C#에서 pdf form field 만들기 (개요) + +1. 기존 PDF 문서를 로드합니다. +2. `TextBoxField` 를 인스턴스화하고 이름 및 외관을 설정합니다. +3. 대상 페이지에 시각적 사각형을 정의하는 위젯 주석을 추가합니다. +4. 필드를 문서의 폼 컬렉션에 삽입합니다. +5. 수정된 PDF를 저장합니다. + +각 단계는 아래에서 자세히 설명되며, 전체 코드 예제와 API 호출에 대한 이유를 제공합니다. + +## Step 1: Load the PDF document + +첫 번째 작업은 소스 PDF를 읽는 것입니다. Aspose.PDF는 PDF 파일을 `Document` 클래스로 표현합니다. 문서를 로드하면 페이지, 폼 컬렉션 및 기타 구조에 접근할 수 있습니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**왜 이것이 중요한가:** +파일을 로드하면 PDF의 메모리 모델이 생성되어 원본 파일을 손상시키지 않고 객체를 추가, 제거 또는 편집할 수 있습니다. `Document` 객체는 또한 `Form` 속성을 제공하는데, 여기에서 나중에 **add text box to pdf**를 수행하게 됩니다. + +## Step 2: Create a text box field + +텍스트 박스 필드는 사용자가 자유 형식 텍스트를 입력할 수 있게 하는 폼 필드 유형입니다. Aspose.PDF에서는 대상 페이지와 위젯의 초기 크기를 정의하는 사각형을 전달하면서 `TextBoxField` 를 인스턴스화하여 생성합니다. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**왜 이것이 중요한가:** +* `PartialName` 은 폼 처리 도구(예: Adobe Acrobat, 서버‑사이드 파서)가 입력된 값을 검색할 때 사용하는 키입니다. +* 여기서 전달하는 사각형은 *초기* 위젯 크기만 정의합니다; 이후 위젯 주석을 통해 시각적 위치를 조정할 수 있습니다. +* `DefaultAppearance` 를 설정하면 박스 안의 텍스트가 뷰어 전반에 걸쳐 일관되게 렌더링됩니다. + +## Step 3: Define the visual widget annotation + +폼 필드는 각 페이지에 필드가 표시되는 위치를 제어하는 하나 이상의 **widget annotations** 를 가질 수 있습니다. 위젯을 추가하면 동일한 논리적 필드를 다른 위치 혹은 여러 페이지에 배치할 수 있습니다. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**왜 이것이 중요한가:** +위젯 사각형은 사용자가 보는 화면 좌표를 결정합니다. 이 단계를 건너뛰면 필드가 PDF 데이터 구조에 존재하지만 최종 사용자에게는 보이지 않을 수 있습니다. 위젯을 추가하는 것이 실제로 **add text box to pdf**를 수행하는 단계입니다. + +## Step 4: Add the configured field to the document’s form + +이제 `TextBoxField` 가 완전히 구성되었으므로 PDF의 폼 컬렉션에 등록해야 합니다. 이렇게 하면 필드가 인터랙티브 폼의 일부가 되고 저장됩니다. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**왜 이것이 중요한가:** +`pdfDocument.Form` 에 필드를 추가하지 않으면 PDF 뷰어가 위젯 주석을 무시하고 필드 데이터가 전송되지 않습니다. 이 라인은 **modify pdf to include text box** 작업을 최종 확정합니다. + +## Step 5: Save the updated PDF + +마지막으로 변경 사항을 디스크에 기록합니다. 원본 파일을 덮어쓰거나 새 파일을 만들 수 있으며, 예제에서는 `output.pdf` 로 저장합니다. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +`output.pdf` 를 Adobe Acrobat Reader 로 열면 2페이지에 “Comments” 라는 레이블이 붙은 사각형 텍스트 박스가 표시됩니다. 사용자는 박스를 클릭해 입력할 수 있으며, 입력된 텍스트는 PDF 폼 데이터의 일부가 됩니다. + +## Full working example + +모든 조각을 합치면 다음과 같은 완전한 실행 가능한 프로그램이 됩니다. 새 콘솔 프로젝트에 복사하고 `YOUR_DIRECTORY` 를 실제 폴더 경로로 바꾼 뒤 실행하세요. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**예상 출력:** +프로그램을 실행하면 콘솔에 두 개의 확인 메시지가 출력됩니다. `output.pdf` 를 열면 사용자가 댓글을 입력할 수 있는 2페이지의 텍스트 박스를 확인할 수 있습니다. 폼이 제출될 때(예: Adobe Acrobat 의 “Submit” 버튼) 필드 이름 `Comments` 가 내보낸 FDF 또는 XFDF 데이터에 나타납니다. + +## Common variations and edge cases + +| 상황 | 코드 적용 방법 | +|-----------|-----------------------| +| **다른 페이지에 필드 추가** | `pdfDocument.Pages[1]` 를 원하는 페이지 인덱스(`0`‑기반)로 변경합니다. | +| **다중 행 텍스트 박스 만들기** | 위젯을 추가하기 전에 `textBox.Multiline = true;` 로 설정합니다. | +| **기본값 설정** | `textBox.Value = "Enter your comments here";` 를 할당합니다. | +| **필수 필드 지정** | `textBox.Required = true;` 로 설정합니다. | +| **여러 페이지에 필드 배치** | 대상 페이지의 각 추가 사각형에 대해 `textBox.AddWidgetAnnotation` 을 호출합니다. | +| **커스텀 폰트 사용** | `FontRepository.AddFont("path/to/font.ttf")` 로 폰트를 로드하고 `DefaultAppearance` 에 참조합니다. | + +**Pro tip:** 사각형 좌표가 페이지 크기(`pdfDocument.Pages[1].Rect`)와 일치하는지 항상 검증하세요. 위젯이 페이지 경계 밖에 있으면 뷰어가 필드를 잘라내거나 숨길 수 있습니다. + +## Testing the form field + +1. `output.pdf` 를 Adobe Acrobat Reader 로 엽니다. +2. “Comments” 박스를 클릭하면 커서가 나타납니다. +3. 텍스트를 입력하고 **Tab** 키를 누르거나 다른 곳을 클릭합니다. +4. **File → Save As** 를 선택해 입력값을 저장합니다. +5. (선택) Aspose.PDF 의 `Form` API 를 사용해 값을 프로그래밍 방식으로 추출합니다: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +이 스니펫은 필드가 보일 뿐만 아니라 코드로도 값을 가져올 수 있음을 보여줍니다—서버‑사이드 처리에 필수적입니다. + +## Conclusion + +이제 C#에서 **create pdf form field** 를 처음부터 끝까지 구현하는 방법을 알게 되었습니다. 튜토리얼에서는 PDF 로드, `TextBoxField` 구성, 위젯 주석 추가, 필드 등록, 결과 저장 순으로 진행했습니다. 이 빌딩 블록을 활용하면 문서에 **add text box to pdf** 를 삽입하고, **modify pdf to include text box** 를 수행하며, 체크박스, 라디오 버튼, 드롭다운 등 다른 필드 유형에도 동일한 접근 방식을 확장할 수 있습니다. + +다음으로는 **양식 데이터 추출**, **PDF 양식 평탄화**, **테두리 및 색상으로 필드 스타일링** 같은 관련 주제를 살펴보세요. 모두 방금 마스터한 핵심 API를 기반으로 하여 C#만으로 정교한 인터랙티브 PDF를 만들 수 있습니다. + +행복한 코딩 되시고, 다양한 사각형, 폰트, 검증 규칙을 실험해 보면서 애플리케이션 요구에 맞게 조정해 보세요! + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 시연한 기술을 기반으로 하여 밀접하게 연관된 주제를 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 포함해 추가 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용하도록 돕습니다. + +- [Aspose로 PDF 문서 만들기 – 페이지, 텍스트 박스 및 폼 추가](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Aspose로 PDF 만들기 – 폼 필드 및 페이지 추가](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose.PDF .NET을 사용해 PDF에 텍스트 스탬프 추가하기: 종합 가이드](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/programming-with-operators/_index.md b/pdf/korean/net/programming-with-operators/_index.md index b7f4480864..e33eb0bd5d 100644 --- a/pdf/korean/net/programming-with-operators/_index.md +++ b/pdf/korean/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET의 "연산자를 사용한 프로그래밍" 튜토리얼은 | [페이지에 XForm 그리기](./draw-xform-on-page/) | 이 포괄적인 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 PDF로 XForms를 그리는 방법을 알아보세요. | | [PDF 연산자](./pdf-operators/) | Aspose.PDF for .NET에서 PDF 연산자를 사용하는 단계별 가이드입니다. PDF 페이지에 이미지를 추가하고 위치를 지정합니다. | | [PDF 파일에서 그래픽 개체 제거](./remove-graphics-objects/) Aspose.PDF for .NET을 사용하여 PDF 파일에서 그래픽 객체를 제거하는 방법을 단계별 가이드에서 알아보세요. PDF 조작 작업을 간소화하세요. | +| [Aspose.Pdf를 사용하여 C#에서 빈 PDF 사전 만들기](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Aspose.PDF for .NET을 이용해 C#에서 빈 PDF 사전을 생성하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/korean/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..eec405bc40 --- /dev/null +++ b/pdf/korean/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.Pdf를 사용하여 C#에서 빈 PDF 사전을 생성하고 – ExtGState 컬렉션에 그래픽 상태를 추가하고 PDF를 + 프로그래밍 방식으로 수정하는 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: ko +lastmod: 2026-08-14 +og_description: Aspose.Pdf를 사용하여 C#에서 빈 PDF 사전을 생성합니다. 이 완전한 가이드를 따라 PDF의 ExtGState + 컬렉션에 사용자 정의 그래픽 상태를 추가하세요. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: C#에서 빈 PDF 사전 만들기 – Aspose.Pdf 단계별 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Aspose.Pdf를 사용하여 C#에서 빈 PDF 사전 만들기 +url: /ko/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#와 Aspose.Pdf를 사용하여 빈 PDF 사전 만들기 + +PDF 파일을 다루는 동안 **create empty PDF dictionary** 객체를 만들어야 할 경우, 이 가이드는 Aspose.Pdf 라이브러리를 사용해 C#에서 정확히 어떻게 수행하는지 보여줍니다. 사용자 정의 그래픽 상태를 구축하든, 새로운 리소스를 추가하든, 나중에 사용할 템플릿을 준비하든, 아래 단계는 완전하고 실행 가능한 솔루션을 제공합니다. + +PDF를 로드하고, 첫 번째 페이지의 리소스 사전에 접근하고, 새로운 `CosPdfDictionary`를 만든 뒤 이를 `ExtGState` 컬렉션에 삽입하는 방법을 배웁니다. 튜토리얼이 끝날 때쯤이면 새로 만든 사전이 포함된 `output.pdf` 파일을 얻게 됩니다. + +## Prerequisites + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +- .NET 6.0 이상 (.NET Framework 4.6+에서도 동작합니다) +- Visual Studio 2022 또는 선호하는 C# IDE +- Aspose.Pdf for .NET 라이선스(또는 임시 평가 키) +- **input.pdf** 라는 샘플 PDF 파일을 직접 관리하는 폴더에 배치 (폴더 경로는 `dataDir` 로 사용됩니다) + +`Aspose.Pdf` 외에 추가 NuGet 패키지는 필요하지 않습니다. + +## Step 1: Set up the project and reference Aspose.Pdf + +1. Visual Studio에서 새로운 **Console App** 프로젝트를 생성합니다. +2. **NuGet Package Manager**를 열고 `Aspose.Pdf`를 설치합니다: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. `Program.cs` 상단에 다음 `using` 지시문을 추가합니다: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *왜 이 네임스페이스인가요?* `Aspose.Pdf`는 핵심 `Document` 클래스를 제공하고, `Aspose.Pdf.Operators.Gfx`는 `CosPdfDictionary`, `CosPdfNumber` 및 **create empty PDF dictionary** 구조를 만들 때 필요한 저수준 PDF 객체들을 제공합니다. + +## Step 2: Load the source PDF + +첫 번째 작업은 기존 PDF 파일을 `Document` 인스턴스로 로드하는 것입니다. 이를 통해 모든 페이지, 리소스 및 저수준 사전에 접근할 수 있습니다. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*설명*: `Document`는 파일을 메모리로 읽어 내부 구조를 준비합니다. `using` 문은 처리가 끝난 후 파일 핸들이 해제되도록 보장합니다. + +## Step 3: Access the first page’s resource dictionary + +각 PDF 페이지에는 폰트, 이미지, ExtGState 객체 및 기타 공유 리소스를 그룹화하는 **Resources** 사전이 있습니다. 새로운 그래픽 상태를 삽입하려면 이 사전을 편집해야 합니다. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor`는 PDF 사전을 C# `Dictionary`처럼 다룰 수 있게 해주는 도우미 클래스입니다. + +## Step 4: Retrieve (or create) the ExtGState collection + +`ExtGState`는 불투명도, 블렌드 모드, 선 두께와 같은 그래픽 상태 객체를 보관합니다. 소스 PDF에 이미 `ExtGState` 항목이 있으면 재사용하고, 없으면 새로운 빈 사전을 생성합니다. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*왜 이 검사를 하나요?* 일부 PDF는 `ExtGState` 항목 자체를 생략합니다. 두 경우를 모두 처리함으로써 튜토리얼이 어떤 입력 파일에도 견고하게 동작합니다. + +## Step 5: **Create empty PDF dictionary** for a new graphics state + +이제 실제로 새로운 그래픽 상태 매개변수를 정의하는 **create empty PDF dictionary** 객체를 생성합니다. 사전은 비어 있는 상태에서 시작하며, 필요한 키들을 추가합니다: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### What each entry does + +| 키 | 형식 | 의미 | +|-----|------|---------| +| **CA** | `CosPdfNumber` | 스트로크 불투명도 (범위 0‑1). | +| **ca** | `CosPdfNumber` | 채우기 불투명도 (범위 0‑1). | +| **BM** | `CosPdfName` | 블렌드 모드; `"Normal"`이 가장 일반적입니다. | + +**빈 PDF 사전**으로 시작했기 때문에 어떤 항목을 추가할지 완전히 제어할 수 있습니다. 필요에 따라 `LW`(선 두께)나 `LC`(선 캡)와 같은 추가 그래픽 상태 매개변수로 사전을 확장할 수 있습니다. + +## Step 6: Insert the new graphics state into ExtGState + +`ExtGState` 사전은 각 항목이 이름(`GS0`, `GS1` 등)으로 식별되는 맵처럼 동작합니다. 고유 키 아래에 방금 만든 사전을 추가합니다. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +여러 상태를 추가하려면 접미사(`GS1`, `GS2`, …)를 증가시켜 이름 충돌을 방지하세요. + +## Step 7: Save the modified PDF + +마지막으로 변경 내용을 디스크에 저장합니다. `Save` 메서드는 업데이트된 사전을 자동으로 직렬화합니다. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +任意의 PDF 뷰어에서 `output.pdf`를 열고 **Resources → ExtGState** 항목을 확인해 보세요(대부분의 뷰어는 이를 숨기지만 Adobe Acrobat Preflight이나 PDF‑Tron 같은 도구에서는 확인할 수 있습니다). 정의한 불투명도와 블렌드 모드 값이 포함된 `GS0` 항목이 보일 것입니다. + +## Complete working example + +모든 코드를 하나로 합치면 다음과 같이 `Program.cs`에 복사‑붙여넣기만 하면 실행할 수 있는 전체 프로그램이 됩니다: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**예상 출력** – 콘솔에 확인 메시지가 출력되고, `output.pdf`에 `ExtGState` 아래 새로운 `GS0` 항목이 포함됩니다. `gs` 연산자를 통해 `GS0`을 참조하는 페이지를 렌더링하면 스트로크는 완전 불투명하고, 채우기는 50 % 투명하게 표시됩니다. + +## Common questions and edge‑case handling + +| 질문 | 답변 | +|----------|--------| +| *PDF에 페이지가 여러 개 있는 경우는 어떻게 하나요?* | 예제는 첫 번째 페이지(`Pages[1]`)를 대상으로 합니다. 모든 페이지에 적용하려면 `pdfDocument.Pages`를 순회하면서 각 페이지의 리소스에 대해 3‑5 단계를 반복하면 됩니다. | +| *이미 “GS0”라는 ExtGState 항목이 있는 페이지에 사전을 추가할 수 있나요?* | 가능합니다. 하지만 기존 항목을 덮어쓰지 않도록 다른 키(`GS1`, `GS2`, …)를 사용해야 합니다. | +| *저장 후에도 사전을 수정하는 것이 안전한가요?* | `Save`를 호출하면 메모리상의 표현이 파일과 분리됩니다. 필요하다면 `Document` 객체를 계속 편집하고 다시 `Save`를 호출할 수 있습니다. | +| *Aspose.Pdf를 사용하려면 라이선스가 필요한가요?* | | + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 포함하고 있어 추가 API 기능을 마스터하고 프로젝트에 적용할 수 있는 대체 구현 방식을 탐색하는 데 도움이 됩니다. + +- [Aspose.PDF for .NET을 사용하여 PDF에서 점선 만들기: 단계별 가이드](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF .NET을 사용하여 PDF에서 그래픽 제거하기: 완전 가이드](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Aspose.PDF for .NET을 사용하여 다중 레이어 PDF 만들기: 종합 가이드](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/programming-with-security-and-signatures/_index.md b/pdf/korean/net/programming-with-security-and-signatures/_index.md index fa24a89008..3ff448e5be 100644 --- a/pdf/korean/net/programming-with-security-and-signatures/_index.md +++ b/pdf/korean/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [C#에서 PDF 서명 확인 – 서명된 PDF 파일 읽는 방법](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Aspose.PDF for .NET을 사용하여 C#에서 서명된 PDF 파일의 서명을 확인하고 읽는 방법을 단계별로 안내합니다. | | [PDF 파일 복구 방법 – Aspose.Pdf와 함께하는 완전한 C# 가이드](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Aspose.PDF for .NET을 사용하여 PDF 파일을 복구하는 방법을 단계별로 안내합니다. | | [C#에서 PDF 서명 확인 – 완전한 프로그래밍 가이드](./verify-pdf-signature-in-c-complete-programming-guide/) | Aspose.PDF for .NET을 사용하여 C#에서 PDF 서명을 검증하고 확인하는 방법을 단계별로 안내합니다. | +| [C#에서 서명 옵션 만들기 – 디지털 서명 완전 가이드](./create-signature-options-in-c-full-guide-to-digital-signing/) | Aspose.PDF for .NET을 사용하여 C#에서 다양한 디지털 서명 옵션을 설정하고 적용하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/korean/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..2de740ac18 --- /dev/null +++ b/pdf/korean/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-08-14 +description: C#에서 디지털 서명을 적용하기 위한 서명 옵션을 생성합니다. 서명을 구성하는 방법, 사용자 정의 해시 함수를 구현하는 방법, + 그리고 프로그래밍 방식으로 문서에 서명하는 방법을 배웁니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: ko +lastmod: 2026-08-14 +og_description: C#에서 서명 옵션을 생성하고 디지털 서명을 적용합니다. 이 튜토리얼은 서명을 구성하고, 사용자 정의 해시 함수를 추가하며, + 문서에 서명하는 과정을 단계별로 안내합니다. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: C#에서 서명 옵션 만들기 – 단계별 디지털 서명 가이드 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: C#에서 서명 옵션 만들기 – 디지털 서명 완전 가이드 +url: /ko/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 서명 옵션 만들기 – 디지털 서명 전체 가이드 + +C#에서 `SignatureOptions` 클래스를 사용해 디지털 서명 워크플로를 구성합니다. 이 튜토리얼에서는 디지털 서명을 적용하고, 사용자 정의 해시 함수를 구현하며, 문서에 서명하는 방법을 보여줍니다. .NET 애플리케이션에서 PDF, XML 또는 임의의 바이너리 페이로드에 서명해야 했던 경우, 아래 단계들을 그대로 따라 하면 바로 실행 가능한 솔루션을 얻을 수 있습니다. + +다음 내용을 배울 수 있습니다: + +* 사용자 정의 해시 알고리즘으로 `SignatureOptions` 구성하기 +* 서명 메서드를 올바르게 호출하기 +* 서명이 적용됐는지 검증하기 +* 서명 구성 시 흔히 발생하는 실수를 피하기 + +필수 조건은 최신 .NET SDK(≥ .NET 6)와 `SignatureOptions`를 제공하는 서명 라이브러리(예: **GroupDocs.Signature**, **Aspose.Signature** 또는 유사 API)뿐이며, 별도의 외부 도구는 필요하지 않습니다. + +--- + +## Prerequisites + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6 SDK 또는 그 이후 버전 | 예제에서 사용되는 최신 언어 기능을 제공합니다. | +| 서명 라이브러리 NuGet 패키지(e.g., `GroupDocs.Signature`) | `SignatureOptions` 타입과 `Sign` 확장 메서드를 제공합니다. | +| 개인 키 또는 인증서에 대한 접근 | 검증 가능한 디지털 서명을 생성하는 데 필요합니다. | + +표준 CLI로 라이브러리를 설치합니다: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Step 1: Create signature options + +첫 번째 단계는 `SignatureOptions` 인스턴스를 생성하고 서명 프로세스를 제어하는 속성을 설정하는 것입니다. 이 객체는 라이브러리에게 *무엇을* 서명하고 *어떻게* 서명할지를 알려줍니다. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Why this matters:** `SignatureOptions`는 코드와 서명 엔진 사이의 계약 역할을 합니다. 미리 구성해 두면 여러 문서에 서명할 때 반복되는 보일러플레이트 코드를 피할 수 있습니다. + +--- + +## Step 2: Implement a custom hash function + +*사용자 정의 해시 함수*를 사용하면 서명 알고리즘이 해싱하는 다이제스트를 완전히 제어할 수 있습니다. 기본 해시(SHA‑256)가 규정 요구사항을 충족하지 못하거나 문서의 일부만 해싱해야 할 때 유용합니다. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Why this matters:** `CustomSignHash`에 할당함으로써 라이브러리의 내부 해싱 단계를 `MyHash`로 교체합니다. 이제 서명 엔진은 함수가 반환한 바이트를 서명하게 되며, 맞춤 정책을 만족할 수 있습니다. + +--- + +## Step 3: Load the document and apply digital signature + +옵션을 준비했으면 이제 대상 파일을 열고 서명 메서드를 호출합니다. `Sign` 메서드는 라이브러리에서 제공되며, 설정된 `SignatureOptions`를 사용합니다. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Why this matters:** `Sign` 호출은 내부적으로 세 가지 작업을 수행합니다: + +1. **해시 계산** – 이제 사용자 정의 해시 함수에 위임됩니다. +2. **서명 생성** – 라이브러리 구성에 제공된 개인 키를 사용합니다. +3. **임베딩** – 생성된 서명이 출력 파일에 첨부됩니다. + +어떤 단계에서든 실패하면 메서드는 `false`를 반환하므로, 오류를 우아하게 처리할 수 있습니다. + +--- + +## Step 4: Verify that the document is signed + +간단한 검증을 통해 서명이 올바르게 적용됐는지 확인합니다. 대부분의 라이브러리는 서명된 파일의 무결성을 검사하는 `Verify` 메서드를 제공합니다. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Why this matters:** 검증을 수행하면 서명 후 문서가 변조되지 않았음을 보장하고, 사용자 정의 해시가 호환 가능한 다이제스트를 생성했는지 확인할 수 있습니다. + +--- + +## How to configure signature for different file types + +동일한 `SignatureOptions` 객체를 PDF, Word 문서, 이미지, 일반 바이너리 등 여러 형식에 재사용할 수 있습니다. 필요한 유일한 변경은 해당 형식에 맞는 옵션 클래스(e.g., `PdfSignatureOptions`, `WordSignatureOptions`)로 교체하는 것입니다. JPEG 이미지에 대한 간단한 예시는 다음과 같습니다: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Why this matters:** 각 포맷에 맞게 *서명 옵션을 구성*하는 방법을 이해하면 해싱 로직을 다시 작성하지 않고도 여러 문서 유형에 동일한 코드베이스를 적용할 수 있습니다. + +--- + +## Common pitfalls and best practices + +| Pitfall | Recommended fix | +|---------|-----------------| +| `SignatureOptions` 생성 후 `CustomSignHash` 설정을 잊음 | 옵션 객체를 만든 직후 바로 대리자를 할당합니다. | +| 서명 인증서가 지원하지 않는 해시 알고리즘 사용 | 인증서의 키 사용 용도가 해시 길이와 일치하는지 확인합니다(e.g., RSA‑2048 + SHA‑512). | +| `Signature` 객체를 해제하지 않음 | `using` 블록으로 `Signature` 인스턴스를 감싸 파일 핸들을 해제합니다. | +| 서명된 파일을 원본 경로에 덮어씀 | 원본 문서를 보존하기 위해 항상 새로운 파일 경로(`outputPath`)에 저장합니다. | + +--- + +## Full working example + +아래는 모든 요소를 하나로 모은 독립 실행형 프로그램 예시입니다. 새 콘솔 프로젝트에 복사해 실행하면 콘솔에 성공 여부가 출력됩니다. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Expected output** + +``` +Signature verified successfully. +``` + +콘솔에 “Signing failed.” 또는 “Signature verification failed.”가 표시되면 인증서 구성을 다시 확인하고, 사용자 정의 해시가 예상 크기의 바이트 배열을 반환하는지 점검하십시오. + +--- + +## Conclusion + +이제 C#에서 **서명 옵션을 만들고**, **사용자 정의 해시 함수를 연결**하며, **디지털 서명을 적용**하는 방법을 알게 되었습니다. 튜토리얼에서는 옵션 구성, 파일 서명, 결과 검증이라는 전체 수명 주기를 다루었습니다. 동일한 `SignatureOptions` 인스턴스를 재사용하면 이미지, Word 파일, 원시 바이너리 등에 대한 **서명 구성 방법**도 손쉽게 적용할 수 있습니다. + +--- + +## What’s next? + +* 시각적 스탬프, 타임스탬프 서버, 인증서 체인 등 `SignatureOptions`의 추가 속성을 탐색해 보세요 – 이는 **apply digital signature** 키워드와 연관됩니다. +* `MyHash` 구현을 교체해 Blake2b와 같은 다른 해시 알고리즘을 실험해 보세요. +* 서명 흐름을 웹 API에 통합해 실시간 문서 서명을 제공하세요 – 이는 **how to sign document**를 서비스 지향 아키텍처에 적용하는 자연스러운 확장입니다. + +코드를 여러분의 보안 정책에 맞게 조정하고, 경험을 댓글로 공유해 주세요. 즐거운 서명 되세요! + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 다룬 기술을 기반으로 하여 관련 주제를 심도 있게 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 제공하므로, 추가 API 기능을 마스터하고 다양한 구현 방식을 탐색하는 데 도움이 됩니다. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/programming-with-stamps-and-watermarks/_index.md b/pdf/korean/net/programming-with-stamps-and-watermarks/_index.md index 64d027e341..a25e94ba0e 100644 --- a/pdf/korean/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/korean/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF의 .NET용 "스탬프 및 워터마크 프로그래밍" 튜토리얼 | [PDF 파일 바닥글의 텍스트](./text-in-footer/) | Aspose.PDF for .NET을 사용하여 PDF 파일의 바닥글에 텍스트를 추가하는 방법을 알아보세요. | | [PDF 파일 헤더의 텍스트](./text-in-header/) | Aspose.PDF for .NET을 사용하여 PDF에 텍스트 헤더를 추가하는 방법을 단계별 튜토리얼을 통해 알아보세요. 문서를 효율적이고 효과적으로 개선해 보세요. | | [C#에서 베이츠 번호 매기기 PDF 추가 – 완전 가이드](./add-bates-numbering-pdf-in-c-complete-guide/) | Aspose.PDF for .NET을 사용하여 C#에서 PDF에 베이츠 번호를 추가하는 방법을 단계별로 안내합니다. | +| [C#에서 베이츠 번호 매기기 옵션 설정 – 완전 가이드](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Aspose.PDF for .NET을 사용하여 C#에서 베이츠 번호 매기기 옵션을 설정하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/korean/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..ecc75f4dbd --- /dev/null +++ b/pdf/korean/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: GroupDocs를 사용하여 C#에서 베이츠 번호 매기기 옵션을 설정하는 방법. Word를 PDF로 변환할 때 사용자 정의 + 접두사와 시작 번호를 추가하는 단계별 튜토리얼을 따라보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: ko +lastmod: 2026-08-14 +og_description: C#에서 베이츠 번호 매기기 옵션을 빠르게 설정하는 방법. 이 가이드는 Word를 PDF로 변환할 때 사용자 지정 접두사와 + 시작 번호를 추가하는 방법을 보여줍니다. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: C#에서 베이츠 번호 매기기 옵션 설정 방법 – 단계별 튜토리얼 +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: C#에서 베이츠 번호 매기기 옵션 설정 방법 – 완전 가이드 +url: /ko/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 베이츠 번호 매기기 옵션 설정 방법 – 완전 가이드 + +C#에서 **베이츠 번호 매기기 옵션 설정 방법**이 필요하다면, 이 가이드는 정확한 단계들을 안내합니다. 시작 번호를 설정하고, 접두사를 추가하며, GroupDocs API를 사용해 Word 문서를 PDF로 변환하면서 번호 매기기를 적용하는 방법을 배울 수 있습니다. + +문서 처리는 법적 또는 보관 목적을 위해 각 페이지에 고유 식별자를 부여해야 할 때가 많습니다. 이 튜토리얼을 마치면 소송 지원 도구든 자동 보고서 생성기든 관계없이 .NET 프로젝트에 바로 삽입할 수 있는 재사용 가능한 코드 조각을 얻게 됩니다. 외부 도구는 필요 없습니다—GroupDocs.Conversion 라이브러리와 몇 줄의 C#만 있으면 됩니다. + +## 필요한 사항 + +시작하기 전에 다음이 설치되어 있는지 확인하세요: + +* .NET 6.0 SDK 이상 설치 +* Visual Studio 2022(또는 .NET을 지원하는 IDE) +* 유효한 GroupDocs.Conversion 라이선스(무료 체험판도 테스트에 사용 가능) +* 번호를 매기고 싶은 샘플 Word 문서 (`input.docx`) + +이 전제 조건들은 추가 설정 없이 코드를 실행할 수 있게 해 줍니다. + +## 베이츠 번호 매기기 옵션 설정 방법 – 개요 + +**베이츠 번호 매기기 옵션 설정 방법**의 핵심은 세 가지 객체에 있습니다: + +1. `Document` – 소스 파일을 로드합니다. +2. `BatesNumberingOptions` – 시작 번호, 접두사 및 기타 서식 세부 정보를 보관합니다. +3. `AddBatesNumbering` – 각 페이지에 번호를 삽입하는 메서드입니다. + +각 요소가 존재하는 이유를 이해하면 사용자 지정 글꼴이나 다국어 번호 매기기와 같은 복잡한 시나리오에도 솔루션을 쉽게 적용할 수 있습니다. + +## 단계 1: GroupDocs.Conversion NuGet 패키지 설치 + +솔루션 폴더에서 터미널을 열고 다음을 실행하세요: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API**는 튜토리얼 후반에 사용할 `Document` 클래스와 `AddBatesNumbering` 확장 메서드를 제공합니다. + +## 단계 2: 소스 문서 로드 + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*왜 이 단계인가?* +파일을 로드하면 변환 엔진이 조작할 수 있는 메모리 내 표현이 생성됩니다. `Document` 인스턴스가 없으면 베이츠 번호 매기기나 다른 변환을 적용할 수 없습니다. + +## 단계 3: 베이츠 번호 매기기 옵션 생성 + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*왜 이 단계인가?* +`BatesNumberingOptions`는 **베이츠 번호 매기기 옵션 설정** 시 필요할 수 있는 모든 설정을 캡슐화합니다. `StartNumber`와 `Prefix`를 조정하면 출력이 케이스 관리 시스템과 일치하도록 할 수 있습니다. `Position` 속성은 시각적 배치를 제어하는데, 이는 종종 규정 준수 요구 사항이 됩니다. + +## 단계 4: 문서에 베이츠 번호 매기기 적용 + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` 메서드는 로드된 `Document`의 각 페이지를 순회하면서 구성된 문자열을 삽입합니다. 메서드가 메모리 내 표현에서 작동하기 때문에 저장하기 전에 워터마킹과 같은 추가 처리 단계를 체인처럼 연결할 수 있습니다. + +## 단계 5: 결과를 PDF로 변환 및 저장 + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*왜 이 단계인가?* +PDF는 법률 문서의 일반적인 최종 형식입니다. `PdfConvertOptions` 객체를 사용하면 출력물을 세밀하게 조정할 수 있지만 기본 번호 매기기에는 필요하지 않습니다. `Save` 호출은 완전히 번호가 매겨진 PDF를 디스크에 기록합니다. + +## 완전한 실행 예제 + +모든 코드를 합치면 다음과 같은 독립 실행형 콘솔 애플리케이션을 컴파일하고 실행할 수 있습니다: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**예상 출력** + +프로그램을 실행하면 `output.pdf`가 생성되며, 각 페이지에 `CASE-1000`, `CASE-1001` 등과 같은 라벨이 오른쪽 바닥글에 표시됩니다. PDF 뷰어에서 열어 번호가 의도대로 나타나는지 확인하세요. + +## 일반적인 함정 및 모범 사례 + +| 문제 | 발생 원인 | 예방 방법 | +|-------|----------------|-----------------| +| **상대 경로가 `FileNotFoundException`을 발생시킴** | 콘솔 앱의 작업 디렉터리가 Visual Studio와 다를 수 있습니다. | 절대 경로를 사용하거나 `Path.Combine(AppContext.BaseDirectory, "input.docx")`를 사용하세요. | +| **번호가 기존 바닥글과 겹침** | 소스 문서에 선택한 바닥글 영역에 이미 내용이 있으면 새 번호가 가려질 수 있습니다. | `Position`을 다른 값(예: `HeaderLeft`)으로 선택하거나 소스 템플릿을 조정하세요. | +| **대용량 문서는 느림** | 베이츠 번호 매기기가 각 페이지를 순회하므로 파일 크기에 따라 메모리 사용량이 증가합니다. | 500페이지를 초과하면 `Document.Split`을 사용해 문서를 청크 단위로 처리하세요. | +| **라이선스 만료** | GroupDocs 무료 체험판은 30일 후 만료되어 `AddBatesNumbering`에서 예외가 발생합니다. | 문서를 로드하기 전에 유효한 라이선스 키를 적용하세요: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tip:** 케이스마다 다른 번호 형식이 필요하면(예: `2023-CASE-001`) `BatesNumberingOptions`를 만들기 전에 접두사를 동적으로 구성하세요. + +## 솔루션 확장 + +동일한 **Bates numbering C#** 접근 방식은 `.txt`, `.html` 또는 이미지와 같은 다른 소스 형식에서도 작동합니다. `Document` 객체를 만들 때 파일 확장자를 바꾸기만 하면 변환 엔진이 나머지를 처리합니다. + +또한 **document conversion C#**을 OCR과 결합해 스캔된 PDF를 처리할 수도 있습니다: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## 결론 + +이제 C#에서 **베이츠 번호 매기기 옵션 설정 방법**을 처음부터 끝까지 알게 되었습니다. `BatesNumberingOptions` 객체를 생성하고, `AddBatesNumbering`으로 적용한 뒤 PDF로 저장하면 법적 요구 사항을 충족하는 고유 식별 문서를 자동으로 생성할 수 있습니다. + +이후에는 **C# PDF generation**, **document conversion C#**, 워터마킹 및 디지털 서명과 같은 고급 **GroupDocs API** 기능을 탐색해 보세요. 다양한 접두사, 위치 및 번호 형식을 실험해 워크플로에 맞게 최적화하십시오. + +코딩 즐겁게 하세요! + +## 다음에 배울 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하여 밀접하게 관련된 주제를 다룹니다. 각 리소스에는 완전한 코드 예제와 단계별 설명이 포함되어 있어 추가 API 기능을 마스터하고 프로젝트에 적용할 수 있는 다양한 구현 방식을 탐색할 수 있습니다. + +- [C#에서 베이츠 번호 매기기 PDF 추가 – 완전 가이드](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Aspose.PDF for .NET을 사용해 PDF에 페이지 번호 추가 및 맞춤 설정 방법 | 문서 조작 가이드](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Aspose.PDF for .NET을 사용해 PDF에 텍스트 스탬프 바닥글 추가 방법: 단계별 가이드](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/annotations/_index.md b/pdf/polish/net/annotations/_index.md index e0ee53ef96..02e453cb51 100644 --- a/pdf/polish/net/annotations/_index.md +++ b/pdf/polish/net/annotations/_index.md @@ -32,9 +32,10 @@ Kompleksowy zbiór samouczków pokazujących, jak pracować z adnotacjami w doku | [Szerokość linii adnotacji lnk](./lnkannotationlinewidth/) Dowiedz się, jak ustawić szerokość linii adnotacji atramentowej w pliku PDF za pomocą Aspose.PDF dla .NET. Ten szczegółowy samouczek przeprowadzi Cię przez każdy krok, zapewniając wysokiej jakości wydruk. | | [Redaguj stronę](./redactpage/) | Dowiedz się, jak skutecznie redagować dokumenty za pomocą Aspose.PDF dla platformy .NET, korzystając z tego kompleksowego przewodnika krok po kroku. | | [Ustaw właściwość odwołania w pliku PDF](./setcalloutproperty/) | Dowiedz się, jak ustawić właściwość odwołania w pliku PDF za pomocą Aspose.PDF dla platformy .NET, korzystając ze szczegółowego samouczka krok po kroku. | -| [Ustaw bezpłatne formatowanie adnotacji tekstowych](./setfreetextannotationformatting/) | Dowiedz się, jak ustawić formatowanie adnotacji tekstu swobodnego w dokumentach PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z tego przewodnika krok po kroku. | +| [Ustaw bezpłatne formatowanie adnotacji tekstowych](./setfreetextannotationformatting/) | Dowiedz się, jak ustawić formatowanie adnotacji tekstu swobodnego w dokumentach PDF za pomocą Aspose.PDF dla .NET, korzystając z tego przewodnika krok po kroku. | | [Wykreśl słowa](./strikeoutwords/) | Dowiedz się, jak przekreślać słowa w pliku PDF za pomocą Aspose.PDF dla .NET dzięki temu kompleksowemu przewodnikowi krok po kroku. Udoskonal swoje umiejętności edycji dokumentów. | | [Aktualizuj adnotację do pliku PDF w formacie Free Text](./updatefreetextannotation/) Dowiedz się, jak aktualizować adnotacje tekstu swobodnego w dokumentach PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z tego przewodnika krok po kroku. | +| [Rysowanie prostokąta w pliku PDF – przewodnik krok po kroku w C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) Naucz się rysować prostokąt w pliku PDF przy użyciu Aspose.PDF dla .NET w tym przewodniku krok po kroku. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/polish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..6731786875 --- /dev/null +++ b/pdf/polish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Rysuj prostokąt w PDF szybko przy użyciu C#. Dowiedz się, jak określić + wymiary prostokąta i dodać kształty do strony PDF w kilku linijkach. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: pl +lastmod: 2026-08-14 +og_description: Rysuj prostokąt w PDF za pomocą C# w kilka sekund. Ten przewodnik + pokazuje, jak określić wymiary prostokąta, dodać kształt i sprawdzić granice strony, + aby uzyskać niezawodne grafiki PDF. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: rysuj prostokąt na PDF – kompletny samouczek C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Rysowanie prostokąta w PDF – przewodnik krok po kroku w C# +url: /pl/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# rysowanie prostokąta w pdf – kompletny samouczek C# + +Jeśli potrzebujesz **rysować prostokąt w pdf** przy użyciu C#, ten przewodnik pokaże Ci zwięzłe, gotowe do produkcji rozwiązanie. Zobaczysz dokładnie **jak określić wymiary prostokąta**, zweryfikujesz, że kształt pasuje, i dodasz go do strony jednym wywołaniem metody. + +Samouczek obejmuje wszystko, od tworzenia dokumentu PDF po renderowanie prostokąta, więc możesz skopiować‑wkleić kod do własnego projektu i zobaczyć wyniki od razu. Nie wymagana jest żadna zewnętrzna dokumentacja — wystarczy poniższe kroki. + +## Prerequisites + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7+) +* Pakiet NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Podstawowa znajomość składni C# +* IDE, takie jak Visual Studio lub VS Code + +> **Porada:** Użyj darmowej licencji ewaluacyjnej Aspose.PDF do szybkich eksperymentów; dodaje ona mały znak wodny, ale pozwala przetestować wszystkie funkcje. + +## Jak narysować prostokąt w PDF przy użyciu C# + +Sednem zadania jest stworzenie `RectangleShape`, ustawienie jego rozmiaru i obrysu oraz dołączenie go do `Page`. Następujący nagłówek H2 zawiera główne słowo kluczowe, spełniając wymagania SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Wyjaśnienie każdego kroku + +| Krok | Dlaczego to ważne | +|------|-------------------| +| **1️⃣ Utwórz nowy dokument PDF** | Inicjalizuje kontener, który będzie przechowywać strony i grafikę. | +| **2️⃣ Dodaj pustą stronę** | Potrzebujesz obiektu `Page`, ponieważ kształty są dołączane do strony, a nie bezpośrednio do dokumentu. | +| **3️⃣ Zdefiniuj granice prostokąta** | Tutaj **jak określić wymiary prostokąta**. Konstruktor `Rectangle` przyjmuje `x`, `y`, `width` i `height` w punktach (1 pt = 1/72 in). | +| **4️⃣ Utwórz kształt prostokąta** | `RectangleShape` to klasa Aspose renderująca prostokąt. Ustawienie `StrokeColor` definiuje obrys; możesz także ustawić `FillColor` dla wypełnienia jednolitym kolorem. | +| **5️⃣ Zweryfikuj granice strony** | `CheckShapeBoundary` zgłasza wyjątek, jeśli prostokąt przekracza rozmiar strony, zapobiegając uszkodzonym PDF-om. | +| **6️⃣ Dodaj kształt do strony** | Kształt staje się częścią strumienia zawartości strony. | +| **7️⃣ Zapisz PDF** | Zapisuje dokument do pliku, który możesz otworzyć w dowolnym przeglądarce PDF. | + +Wynikowy plik `RectangleDemo.pdf` zawiera czarny prostokąt umieszczony w lewym górnym rogu strony, dokładnie 500 pt szeroki i 700 pt wysoki. + +![przykład rysowania prostokąta w pdf](https://example.com/rectangle-demo.png "przykład rysowania prostokąta w pdf") + +*Tekst alternatywny obrazu: przykład rysowania prostokąta w pdf pokazujący czarny prostokąt w lewym górnym rogu strony PDF.* + +## Jak określić wymiary prostokąta dla różnych rozmiarów stron + +Powyższy fragment używa stałych wartości (`500 x 700`). W rzeczywistych aplikacjach często potrzebujesz, aby prostokąt dostosowywał się do szerokości i wysokości strony. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Kluczowe punkty:** + +* Użyj `page.PageInfo.Width` i `Height`, aby odczytać rzeczywisty rozmiar strony. +* Mnożenie przez współczynnik (np. `0.8f`) pozwala wyrazić wymiary jako procent strony. +* Wyśrodkowanie uzyskuje się, odejmując rozmiar prostokąta od rozmiaru strony i dzieląc pozostałość na pół. + +## Częste pułapki i jak ich unikać + +| Pułapka | Dlaczego się dzieje | Rozwiązanie | +|---------|----------------------|-------------| +| Prostokąt wykracza poza stronę | Wymiary zakodowane na stałe są większe niż rozmiar strony. | Wywołaj `page.CheckShapeBoundary` **przed** dodaniem kształtu; dostosuj wymiary, jeśli zostanie zgłoszony wyjątek. | +| Obrys niewidoczny | `StrokeColor` pozostawiony w domyślnym stanie (`Color.Empty`). | Ustaw explicite `StrokeColor` (np. `Color.Black`). | +| Prostokąt pojawia się poza ekranem | Współrzędne zaczynają się od lewego dolnego rogu w przestrzeni PDF; użycie współrzędnych w stylu ekranowym (górny lewy) powoduje odwrócenie. | Pamiętaj, że początek `(0,0)` znajduje się w lewym dolnym rogu. Dostosuj `y` odpowiednio lub użyj `pageHeight - desiredY`. | +| Nieoczekiwana grubość linii | Domyślna szerokość linii może być zbyt cienka do druku. | Ustaw `rectangleShape.LineWidth = 2;`, aby zwiększyć grubość. | + +## Rozszerzanie przykładu + +Gdy już potrafisz **rysować prostokąt w pdf**, możesz łatwo dodać inne kształty: + +* **EllipseShape** – dla kół lub elips. +* **PolygonShape** – dla niestandardowych wielokątów. +* **TextFragment** – aby oznaczyć swoje prostokąty. + +Wszystkie kształty korzystają z tego samego przepływu pracy: definiuj granice, konfigurować wygląd, weryfikuj granice, a następnie dodaj do strony. + +## Pełny, uruchamialny program + +Poniżej znajduje się pełny program, który łączy podstawowy prostokąt i przykład dynamicznego rozmiaru. Skopiuj go do nowego projektu konsolowego, przywróć pakiet NuGet `Aspose.PDF` i uruchom. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Oczekiwany wynik:** +Otwórz `CombinedRectangles.pdf`. Zobaczysz czarny prostokąt zakotwiczony w lewym dolnym rogu oraz wyśrodkowany ciemnoniebieski prostokąt z jasnożółtym wypełnieniem. Oba prostokąty respektują marginesy strony. + +## Podsumowanie + +Teraz wiesz, jak **rysować prostokąt w pdf** przy użyciu C# i precyzyjnie **określić wymiary prostokąta** zarówno dla układów stałych, jak i responsywnych. Podejście wykorzystuje `RectangleShape` z Aspose.PDF, sprawdzanie granic i proste obliczenia, aby dostosować się do dowolnego rozmiaru strony. + +Następnie możesz zbadać: + +* Dodawanie **kolorów wypełnienia** i **stylów linii** (kreskowane, kropkowane) – drugorzędne słowo kluczowe: jak określić wymiary prostokąta ze stylem. +* Łączenie wielu kształtów w jedną `Page`, aby tworzyć wykresy lub formularze. +* Eksportowanie PDF do strumienia dla interfejsów API webowych zamiast zapisywania na dysku. + +Eksperymentuj z różnymi rozmiarami, kolorami i pozycjami, aby opanować grafikę PDF w swoich aplikacjach .NET. Szczęśliwego kodowania! + +## Co powinieneś nauczyć się 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 dostosować PDF-y przy użyciu Aspose.PDF dla .NET: ustaw marginesy strony i rysuj linie](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Jak dodać pieczątki stron w PDF-ach przy użyciu Aspose.PDF dla .NET: kompletny przewodnik](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Jak dodać pieczątki numerów stron w PDF-ach przy użyciu Aspose.PDF dla .NET | Znaki wodne i tła](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/conversion-export/_index.md b/pdf/polish/net/conversion-export/_index.md index 75800bd8c2..79d98e1aed 100644 --- a/pdf/polish/net/conversion-export/_index.md +++ b/pdf/polish/net/conversion-export/_index.md @@ -230,6 +230,9 @@ Dowiedz się, jak konwertować dokumenty PDF na obrazy TIFF za pomocą Aspose.PD ### [Jak zapisać PDF przy użyciu Aspose – przewodnik krok po kroku](./how-to-save-pdf-with-aspose-step-by-step-guide/) Dowiedz się, jak zapisać dokument PDF przy użyciu Aspose w prostych krokach, wykorzystując C# i .NET. +### [Zapisz PDF jako HTML i konwertuj do PDF/X‑4 za pomocą Aspose.PDF w C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Dowiedz się, jak zapisać plik PDF jako HTML i następnie przekonwertować go do formatu PDF/X‑4 przy użyciu Aspose.PDF w C#. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/polish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..17b21d214e --- /dev/null +++ b/pdf/polish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Zapisz PDF jako HTML i konwertuj PDF do PDF/X‑4 przy użyciu Aspose.PDF + dla C#. Krok po kroku kod pokazuje eksport do HTML, listowanie podpisów oraz edycję + stanu graficznego. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: pl +lastmod: 2026-08-14 +og_description: Zapisz PDF jako HTML i konwertuj PDF do PDF/X‑4 przy użyciu Aspose.PDF + dla C#. Przejdź przez ten kompletny przewodnik, aby wyeksportować HTML, wyświetlić + listę podpisów i edytować stany graficzne. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Zapisz PDF jako HTML i konwertuj do PDF/X‑4 przy użyciu Aspose.PDF – przewodnik + C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Zapisz PDF jako HTML i konwertuj do PDF/X‑4 przy użyciu Aspose.PDF w C# +url: /pl/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Zapisz PDF jako HTML i konwertuj do PDF/X‑4 przy użyciu Aspose.PDF w C# + +Jeśli potrzebujesz **zapisz PDF jako HTML**, Aspose.Pdf upraszcza ten proces. Ten samouczek pokazuje również, jak **przekonwertować PDF do PDF/X‑4**, wyświetlić pola podpisu oraz dodać niestandardowy ExtGState, zapewniając pełny przepływ pracy od początku do końca. + +Nauczysz się, jak: + +* Eksportuj PDF do czystego HTML, pomijając obrazy rastrowe. +* Konwertuj dokument PDF do standardu PDF/X‑4 dla gotowego do druku wyjścia. +* Wymień wszystkie pola podpisu w PDF. +* Wstaw niestandardowy stan graficzny (ExtGState) na pierwszej stronie. + +Cały kod działa na .NET 6 lub nowszym i wymaga pakietu NuGet Aspose.Pdf dla .NET. + +## Prerequisites + +| Wymaganie | Powód | +|-------------|--------| +| .NET 6 SDK lub nowszy | Zapewnia środowisko uruchomieniowe dla przykładu w C#. | +| Visual Studio 2022 (lub dowolne IDE C#) | Umożliwia łatwą edycję i debugowanie. | +| Aspose.Pdf for .NET (v23.12 lub nowszy) | Dostarcza klasy `Document`, `PdfFormatConversionOptions` i `HtmlSaveOptions` używane w samouczku. | +| Przykładowy plik PDF (`sample.pdf`) | Źródłowy dokument, który zostanie przetworzony. | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +Program wykonuje sześć logicznych kroków: + +1. Wczytaj źródłowy PDF. +2. Wyświetl nazwę każdego pola podpisu. +3. **Konwertuj PDF do PDF/X‑4** i zapisz wynik. +4. **Zapisz PDF jako HTML** pomijając obrazy rastrowe. +5. Dodaj niestandardowy ExtGState (stan graficzny) do pierwszej strony. +6. Zapisz zmodyfikowany PDF z nowym stanem graficznym. + +Każdy krok jest wyjaśniony poniżej, wraz z pełnym kodem i uzasadnieniem wyborów. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Dlaczego to ważne*: `Document` reprezentuje cały plik PDF. Wczytanie go raz pozwala ponownie używać tego samego obiektu we wszystkich kolejnych operacjach, co zmniejsza obciążenie I/O. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Dlaczego to ważne*: Znajomość nazw pól podpisu jest niezbędna, gdy później trzeba zweryfikować, usunąć lub zastąpić podpisy cyfrowe. Kolekcja `Signatures` zapewnia szybki, tylko do odczytu podgląd pól. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Kluczowe punkty** + +* `PdfStandard.PdfX4` instruuje Aspose.Pdf, aby osadził wszystkie wymagane zasoby (czcionki, profile kolorów) i wymusił ograniczenia PDF/X‑4. +* Konwersja odbywa się w pamięci; tylko ostateczny plik jest zapisywany na dysku, co przyspiesza operację. + +> **Wskazówka:** Zweryfikuj wynik przy użyciu walidatora PDF/X‑4 (np. Adobe Preflight), jeśli Twój dalszy przepływ pracy wymaga ścisłej zgodności. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Dlaczego możesz tego potrzebować**: Wyjście HTML jest przydatne do podglądu w sieci lub indeksowania treści. Pomijanie obrazów rastrowych (`SkipRasterImages = true`) utrzymuje HTML lekki i przyspiesza ładowanie, szczególnie gdy oryginalny PDF zawiera skany o wysokiej rozdzielczości. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Wyjaśnienie*: Obiekt **ExtGState** kontroluje przezroczystość, tryb mieszania i inne parametry graficzne. Dodając `GS0`, możesz później odwoływać się do tego stanu w strumieniach zawartości (np. dla półprzezroczystych nakładek). Kod używa niskopoziomowego API COS, ponieważ Aspose.Pdf nie udostępnia wysokopoziomowego wrappera do tworzenia ExtGState. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Ostateczny plik (`sample_with_extgstate.pdf`) zawiera: + +* Wszystkie oryginalne strony i zawartość. +* Zgodną wersję PDF/X‑4 (`sample_pdfx4.pdf`). +* Reprezentację HTML bez obrazów rastrowych (`sample.html`). +* Niestandardowy ExtGState (`GS0`) dołączony do zasobów pierwszej strony. + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Jeśli źródłowy PDF nie zawiera podpisów, pętla nie wypisze nic, ale nadal zakończy się bez błędu. + +## Common variations and edge cases + +| Sytuacja | Dostosowanie | +|-----------|------------| +| PDF nie zawiera stron | Sprawdź `doc.Pages.Count` przed dostępem do `doc.Pages[1]`, aby uniknąć `IndexOutOfRangeException`. | +| Potrzebujesz PDF/A‑2b zamiast PDF/X‑4 | Zmien `PdfStandard.PdfX4` na `PdfStandard.PdfA2b` w `PdfFormatConversionOptions`. | +| Chcesz zachować obrazy rastrowe | Ustaw `SkipRasterImages = false` (lub pomiń tę właściwość) w `HtmlSaveOptions`. | +| Wiele obiektów ExtGState | Użyj unikalnych kluczy (`GS1`, `GS2`, …) przy dodawaniu do `extGStateDict`. | +| Duże pliki PDF (setki MB) | Włącz `doc.OptimizeResources = true` przed zapisem, aby zmniejszyć zużycie pamięci. | + +## Full source code (runnable) + + + +## Co powinieneś nauczyć się 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. + +- [Kompletny przewodnik: Konwersja PDF do HTML przy użyciu Aspose.PDF .NET z niestandardowymi strategiami](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Konwersja PDF do HTML z niestandardowymi adresami URL obrazów przy użyciu Aspose.PDF .NET: Kompletny przewodnik](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Konwersja PDF do HTML przy użyciu Aspose.PDF .NET: Zapisz obrazy jako zewnętrzne PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/programming-with-forms/_index.md b/pdf/polish/net/programming-with-forms/_index.md index aa41578d77..8d611950c5 100644 --- a/pdf/polish/net/programming-with-forms/_index.md +++ b/pdf/polish/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Te samouczki zawierają również szczegółowe przykłady kodu, jasne wyjaśnie | [Ustaw podpis przycisku radiowego](./set-radio-button-caption/) Dowiedz się, jak ustawić podpisy przycisków radiowych w plikach PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik krok po kroku przeprowadzi Cię przez ładowanie, modyfikowanie i zapisywanie formularzy PDF. | | [Pole tekstowe](./text-box/) | Dowiedz się, jak bez wysiłku dodawać pola tekstowe do plików PDF za pomocą Aspose.PDF dla .NET dzięki temu przewodnikowi krok po kroku. Ulepsz interakcję użytkownika. | | [Jak utworzyć PDF przy użyciu Aspose – Dodaj pole formularza i strony](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Dowiedz się, jak tworzyć pliki PDF, dodawać pola formularzy i zarządzać stronami przy użyciu Aspose.PDF dla .NET w tym przewodniku krok po kroku. | +| [Utwórz pole formularza PDF w C# – przewodnik krok po kroku](./create-pdf-form-field-in-c-step-by-step-guide/) | Dowiedz się, jak w C# tworzyć pola formularzy PDF przy użyciu Aspose.PDF w tym szczegółowym przewodniku krok po kroku. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/polish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..4ed5675154 --- /dev/null +++ b/pdf/polish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-14 +description: Szybko twórz pola formularza PDF w C#. Dowiedz się, jak dodać pole tekstowe + do PDF i zmodyfikować PDF, aby zawierał pole tekstowe przy użyciu Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: pl +lastmod: 2026-08-14 +og_description: Utwórz pole formularza PDF w C#. Ten samouczek pokazuje, jak dodać + pole tekstowe do pliku PDF i zmodyfikować PDF, aby zawierał pole tekstowe przy użyciu + Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Tworzenie pola formularza PDF w C# – kompletny przewodnik programistyczny +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Tworzenie pola formularza PDF w C# – przewodnik krok po kroku +url: /pl/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Utwórz pole formularza PDF w C# – przewodnik krok po kroku + +Jeśli potrzebujesz **create pdf form field** w dokumencie, ten przewodnik przeprowadzi Cię przez cały proces. Zobaczysz dokładnie, jak **add text box to pdf** na stronach oraz jak **modify pdf to include text box** przy użyciu biblioteki Aspose.PDF dla .NET. + +Praca z formularzami PDF jest powszechnym wymogiem w systemach fakturowania, ankietach lub w każdym procesie, który zbiera dane od użytkownika. Po zakończeniu tego samouczka będziesz mieć wielokrotnego użytku fragment kodu, który tworzy w pełni funkcjonalne pole tekstowe, umieszcza je w wybranym miejscu i zapisuje zaktualizowany PDF — wszystko bez opuszczania projektu C#. + +## Prerequisites + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7+) +* Visual Studio 2022 lub dowolne IDE obsługujące C# +* Aktywna licencja Aspose.PDF for .NET (bezpłatna wersja próbna działa w celach deweloperskich) +* Plik PDF o nazwie `input.pdf` umieszczony w znanym katalogu (w samouczku używany jest `YOUR_DIRECTORY` jako symbol zastępczy) + +> **Wskazówka:** Jeśli nie masz jeszcze licencji, możesz poprosić o tymczasowy klucz na stronie Aspose; biblioteka działa w trybie ewaluacyjnym bez zmian w kodzie. + +## Jak utworzyć pole formularza PDF w C# (przegląd) + +1. Wczytaj istniejący dokument PDF. +2. Utwórz instancję `TextBoxField` i skonfiguruj jej nazwę oraz wygląd. +3. Dodaj adnotację widget, która definiuje prostokąt wizualny na docelowej stronie. +4. Wstaw pole do kolekcji formularzy dokumentu. +5. Zapisz zmodyfikowany PDF. + +Każdy krok jest wyjaśniony szczegółowo poniżej, wraz z pełnymi przykładami kodu oraz uzasadnieniem wywołań API. + +## Krok 1: Wczytaj dokument PDF + +Pierwszą operacją jest odczytanie źródłowego PDF. Aspose.PDF reprezentuje plik PDF klasą `Document`. Wczytanie dokumentu daje dostęp do jego stron, kolekcji formularzy i innych struktur. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Dlaczego to jest ważne:** +Wczytanie pliku tworzy model PDF w pamięci, co pozwala dodawać, usuwać lub edytować obiekty bez uszkadzania oryginalnego pliku. Obiekt `Document` udostępnia również właściwość `Form`, w której później **add text box to pdf**. + +## Krok 2: Utwórz pole tekstowe + +Pole tekstowe jest typem pola formularza, które pozwala użytkownikom wpisywać dowolny tekst. W Aspose.PDF tworzysz je, tworząc instancję `TextBoxField`, przekazując docelową stronę oraz prostokąt definiujący początkowy rozmiar widgetu. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Dlaczego to jest ważne:** +* `PartialName` jest kluczem, którego narzędzia przetwarzające formularze (np. Adobe Acrobat, parsery po stronie serwera) używają do pobierania wprowadzonej wartości. +* Przekazany prostokąt definiuje jedynie *początkowy* rozmiar widgetu; później możesz dostosować jego położenie wizualne za pomocą adnotacji widget (następny krok). +* Ustawienie `DefaultAppearance` zapewnia, że tekst w polu będzie renderowany spójnie we wszystkich przeglądarkach. + +## Krok 3: Zdefiniuj wizualną adnotację widget + +Pole formularza może mieć jedną lub więcej **adnotacji widget**, które kontrolują, gdzie pole pojawia się na każdej stronie. Dodając widget, możesz umieścić to samo logiczne pole w innym miejscu lub nawet na wielu stronach. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Dlaczego to jest ważne:** +Prostokąt widgetu określa współrzędne na ekranie, które widzą użytkownicy. Jeśli pominiesz ten krok, pole może istnieć w strukturze danych PDF, ale nie będzie widoczne dla końcowego użytkownika. Dodanie widgetu to krok, który naprawdę **adds text box to pdf**. + +## Krok 4: Dodaj skonfigurowane pole do formularza dokumentu + +Teraz, gdy `TextBoxField` jest w pełni skonfigurowane, musisz zarejestrować je w kolekcji formularzy PDF. To sprawia, że pole staje się częścią interaktywnego formularza i zapewnia jego zapisanie. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Dlaczego to jest ważne:** +Bez dodania pola do `pdfDocument.Form` przeglądarka PDF zignoruje adnotację widget, a dane pola nigdy nie zostaną przesłane. Ten wiersz finalizuje operację **modify pdf to include text box**. + +## Krok 5: Zapisz zaktualizowany PDF + +Na koniec zapisz zmiany na dysk. Możesz nadpisać oryginalny plik lub utworzyć nowy; w przykładzie zapisywany jest do `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Po otwarciu `output.pdf` w Adobe Acrobat Reader zobaczysz prostokątne pole tekstowe oznaczone „Comments” na stronie 2. Użytkownicy mogą kliknąć wewnątrz, wpisywać, a wprowadzony tekst stanie się częścią danych formularza PDF. + +## Pełny działający przykład + +Łącząc wszystkie elementy, oto kompletny, gotowy do uruchomienia program. Skopiuj go do nowego projektu konsolowego, zamień `YOUR_DIRECTORY` na rzeczywistą ścieżkę folderu i uruchom. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Expected output:** +Uruchomienie programu wypisuje dwie linie potwierdzające w konsoli. Otworzenie `output.pdf` pokazuje pole tekstowe na stronie 2, w którym użytkownik może wpisywać komentarze. Po przesłaniu formularza (np. przyciskiem „Submit” w Adobe Acrobat) nazwa pola `Comments` pojawia się w wyeksportowanych danych FDF lub XFDF. + +## Typowe warianty i przypadki brzegowe + +| Sytuacja | Jak dostosować kod | +|-----------|-----------------------| +| **Dodaj pole na inną stronę** | Zmień `pdfDocument.Pages[1]` na żądany indeks strony (`0`‑based). | +| **Utwórz pole tekstowe wieloliniowe** | Ustaw `textBox.Multiline = true;` przed dodaniem widgetu. | +| **Ustaw wartość domyślną** | Przypisz `textBox.Value = "Enter your comments here";`. | +| **Ustaw pole jako wymagane** | Ustaw `textBox.Required = true;`. | +| **Umieść pole na wielu stronach** | Wywołaj `textBox.AddWidgetAnnotation` dla każdego dodatkowego prostokąta na docelowych stronach. | +| **Użyj własnej czcionki** | Załaduj czcionkę za pomocą `FontRepository.AddFont("path/to/font.ttf")` i odwołaj się do niej w `DefaultAppearance`. | + +**Wskazówka:** Zawsze weryfikuj współrzędne prostokąta względem rozmiaru strony (`pdfDocument.Pages[1].Rect`). Jeśli widget znajduje się poza granicami strony, przeglądarki mogą przyciąć lub ukryć pole. + +## Testowanie pola formularza + +1. Otwórz `output.pdf` w Adobe Acrobat Reader. +2. Kliknij wewnątrz pola „Comments”; powinien pojawić się kursor. +3. Wpisz dowolny tekst i naciśnij **Tab** lub kliknij w inne miejsce. +4. Wybierz **File → Save As**, aby zachować wprowadzoną wartość. +5. (Opcjonalnie) Użyj API `Form` z Aspose.PDF, aby programowo wyodrębnić wartość: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Ten fragment kodu pokazuje, że pole jest nie tylko widoczne, ale także możliwe do pobrania za pomocą kodu — co jest niezbędne przy przetwarzaniu po stronie serwera. + +## Podsumowanie + +Teraz wiesz, jak **create pdf form field** w C# od początku do końca. Samouczek obejmował wczytywanie PDF, konfigurowanie `TextBoxField`, dodawanie adnotacji widget, rejestrowanie pola i zapisywanie wyniku. Dzięki tym elementom możesz **add text box to pdf** dokumenty, **modify pdf to include text box**, oraz rozszerzyć podejście na inne typy pól, takie jak pola wyboru, przyciski radiowe czy listy rozwijane. + +Następnie, zapoznaj się z powiązanymi tematami, takimi jak **extracting form data**, **flattening PDF forms**, czy **styling fields with borders and colors**. Każda z tych koncepcji opiera się na tym samym podstawowym API, które właśnie opanowałeś, umożliwiając tworzenie zaawansowanych interaktywnych PDF‑ów w pełni w C#. + +Miłego kodowania i zachęcamy do eksperymentowania z różnymi prostokątami, czcionkami i regułami walidacji, aby dopasować je do potrzeb Twojej aplikacji! + +## Co powinieneś nauczyć się dalej? + +Poniższe samouczki obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każde źródło 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. + +- [Utwórz dokument PDF przy użyciu Aspose – Dodaj stronę, pole tekstowe i formularz](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Jak utworzyć PDF przy użyciu Aspose – Dodaj pole formularza i strony](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Jak dodać pieczątkę tekstową do PDF przy użyciu Aspose.PDF .NET: Kompletny przewodnik](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/programming-with-operators/_index.md b/pdf/polish/net/programming-with-operators/_index.md index 29f5701327..13e15b84c4 100644 --- a/pdf/polish/net/programming-with-operators/_index.md +++ b/pdf/polish/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Samouczki „Programowanie z operatorami” Aspose.PDF for .NET przeprowadzą Ci | [Narysuj XForm na stronie](./draw-xform-on-page/) | dowiedz się, jak rysować formularze XForm w formacie PDF za pomocą Aspose.PDF dla platformy .NET dzięki temu kompleksowemu przewodnikowi krok po kroku. | | [Operatorzy PDF](./pdf-operators/) | Przewodnik krok po kroku dotyczący korzystania z operatorów PDF w Aspose.PDF dla platformy .NET. Dodaj obraz do strony PDF i określ jego pozycję. | | [Usuń obiekty graficzne w pliku PDF](./remove-graphics-objects/) Dowiedz się, jak usuwać obiekty graficzne z pliku PDF za pomocą Aspose.PDF dla .NET w tym przewodniku krok po kroku. Uprość swoje zadania związane z manipulacją PDF. | +| [Utwórz pusty słownik PDF w C# przy użyciu Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Dowiedz się, jak utworzyć pusty słownik PDF w C# przy użyciu Aspose.Pdf w kilku prostych krokach. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/polish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..dc02786965 --- /dev/null +++ b/pdf/polish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Utwórz pusty słownik PDF w C# przy użyciu Aspose.Pdf – dowiedz się, jak + dodać stan graficzny do kolekcji ExtGState i modyfikować pliki PDF programowo. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: pl +lastmod: 2026-08-14 +og_description: Utwórz pusty słownik PDF w C# przy użyciu Aspose.Pdf. Skorzystaj z + tego kompletnego przewodnika, aby dodać niestandardowy stan graficzny do kolekcji + ExtGState w pliku PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Utwórz pusty słownik PDF w C# – przewodnik krok po kroku Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Utwórz pusty słownik PDF w C# przy użyciu Aspose.Pdf +url: /pl/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tworzenie pustego słownika PDF w C# z Aspose.Pdf + +Jeśli potrzebujesz **tworzyć puste słowniki PDF** podczas pracy z plikami PDF, ten przewodnik pokaże Ci dokładnie, jak to zrobić w C# przy użyciu biblioteki Aspose.Pdf. Niezależnie od tego, czy budujesz własny stan graficzny, dodajesz nowy zasób, czy przygotowujesz szablon do późniejszego użycia, poniższe kroki dostarczają kompletną, gotową do uruchomienia rozwiązanie. + +Nauczysz się, jak wczytać PDF, uzyskać dostęp do słownika zasobów pierwszej strony, zbudować zupełnie nowy `CosPdfDictionary` i wstawić go do kolekcji `ExtGState`. Po zakończeniu tutorialu będziesz mieć działający plik `output.pdf`, który zawiera nowo utworzony słownik. + +## Wymagania wstępne + +Zanim rozpoczniesz, upewnij się, że masz: + +- .NET 6.0 lub nowszy (kod działa także z .NET Framework 4.6+) +- Visual Studio 2022 lub dowolne inne IDE dla C# +- Licencję Aspose.Pdf for .NET (lub tymczasowy klucz ewaluacyjny) +- Przykładowy plik PDF o nazwie **input.pdf** umieszczony w folderze, do którego masz dostęp (ścieżka do folderu będzie użyta jako `dataDir`) + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.Pdf`. + +## Krok 1: Konfiguracja projektu i odwołanie do Aspose.Pdf + +1. Utwórz nowy projekt **Console App** w Visual Studio. +2. Otwórz **NuGet Package Manager** i zainstaluj `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Dodaj następujące dyrektywy `using` na początku pliku `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Dlaczego te przestrzenie nazw?* `Aspose.Pdf` zawiera podstawową klasę `Document`, natomiast `Aspose.Pdf.Operators.Gfx` udostępnia `CosPdfDictionary`, `CosPdfNumber` i powiązane niskopoziomowe obiekty PDF potrzebne do **tworzenia pustych słowników PDF**. + +## Krok 2: Wczytanie źródłowego PDF + +Pierwszym działaniem jest wczytanie istniejącego pliku PDF do instancji `Document`. Dzięki temu uzyskasz dostęp do wszystkich stron, zasobów i niskopoziomowych słowników. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Wyjaśnienie*: `Document` odczytuje plik do pamięci i przygotowuje wewnętrzne struktury. Instrukcja `using` zapewnia zwolnienie uchwytu pliku po zakończeniu przetwarzania. + +## Krok 3: Dostęp do słownika zasobów pierwszej strony + +Każda strona PDF posiada słownik **Resources**, który grupuje czcionki, obrazy, obiekty ExtGState i inne współdzielone zasoby. Aby wstawić nowy stan graficzny, musimy edytować ten słownik. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` to klasa pomocnicza, która pozwala traktować słownik PDF jak `Dictionary` w C#. + +## Krok 4: Pobranie (lub utworzenie) kolekcji ExtGState + +`ExtGState` przechowuje obiekty stanu graficznego, takie jak przezroczystość, tryb mieszania i grubość linii. Jeśli źródłowy PDF już zawiera wpis `ExtGState`, używamy go; w przeciwnym razie tworzymy nowy pusty słownik. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Dlaczego to sprawdzenie?* Niektóre pliki PDF nie posiadają wcale wpisu `ExtGState`. Obsługa obu przypadków sprawia, że tutorial jest odporny na różne pliki wejściowe. + +## Krok 5: **Tworzenie pustego słownika PDF** dla nowego stanu graficznego + +Teraz faktycznie **tworzymy puste słowniki PDF**, które definiują parametry stanu graficznego. Słownik zaczyna się pusty, a my dodajemy wymagane klucze: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Co robi każdy wpis + +| Klucz | Typ | Znaczenie | +|-------|-----|-----------| +| **CA** | `CosPdfNumber` | Przezroczystość obrysu (zakres 0‑1). | +| **ca** | `CosPdfNumber` | Przezroczystość wypełnienia (zakres 0‑1). | +| **BM** | `CosPdfName` | Tryb mieszania; najczęściej używany to `"Normal"`. | + +Ponieważ zaczęliśmy od **pustego słownika PDF**, mamy pełną kontrolę nad tym, które wpisy zostaną dodane. W razie potrzeby możesz rozszerzyć słownik o dodatkowe parametry stanu graficznego, takie jak `LW` (grubość linii) czy `LC` (kapitalizacja linii). + +## Krok 6: Wstawienie nowego stanu graficznego do ExtGState + +Słownik `ExtGState` działa jak mapa, w której każdy wpis jest identyfikowany nazwą (np. `GS0`, `GS1`). Dodajemy nasz świeżo zbudowany słownik pod unikalnym kluczem. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Jeśli planujesz dodać wiele stanów, zwiększaj sufiks (`GS1`, `GS2`, …), aby uniknąć kolizji nazw. + +## Krok 7: Zapis zmodyfikowanego PDF + +Na koniec zapisujemy zmiany na dysku. Metoda `Save` automatycznie serializuje zaktualizowane słowniki. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Otwórz `output.pdf` w dowolnym przeglądarce PDF i sprawdź wpis **Resources → ExtGState** (większość przeglądarek ukrywa to, ale narzędzia takie jak Adobe Acrobat Preflight czy PDF‑Tron mogą to pokazać). Powinien tam być wpis `GS0` zawierający wartości przezroczystości i trybu mieszania, które zdefiniowałeś. + +## Kompletny działający przykład + +Łącząc wszystkie elementy, oto pełny program, który możesz skopiować do `Program.cs` i uruchomić: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Oczekiwany wynik** – Konsola wyświetli linię potwierdzającą, a `output.pdf` będzie zawierał nowy wpis `GS0` w `ExtGState`. Gdy wyrenderujesz stronę odwołującą się do `GS0` (np. za pomocą operatora strumienia treści `gs`), obrysy będą w pełni nieprzezroczyste, a wypełnienia w 50 % przezroczyste. + +## Częste pytania i obsługa przypadków brzegowych + +| Pytanie | Odpowiedź | +|---------|-----------| +| *Co jeśli PDF ma wiele stron?* | Przykład dotyczy pierwszej strony (`Pages[1]`). Aby wpłynąć na wszystkie strony, przeiteruj `pdfDocument.Pages` i powtórz kroki 3‑5 dla zasobów każdej strony. | +| *Czy mogę dodać słownik do strony, która już ma wpis ExtGState o nazwie „GS0”?* | Tak, ale musisz użyć innego klucza (`GS1`, `GS2`, …), aby nie nadpisać istniejącego wpisu. | +| *Czy modyfikowanie słownika po zapisaniu jest bezpieczne?* | Po wywołaniu `Save` reprezentacja w pamięci jest odłączona od pliku. Możesz dalej edytować obiekt `Document` i ponownie wywołać `Save`, jeśli zajdzie taka potrzeba. | +| *Czy potrzebna jest licencja na Aspose.Pdf, aby używać ` | + +## Co warto poznać dalej? + +Poniższe tutoriale obejmują tematy ściśle powiązane, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne przykłady kodu oraz szczegółowe wyjaśnienia, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia w własnych projektach. + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/programming-with-security-and-signatures/_index.md b/pdf/polish/net/programming-with-security-and-signatures/_index.md index d2a669dd0a..bb5fad43d6 100644 --- a/pdf/polish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/polish/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Samouczek zapewnia szczegółowy przegląd metod i technik zapewniających poufn | [Sprawdź podpisy PDF w C# – Jak odczytać podpisane pliki PDF](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Dowiedz się, jak odczytywać i weryfikować podpisy PDF w C# przy użyciu Aspose.PDF. | | [Sprawdź podpis PDF w C# – Kompletny przewodnik programistyczny](./verify-pdf-signature-in-c-complete-programming-guide/) | Dowiedz się, jak w pełni weryfikować podpisy PDF w C# przy użyciu Aspose.PDF – krok po kroku. | | [Jak naprawić pliki PDF – Kompletny przewodnik C# z Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Dowiedz się, jak naprawić uszkodzone pliki PDF przy użyciu Aspose.PDF dla .NET w języku C# – krok po kroku. | +| [Utwórz opcje podpisu w C# – pełny przewodnik po cyfrowym podpisywaniu](./create-signature-options-in-c-full-guide-to-digital-signing/) | Kompletny przewodnik tworzenia opcji podpisu cyfrowego w C# przy użyciu Aspose.PDF. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/polish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..b26b7fb4fb --- /dev/null +++ b/pdf/polish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Utwórz opcje podpisu w C#, aby zastosować podpis cyfrowy. Dowiedz się, + jak skonfigurować podpis, zaimplementować własną funkcję skrótu i programowo podpisywać + dokumenty. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: pl +lastmod: 2026-08-14 +og_description: Utwórz opcje podpisu w C# i zastosuj podpis cyfrowy. Ten samouczek + przeprowadzi Cię przez konfigurowanie podpisu, dodawanie własnej funkcji skrótu + oraz podpisywanie dokumentu. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Tworzenie opcji podpisu w C# – krok po kroku przewodnik po podpisie cyfrowym +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Tworzenie opcji podpisu w C# – pełny przewodnik po podpisie cyfrowym +url: /pl/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Utwórz opcje podpisu w C# – pełny przewodnik po podpisie cyfrowym + +Utwórz opcje podpisu w C#, aby skonfigurować przepływ pracy podpisu cyfrowego. Ten samouczek pokazuje, jak zastosować podpis cyfrowy, zaimplementować własną funkcję skrótu oraz podpisać dokument przy użyciu klasy `SignatureOptions`. Jeśli kiedykolwiek musiałeś podpisać PDF, XML lub dowolny binarny ładunek z aplikacji .NET, poniższe kroki dostarczą gotowego rozwiązania. + +Nauczysz się, jak: + +* skonfigurować `SignatureOptions` z własnym algorytmem skrótu, +* wywołać metodę podpisywania prawidłowo, +* zweryfikować, że podpis został zastosowany, +* unikać typowych pułapek przy konfigurowaniu podpisu. + +Jedynymi wymaganiami wstępnymi są aktualny .NET SDK (≥ .NET 6) oraz biblioteka podpisująca udostępniająca `SignatureOptions` (np. **GroupDocs.Signature**, **Aspose.Signature** lub podobne API). Nie są potrzebne żadne zewnętrzne narzędzia. + +--- + +## Wymagania wstępne + +| Wymaganie | Dlaczego ma znaczenie | +|-----------|-----------------------| +| .NET 6 SDK lub nowszy | Dostarcza nowoczesne funkcje językowe używane w przykładach. | +| Pakiet NuGet biblioteki podpisującej (np. `GroupDocs.Signature`) | Udostępnia typ `SignatureOptions` oraz metodę rozszerzającą `Sign`. | +| Dostęp do klucza prywatnego lub certyfikatu | Niezbędny do wygenerowania weryfikowalnego podpisu cyfrowego. | + +Zainstaluj bibliotekę przy użyciu standardowego CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Krok 1: Utwórz opcje podpisu + +Pierwszym krokiem jest utworzenie instancji `SignatureOptions` i ustawienie właściwości kontrolujących proces podpisywania. Ten obiekt informuje bibliotekę, *co* ma być podpisane i *jak* ma być podpisane. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Dlaczego ma to znaczenie:** `SignatureOptions` działa jako kontrakt między Twoim kodem a silnikiem podpisu. Konfigurując go z góry, unikasz powtarzalnego kodu szablonowego przy podpisywaniu wielu dokumentów. + +--- + +## Krok 2: Zaimplementuj własną funkcję skrótu + +*Własna funkcja skrótu* daje pełną kontrolę nad wartością skrótu, którą algorytm podpisu podpisuje. Jest to przydatne, gdy domyślny skrót (SHA‑256) nie spełnia wymogów zgodności lub gdy trzeba skrócić tylko część dokumentu. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Dlaczego ma to znaczenie:** Przypisując `CustomSignHash`, zastępujesz wewnętrzny krok haszowania biblioteki własną funkcją `MyHash`. Silnik podpisu będzie teraz podpisywał bajty zwrócone przez Twoją funkcję, zapewniając zgodność z dowolną niestandardową polityką. + +--- + +## Krok 3: Wczytaj dokument i zastosuj podpis cyfrowy + +Po przygotowaniu opcji możesz otworzyć docelowy plik i wywołać metodę podpisywania. Metoda `Sign` jest dostarczana przez bibliotekę i wykorzystuje skonfigurowane `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Dlaczego ma to znaczenie:** Wywołanie `Sign` wykonuje wewnętrznie trzy działania: + +1. **Obliczanie skrótu** – teraz delegowane do Twojej własnej funkcji skrótu. +2. **Generowanie podpisu** – przy użyciu klucza prywatnego podanego w konfiguracji biblioteki. +3. **Osadzanie** – wygenerowany podpis jest dołączany do pliku wyjściowego. + +Jeśli którykolwiek krok się nie powiedzie, metoda zwraca `false`, co pozwala na eleganckie obsłużenie błędu. + +--- + +## Krok 4: Zweryfikuj, że dokument jest podpisany + +Szybka weryfikacja potwierdza, że podpis został poprawnie zastosowany. Większość bibliotek udostępnia metodę `Verify`, która sprawdza integralność podpisanego pliku. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Dlaczego ma to znaczenie:** Weryfikacja zapewnia, że podpisany dokument nie został zmodyfikowany po podpisaniu oraz że niestandardowy skrót wygenerował zgodny digest. + +--- + +## Jak skonfigurować podpis dla różnych typów plików + +Ten sam obiekt `SignatureOptions` może być używany ponownie dla PDF‑ów, dokumentów Word, obrazów lub zwykłych plików binarnych. Jedyną wymaganą zmianą jest użycie odpowiedniej klasy opcji (np. `PdfSignatureOptions`, `WordSignatureOptions`). Oto szybki przykład dla obrazu JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Dlaczego ma to znaczenie:** Zrozumienie, jak *skonfigurować podpis* dla każdego formatu, pozwala rozszerzyć tę samą bazę kodu na wiele typów dokumentów bez przepisywania logiki haszowania. + +--- + +## Typowe pułapki i najlepsze praktyki + +| Pułapka | Zalecane rozwiązanie | +|---------|----------------------| +| Zapomnienie o ustawieniu `CustomSignHash` po utworzeniu `SignatureOptions` | Przypisz delegata od razu po skonstruowaniu obiektu opcji. | +| Użycie algorytmu skrótu, którego certyfikat nie obsługuje | Sprawdź, czy użycie klucza w certyfikacie odpowiada długości skrótu (np. RSA‑2048 z SHA‑512). | +| Pomijanie konieczności zwolnienia obiektów `Signature` | Umieść instancję `Signature` w bloku `using`, aby zwolnić uchwyty plików. | +| Nadpisywanie podpisanego pliku na oryginalny źródłowy | Zawsze zapisuj do nowej ścieżki (`outputPath`), aby zachować oryginalny dokument. | + +--- + +## Pełny działający przykład + +Poniżej znajduje się samodzielny program, który łączy wszystkie elementy. Skopiuj go do nowego projektu konsolowego i uruchom; konsola zgłosi sukces lub niepowodzenie. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Oczekiwany wynik** + +``` +Signature verified successfully. +``` + +Jeśli konsola wypisze „Signing failed.” lub „Signature verification failed.”, sprawdź konfigurację certyfikatu i upewnij się, że własny skrót zwraca tablicę bajtów o oczekiwanym rozmiarze. + +--- + +## Zakończenie + +Teraz wiesz, jak **utworzyć opcje podpisu** w C#, dodać **własną funkcję skrótu** oraz **zastosować podpis cyfrowy** do dowolnego obsługiwanego dokumentu. Samouczek obejmował pełny cykl życia: konfigurowanie opcji, podpisywanie pliku i weryfikację wyniku. Ponowne użycie tej samej instancji `SignatureOptions` umożliwia także **konfigurację podpisu** dla obrazów, plików Word czy surowych binariów. + +--- + +## Co dalej? + +* Poznaj dodatkowe właściwości `SignatureOptions`, takie jak znaki wizualne, serwery znaczników czasu i łańcuchy certyfikatów – są one powiązane z frazą **apply digital signature**. +* Eksperymentuj z innymi algorytmami skrótu (np. Blake2b), zamieniając implementację wewnątrz `MyHash`. +* Zintegruj przepływ podpisywania z API webowym, aby umożliwić podpisywanie dokumentów „w locie” – naturalne rozszerzenie **how to sign document** w architekturze usługowej. + +Śmiało dostosuj kod do własnych polityk bezpieczeństwa i podziel się doświadczeniami w komentarzach. Powodzenia w podpisywaniu! + +## Co powinieneś nauczyć się 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 oraz wyjaśnienia krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Jak zmienić język podpisu PDF przy użyciu Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/programming-with-stamps-and-watermarks/_index.md b/pdf/polish/net/programming-with-stamps-and-watermarks/_index.md index 36649e9bd1..b1018fe257 100644 --- a/pdf/polish/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/polish/net/programming-with-stamps-and-watermarks/_index.md @@ -35,8 +35,9 @@ Samouczki „Programowanie ze stemplami i znakami wodnymi” dla .NET firmy Aspo | [Obraz w stopce](./image-in-footer/) | Dowiedz się, jak dodać obraz w stopce pliku PDF za pomocą Aspose.PDF dla .NET dzięki temu szczegółowemu samouczkowi krok po kroku. Idealne do ulepszania dokumentów. | | [Obraz w nagłówku](./image-in-header/) | Dowiedz się, jak dodać obraz do nagłówka pliku PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z tego samouczka krok po kroku. | | [Numer strony w nagłówku i stopce za pomocą pola pływającego](./page-number-in-header-footer-using-floating-box/) | W tym samouczku krok po kroku dowiesz się, jak łatwo dodawać numery stron w nagłówku i stopce pliku PDF za pomocą funkcji Floating Box w programie Aspose.PDF dla platformy .NET. | -| [Znaczki z numerami stron w pliku PDF](./page-number-stamps/) Dowiedz się, jak dodawać znaczniki numeracji stron do plików PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z naszego łatwego w użycia przewodnika z przykładem kodu. | +| [Znaczki z numerami stron w pliku PDF](./page-number-stamps/) Dowiedz się, jak dodawać znaczniki numeracji stron do plików PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z naszego łatwego w użycia przewodnika z przykładem kodu. | | [Dodaj numerację Bates do pliku PDF w C# – kompletny przewodnik](./add-bates-numbering-pdf-in-c-complete-guide/) | Dowiedz się, jak dodać numerację Bates do plików PDF w C# przy użyciu Aspose.PDF dla .NET w tym kompletnym przewodniku. | +| [Jak ustawić opcje numeracji Bates w C# – kompletny przewodnik](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Dowiedz się, jak ustawić opcje numeracji Bates w C# przy użyciu Aspose.PDF dla .NET w tym kompletnym przewodniku. | | [Tabela w sekcji nagłówka i stopki](./table-in-header-footer-section/) | Dowiedz się, jak łatwo dodać tekst do stopki pliku PDF za pomocą Aspose.PDF dla .NET. Dołączony przewodnik krok po kroku dla bezproblemowej integracji. | | [Tekst w stopce pliku PDF](./text-in-footer/) | Dowiedz się, jak dodać tekst w stopce pliku PDF za pomocą Aspose.PDF dla platformy .NET. | | [Tekst w nagłówku pliku PDF](./text-in-header/) | Naucz się dodawać nagłówki tekstowe do plików PDF za pomocą Aspose.PDF dla .NET dzięki temu samouczkowi krok po kroku. Ulepszaj swoje dokumenty wydajnie i skutecznie. | diff --git a/pdf/polish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/polish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..061cac48d8 --- /dev/null +++ b/pdf/polish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Jak ustawić opcje numeracji Batesa w C# przy użyciu GroupDocs. Postępuj + zgodnie z tym samouczkiem krok po kroku, aby dodać własne prefiksy i numery początkowe + podczas konwersji Worda do PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: pl +lastmod: 2026-08-14 +og_description: Jak szybko ustawić opcje numeracji Bates w C#. Ten przewodnik pokazuje, + jak dodać własne prefiksy i numery początkowe przy konwertowaniu Worda na PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Jak ustawić opcje numeracji Bates w C# – samouczek krok po kroku +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Jak ustawić opcje numeracji Bates w C# – kompletny przewodnik +url: /pl/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak ustawić opcje numeracji Bates w C# – kompletny przewodnik + +Jeśli potrzebujesz **jak ustawić opcje numeracji Bates** w C#, ten przewodnik poprowadzi Cię krok po kroku. Dowiesz się, jak skonfigurować numer początkowy, dodać prefiks i zastosować numerację podczas konwertowania dokumentu Word na PDF przy użyciu GroupDocs API. + +Przetwarzanie dokumentów często wymaga unikalnych identyfikatorów na każdej stronie w celach prawnych lub archiwalnych. Po zakończeniu tego samouczka będziesz mieć fragment kodu, który możesz wstawić do dowolnego projektu .NET, niezależnie od tego, czy tworzysz narzędzie wsparcia procesowego, czy automatyczny generator raportów. Nie są potrzebne żadne zewnętrzne narzędzia – wystarczy biblioteka GroupDocs.Conversion i kilka linii C#. + +## Czego będziesz potrzebować + +* .NET 6.0 SDK lub nowszy zainstalowany +* Visual Studio 2022 (lub dowolne IDE obsługujące .NET) +* Ważna licencja GroupDocs.Conversion (bezpłatna wersja próbna działa do testów) +* Przykładowy dokument Word (`input.docx`), który chcesz ponumerować + +Te wymagania wstępne zapewniają, że kod uruchomi się bez dodatkowej konfiguracji. + +## Jak ustawić opcje numeracji Bates – przegląd + +Podstawą **jak ustawić opcje numeracji Bates** są trzy obiekty: + +1. `Document` – ładuje plik źródłowy. +2. `BatesNumberingOptions` – przechowuje numer początkowy, prefiks i inne szczegóły formatowania. +3. `AddBatesNumbering` – metoda, która wstawia numerację na każdej stronie. + +Zrozumienie, dlaczego każdy element istnieje, pomaga dostosować rozwiązanie do bardziej złożonych scenariuszy, takich jak własne czcionki czy numeracja wielojęzyczna. + +## Krok 1: Zainstaluj pakiet NuGet GroupDocs.Conversion + +Otwórz terminal w folderze rozwiązania i uruchom: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** udostępnia klasę `Document` oraz metodę rozszerzającą `AddBatesNumbering` używaną później w samouczku. + +## Krok 2: Załaduj dokument źródłowy + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Dlaczego ten krok?* +Ładowanie pliku tworzy reprezentację w pamięci, którą silnik konwersji może manipulować. Bez instancji `Document` nie możesz zastosować numeracji Bates ani żadnej innej transformacji. + +## Krok 3: Utwórz opcje numeracji Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Dlaczego ten krok?* +`BatesNumberingOptions` kapsułkuje wszystkie ustawienia, które mogą być potrzebne przy **ustawianiu opcji numeracji Bates**. Dostosowanie `StartNumber` i `Prefix` pozwala dopasować wynik do systemu zarządzania sprawami. Właściwość `Position` kontroluje położenie wizualne, co często jest wymogiem zgodności. + +## Krok 4: Zastosuj numerację Bates w dokumencie + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Metoda `AddBatesNumbering` przechodzi przez każdą stronę załadowanego `Document` i wstawia skonfigurowany ciąg znaków. Ponieważ metoda działa na reprezentacji w pamięci, możesz łańcuchowo dodawać kolejne kroki przetwarzania (np. znak wodny) przed zapisaniem. + +## Krok 5: Konwertuj i zapisz wynik jako PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Dlaczego ten krok?* +Zapisywanie jako PDF jest powszechnym formatem końcowym dla dokumentów prawnych. Obiekt `PdfConvertOptions` pozwala precyzyjnie dostroić wyjście, ale nie jest wymagany do podstawowej numeracji. Wywołanie `Save` zapisuje w pełni ponumerowany PDF na dysku. + +## Pełny, działający przykład + +Łącząc wszystko razem, oto samodzielna aplikacja konsolowa, którą możesz skompilować i uruchomić: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Oczekiwany wynik** + +Uruchomienie programu tworzy `output.pdf`, w którym każda strona wyświetla etykietę taką jak `CASE-1000`, `CASE-1001` itd., umieszczoną w prawym stopce. Otwórz PDF w dowolnym przeglądarce, aby zweryfikować, że liczby pojawiają się zgodnie z zamierzeniami. + +## Częste pułapki i najlepsze praktyki + +| Problem | Dlaczego się pojawia | Jak tego uniknąć | +|-------|----------------|-----------------| +| **Ścieżki względne powodują `FileNotFoundException`** | Katalog roboczy aplikacji konsolowej może różnić się od tego w Visual Studio. | Używaj ścieżek bezwzględnych lub `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numeracja zachodzi na istniejące stopki** | Jeśli dokument źródłowy już zawiera treść w wybranym obszarze stopki, nowy numer może być ukryty. | Wybierz inną `Position` (np. `HeaderLeft`) lub dostosuj szablon źródłowy. | +| **Duże dokumenty działają wolno** | Numeracja Bates iteruje po każdej stronie; zużycie pamięci rośnie wraz z rozmiarem pliku. | Przetwarzaj dokument w partiach używając `Document.Split`, jeśli przekraczasz 500 stron. | +| **Wygaśnięcie licencji** | Bezpłatna wersja próbna GroupDocs wygasa po 30 dniach, powodując wyjątek przy `AddBatesNumbering`. | Zastosuj ważny klucz licencyjny przed załadowaniem dokumentu: `License license = new License(); license.SetLicense("license.lic");`. | + +**Wskazówka:** Jeśli potrzebujesz innego formatu numeru dla każdej sprawy (np. `2023-CASE-001`), zbuduj prefiks dynamicznie przed utworzeniem `BatesNumberingOptions`. + +## Rozszerzanie rozwiązania + +To samo **Bates numbering C#** podejście działa z innymi formatami źródłowymi, takimi jak `.txt`, `.html` czy nawet obrazy. Wystarczy zmienić rozszerzenie pliku przy konstruowaniu obiektu `Document`, a silnik konwersji zajmie się resztą. + +Możesz także połączyć **document conversion C#** z OCR dla zeskanowanych PDF‑ów: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Zakończenie + +Teraz wiesz **jak ustawić opcje numeracji Bates** w C# od początku do końca. Tworząc obiekt `BatesNumberingOptions`, stosując go za pomocą `AddBatesNumbering` i zapisując wynik jako PDF, możesz zautomatyzować produkcję dokumentów spełniających wymogi prawne i posiadających unikalne identyfikatory. + +Od tego momentu możesz zgłębiać powiązane tematy, takie jak **C# PDF generation**, **document conversion C#**, czy zaawansowane funkcje **GroupDocs API**, np. znakowanie wodne i podpisy cyfrowe. Eksperymentuj z różnymi prefiksami, pozycjami i formatami numerów, aby dopasować je do swojego przepływu pracy. + +Miłego kodowania! + +## 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 oraz wyjaśnienia krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [Dodaj numerację Bates PDF w C# – kompletny przewodnik](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Jak dodać i dostosować numery stron w PDF‑ach przy użyciu Aspose.PDF dla .NET | Przewodnik po manipulacji dokumentami](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Jak dodać stopkę z tekstowym znakiem wodnym w PDF‑ach przy użyciu Aspose.PDF dla .NET: przewodnik krok po kroku](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/annotations/_index.md b/pdf/portuguese/net/annotations/_index.md index de1293de26..fa6d1f01e7 100644 --- a/pdf/portuguese/net/annotations/_index.md +++ b/pdf/portuguese/net/annotations/_index.md @@ -35,6 +35,7 @@ Uma coleção abrangente de tutoriais que mostram como trabalhar com anotações | [Definir formatação de anotação de texto livre](./setfreetextannotationformatting/) | Aprenda como definir formatação de anotação de texto livre em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. | | [Riscar palavras](./strikeoutwords/) | Aprenda a riscar palavras em um PDF usando o Aspose.PDF para .NET com este guia passo a passo completo. Aprimore suas habilidades de edição de documentos. | | [Atualizar anotação de PDF de texto livre](./updatefreetextannotation/) Aprenda como atualizar anotações de texto livre em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. | +| [Desenhar retângulo em PDF – guia passo a passo C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Aprenda a desenhar um retângulo em um PDF usando o Aspose.PDF para .NET com este guia passo a passo em C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/portuguese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..f1445f7cb9 --- /dev/null +++ b/pdf/portuguese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Desenhe retângulo em PDF rapidamente usando C#. Aprenda como definir + as dimensões do retângulo e adicionar formas a uma página PDF em apenas algumas + linhas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: pt +lastmod: 2026-08-14 +og_description: Desenhe retângulo em PDF com C# em segundos. Este guia mostra como + definir as dimensões do retângulo, adicionar uma forma e verificar os limites da + página para gráficos PDF confiáveis. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Desenhar retângulo em PDF – tutorial completo de C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Desenhar retângulo em PDF – guia passo a passo C# +url: /pt/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# desenhar retângulo em pdf – tutorial completo em C# + +Se você precisa **desenhar retângulo em pdf** usando C#, este guia mostra uma solução concisa e pronta para produção. Você verá exatamente **como definir dimensões do retângulo**, verificar se a forma cabe e adicioná‑la a uma página com uma única chamada de método. + +O tutorial cobre tudo, desde a criação de um documento PDF até a renderização do retângulo, para que você possa copiar‑colar o código no seu próprio projeto e ver os resultados instantaneamente. Nenhuma documentação externa é necessária—apenas os passos abaixo. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 ou posterior (o código também funciona com .NET Framework 4.7+) +* O pacote NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Um entendimento básico da sintaxe C# +* Uma IDE como Visual Studio ou VS Code + +> **Pro tip:** Use a licença de avaliação gratuita do Aspose.PDF para experimentos rápidos; ela adiciona uma pequena marca d'água, mas permite testar todos os recursos. + +## How to draw rectangle on PDF with C# + +The core of the task is creating a `RectangleShape`, setting its size and stroke, and attaching it to a `Page`. The following H2 header contains the primary keyword, satisfying SEO requirements. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Explanation of each step + +| Etapa | Por que é importante | +|------|-----------------------| +| **1️⃣ Criar um novo documento PDF** | Inicializa o contêiner que armazenará páginas e gráficos. | +| **2️⃣ Adicionar uma página em branco** | Você precisa de um objeto `Page` porque as formas são anexadas a uma página, não diretamente ao documento. | +| **3️⃣ Definir os limites do retângulo** | É aqui que você **como definir dimensões do retângulo**. O construtor `Rectangle` recebe `x`, `y`, `width` e `height` em pontos (1 pt = 1/72 in). | +| **4️⃣ Criar a forma retângulo** | `RectangleShape` é a classe Aspose que renderiza um retângulo. Definir `StrokeColor` define o contorno; você também pode definir `FillColor` para um preenchimento sólido. | +| **5️⃣ Verificar limites da página** | `CheckShapeBoundary` lança uma exceção se o retângulo exceder o tamanho da página, evitando PDFs malformados. | +| **6️⃣ Adicionar a forma à página** | A forma torna‑se parte do fluxo de conteúdo da página. | +| **7️⃣ Salvar o PDF** | Persiste o documento em um arquivo que você pode abrir com qualquer visualizador de PDF. | + +O documento resultante `RectangleDemo.pdf` contém um retângulo preto posicionado no canto superior‑esquerdo da página, exatamente 500 pt de largura e 700 pt de altura. + +![exemplo de desenhar retângulo em pdf](https://example.com/rectangle-demo.png "exemplo de desenhar retângulo em pdf") + +*Texto alternativo da imagem: exemplo de desenhar retângulo em pdf mostrando um retângulo preto no canto superior esquerdo de uma página PDF.* + +## Como definir dimensões do retângulo para diferentes tamanhos de página + +The snippet above uses fixed values (`500 x 700`). In real applications you often need the rectangle to adapt to the page’s width and height. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Pontos principais:** + +* Use `page.PageInfo.Width` e `Height` para ler o tamanho real da página. +* Multiplicar por um fator (ex., `0.8f`) permite expressar as dimensões como uma porcentagem da página. +* Centralizar é conseguido subtraindo o tamanho do retângulo do tamanho da página e dividindo o restante pela metade. + +## Armadilhas comuns e como evitá‑las + +| Armadilha | Por que acontece | Correção | +|-----------|------------------|----------| +| Retângulo se estende além da página | Dimensões codificadas fixas maiores que o tamanho da página. | Chame `page.CheckShapeBoundary` **antes** de adicionar a forma; ajuste as dimensões se uma exceção for lançada. | +| Contorno não visível | `StrokeColor` deixado no padrão (`Color.Empty`). | Defina explicitamente `StrokeColor` (ex., `Color.Black`). | +| Retângulo aparece fora da tela | As coordenadas começam no canto inferior‑esquerdo no espaço PDF; usar coordenadas estilo tela (canto superior‑esquerdo) causa inversão. | Lembre‑se de que a origem `(0,0)` é o canto inferior‑esquerdo. Ajuste `y` adequadamente ou use `pageHeight - desiredY`. | +| Espessura de linha inesperada | A largura de linha padrão pode ser muito fina para impressão. | Defina `rectangleShape.LineWidth = 2;` para aumentar a espessura. | + +## Expandindo o exemplo + +Once you can **draw rectangle on pdf**, you can easily add other shapes: + +* **EllipseShape** – para círculos ou elipses. +* **PolygonShape** – para polígonos personalizados. +* **TextFragment** – para rotular seus retângulos. + +Todas as formas compartilham o mesmo fluxo de trabalho: definir limites, configurar aparência, verificar limites e, então, adicionar à página. + +## Programa completo e executável + +Below is the full program that combines the basic rectangle and the dynamic sizing example. Copy it into a new console project, restore the `Aspose.PDF` NuGet package, and run. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Saída esperada:** +Abra `CombinedRectangles.pdf`. Você verá um retângulo preto ancorado no canto inferior‑esquerdo e um retângulo azul‑escuro centralizado com preenchimento amarelo‑claro. Ambos os retângulos respeitam as margens da página. + +## Conclusão + +Você agora sabe como **desenhar retângulo em pdf** com C# e precisamente **como definir dimensões do retângulo** para layouts fixos e responsivos. A abordagem usa `RectangleShape` do Aspose.PDF, verificação de limites e aritmética simples para adaptar a qualquer tamanho de página. + +Em seguida, você pode explorar: + +* Adicionar **cores de preenchimento** e **estilos de linha** (tracejada, pontilhada) – palavra‑chave secundária: como definir dimensões do retângulo com estilo. +* Combinar múltiplas formas em uma única `Page` para criar gráficos ou formulários. +* Exportar o PDF para um stream para APIs web em vez de salvar em disco. + +Experimente diferentes tamanhos, cores e posições para dominar gráficos PDF em suas aplicações .NET. Feliz codificação! + +## O que você deve aprender a seguir? + +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. + +- [Como personalizar PDFs com Aspose.PDF para .NET: definir margens de página e desenhar linhas](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Como adicionar carimbos de página em PDFs usando Aspose.PDF para .NET: um guia completo](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Como adicionar carimbos de número de página em PDFs usando Aspose.PDF para .NET | Marcas d'água e fundos](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/conversion-export/_index.md b/pdf/portuguese/net/conversion-export/_index.md index b0773066f6..d6d7c0efaa 100644 --- a/pdf/portuguese/net/conversion-export/_index.md +++ b/pdf/portuguese/net/conversion-export/_index.md @@ -186,7 +186,7 @@ Aprenda a converter um documento PDF em uma imagem TIFF binarizada usando o Aspo Aprenda a converter arquivos PDF para o formato EPUB usando o Aspose.PDF para .NET. Siga este guia passo a passo para aprimorar a publicação digital e a acessibilidade do conteúdo. ### [Como converter PDF para TIFF de várias páginas usando Aspose.PDF .NET - Guia passo a passo](./convert-pdf-to-multi-page-tiff-aspose-dotnet/) -Aprenda a converter PDFs em imagens TIFF de várias páginas e alta qualidade usando o Aspose.PDF para .NET. Siga este guia passo a passo para uma implementação fácil em C#. +Aprenda a converter PDFs em imagens TIFF de várias páginas e alta qualidade usando o Aspose.PDF .NET. Siga este guia passo a passo para uma implementação fácil em C#. ### [Como converter PDF para PostScript em C# usando Aspose.PDF: um guia completo](./convert-pdf-to-postscript-aspose-csharp/) Aprenda a converter arquivos PDF para o formato PostScript usando o Aspose.PDF para .NET com este guia passo a passo. Perfeito para necessidades de impressão de alta qualidade. @@ -230,6 +230,9 @@ Aprenda a converter documentos PDF em imagens TIFF usando o Aspose.PDF para .NET ### [Como salvar PDF com Aspose – Guia passo a passo](./how-to-save-pdf-with-aspose-step-by-step-guide/) Aprenda a salvar documentos PDF usando Aspose, com exemplos de código C# e dicas de melhores práticas. +### [Salvar PDF como HTML e converter para PDF/X‑4 com Aspose.PDF em C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Aprenda a salvar PDFs como HTML e convertê-los para PDF/X‑4 usando Aspose.PDF em C# com exemplos práticos. + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/portuguese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..7799c2df01 --- /dev/null +++ b/pdf/portuguese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-14 +description: Salvar PDF como HTML e converter PDF para PDF/X‑4 usando Aspose.PDF para + C#. Código passo a passo mostra exportação para HTML, listagem de assinaturas e + edição do estado gráfico. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: pt +lastmod: 2026-08-14 +og_description: Salve PDF como HTML e converta PDF para PDF/X‑4 usando Aspose.PDF + para C#. Siga este guia completo para exportar HTML, listar assinaturas e editar + estados gráficos. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Salvar PDF como HTML e Converter para PDF/X‑4 com Aspose.PDF – Guia C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Salvar PDF como HTML e Converter para PDF/X‑4 com Aspose.PDF em C# +url: /pt/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salvar PDF como HTML e Converter para PDF/X‑4 com Aspose.PDF em C# + +Se você precisa **salvar PDF como HTML**, o Aspose.Pdf torna o processo simples. Este tutorial também mostra como **converter PDF para PDF/X‑4**, listar campos de assinatura e adicionar um ExtGState personalizado, oferecendo um fluxo de trabalho completo de ponta a ponta. + +Você aprenderá a: + +* Exportar um PDF para HTML limpo, ignorando imagens raster. +* Converter um documento PDF para o padrão PDF/X‑4 para saída pronta para impressão. +* Enumerar todos os campos de assinatura em um PDF. +* Inserir um estado gráfico personalizado (ExtGState) na primeira página. + +Todo o código funciona em .NET 6 ou posterior e requer o pacote NuGet Aspose.Pdf for .NET. + +## Pré‑requisitos + +| Requisito | Motivo | +|-----------|--------| +| .NET 6 SDK ou mais recente | Fornece o runtime para o exemplo em C#. | +| Visual Studio 2022 (ou qualquer IDE C#) | Permite edição e depuração fáceis. | +| Aspose.Pdf for .NET (v23.12 ou posterior) | Disponibiliza as classes `Document`, `PdfFormatConversionOptions` e `HtmlSaveOptions` usadas no tutorial. | +| Um arquivo PDF de exemplo (`sample.pdf`) | O documento de origem que será processado. | + +Instale a biblioteca com: + +```bash +dotnet add package Aspose.Pdf +``` + +## Visão geral da solução + +O programa executa seis etapas lógicas: + +1. Carregar o PDF de origem. +2. Listar o nome de cada campo de assinatura. +3. **Converter PDF para PDF/X‑4** e salvar o resultado. +4. **Salvar PDF como HTML** ignorando imagens raster. +5. Adicionar um ExtGState (estado gráfico) personalizado à primeira página. +6. Salvar o PDF modificado com o novo estado gráfico. + +Cada etapa é explicada abaixo, com código completo e o raciocínio por trás das escolhas. + +## Etapa 1: Carregar o documento PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Por que isso importa*: `Document` representa todo o arquivo PDF. Carregá‑lo uma única vez permite reutilizar o mesmo objeto em todas as operações subsequentes, reduzindo a sobrecarga de I/O. + +## Etapa 2: Listar todos os nomes de campos de assinatura + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Por que isso importa*: Conhecer os nomes dos campos de assinatura é essencial quando você precisa validar, remover ou substituir assinaturas digitais posteriormente. A coleção `Signatures` fornece uma visualização rápida e somente‑leitura dos campos. + +## Etapa 3: Converter PDF para PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Pontos principais** + +* `PdfStandard.PdfX4` indica ao Aspose.Pdf que incorpore todos os recursos necessários (fontes, perfis de cor) e imponha as restrições do PDF/X‑4. +* A conversão ocorre na memória; apenas o arquivo final é gravado em disco, mantendo a operação rápida. + +> **Dica profissional:** Verifique o resultado com um validador PDF/X‑4 (por exemplo, Adobe Preflight) se seu fluxo de trabalho downstream for rigoroso quanto à conformidade. + +## Etapa 4: Salvar PDF como HTML ignorando imagens raster + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Por que você pode querer isso**: A saída HTML é útil para visualização na web ou indexação de conteúdo. Ignorar imagens raster (`SkipRasterImages = true`) mantém o HTML leve e melhora o tempo de carregamento, especialmente quando o PDF original contém digitalizações de alta resolução. + +## Etapa 5: Adicionar um ExtGState personalizado à primeira página + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explicação*: Um objeto **ExtGState** controla transparência, modo de mesclagem e outros parâmetros gráficos. Ao adicionar `GS0`, você pode referenciar esse estado posteriormente em fluxos de conteúdo (por exemplo, para sobreposições semitransparentes). O código usa a API de baixo nível COS porque o Aspose.Pdf não expõe um wrapper de alto nível para a criação de ExtGState. + +## Etapa 6: Salvar o PDF modificado com o novo ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +O arquivo final (`sample_with_extgstate.pdf`) contém: + +* Todas as páginas e conteúdos originais. +* Uma versão compatível PDF/X‑4 (`sample_pdfx4.pdf`). +* Uma representação HTML sem imagens raster (`sample.html`). +* Um ExtGState personalizado (`GS0`) anexado aos recursos da primeira página. + +### Saída esperada no console + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Se o PDF de origem não possuir assinaturas, o loop não imprime nada, mas continua sem erro. + +## Variações comuns e casos de borda + +| Situação | Ajuste | +|----------|--------| +| **PDF não contém páginas** | Verifique `doc.Pages.Count` antes de acessar `doc.Pages[1]` para evitar `IndexOutOfRangeException`. | +| **Você precisa de PDF/A‑2b em vez de PDF/X‑4** | Altere `PdfStandard.PdfX4` para `PdfStandard.PdfA2b` em `PdfFormatConversionOptions`. | +| **Deseja manter imagens raster** | Defina `SkipRasterImages = false` (ou omita a propriedade) em `HtmlSaveOptions`. | +| **Múltiplos objetos ExtGState** | Use chaves únicas (`GS1`, `GS2`, …) ao adicionar ao `extGStateDict`. | +| **PDFs grandes (centenas de MB)** | Ative `doc.OptimizeResources = true` antes de salvar para reduzir o uso de memória. | + +## Código‑fonte completo (executável) + + + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos intimamente relacionados que ampliam as 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 alternativas de implementação em seus próprios projetos. + +- [Guia abrangente: Converter PDF para HTML usando Aspose.PDF .NET com estratégias personalizadas](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Converter PDF para HTML com URLs de imagem personalizadas usando Aspose.PDF .NET: Um guia completo](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Conversão de PDF para HTML usando Aspose.PDF .NET: Salvar imagens como PNG externos](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/programming-with-forms/_index.md b/pdf/portuguese/net/programming-with-forms/_index.md index 9e58152b12..3bfb3d7870 100644 --- a/pdf/portuguese/net/programming-with-forms/_index.md +++ b/pdf/portuguese/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Estes tutoriais também fornecem exemplos de código detalhados, explicações c | [Definir legenda do botão de opção](./set-radio-button-caption/) Aprenda a definir legendas para botões de opção em PDFs usando o Aspose.PDF para .NET. Este guia passo a passo explica como carregar, modificar e salvar seus formulários PDF. | | [Caixa de texto](./text-box/) | Descubra como adicionar caixas de texto a PDFs sem esforço usando o Aspose.PDF para .NET com este guia passo a passo. Aprimore a interação do usuário. | | [Como criar PDF com Aspose – Adicionar campo de formulário e páginas](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aprenda a criar um PDF, adicionar campos de formulário e inserir páginas usando Aspose.PDF para .NET neste tutorial passo a passo. | +| [Criar campo de formulário PDF em C# – guia passo a passo](./create-pdf-form-field-in-c-step-by-step-guide/) | Aprenda a criar um campo de formulário PDF em C# usando Aspose.PDF para .NET neste tutorial passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/portuguese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..f2597e51cc --- /dev/null +++ b/pdf/portuguese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Crie campos de formulário PDF rapidamente com C#. Aprenda como adicionar + uma caixa de texto ao PDF e modificar o PDF para incluir a caixa de texto usando + Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: pt +lastmod: 2026-08-14 +og_description: Criar campo de formulário PDF com C#. Este tutorial mostra como adicionar + uma caixa de texto a um PDF e modificar um PDF para incluir uma caixa de texto usando + Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Criar campo de formulário PDF em C# – guia completo de programação +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Criar campo de formulário PDF em C# – guia passo a passo +url: /pt/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Criar campo de formulário pdf em C# – guia passo a passo + +Se você precisa **criar campo de formulário pdf** em um documento, este guia o conduzirá por todo o processo. Você verá exatamente como **adicionar caixa de texto ao pdf** nas páginas e como **modificar pdf para incluir caixa de texto** usando a biblioteca Aspose.PDF para .NET. + +Trabalhar com formulários PDF é uma necessidade comum para sistemas de faturamento, pesquisas ou qualquer fluxo de trabalho que coleta entrada do usuário. Ao final deste tutorial você terá um trecho de código reutilizável que cria um campo de caixa de texto totalmente funcional, o posiciona onde desejar e salva o PDF atualizado — tudo sem sair do seu projeto C#. + +## 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+) +* Visual Studio 2022 ou qualquer IDE que suporte C# +* Uma licença ativa do Aspose.PDF para .NET (a avaliação gratuita funciona para desenvolvimento) +* Um arquivo PDF chamado `input.pdf` colocado em um diretório conhecido (o tutorial usa `YOUR_DIRECTORY` como placeholder) + +> **Dica profissional:** Se ainda não possui uma licença, você pode solicitar uma chave temporária no site da Aspose; a biblioteca funciona em modo de avaliação sem alterações no código. + +## Como criar campo de formulário pdf em C# (visão geral) + +1. Carregar o documento PDF existente. +2. Instanciar um `TextBoxField` e configurar seu nome e aparência. +3. Adicionar uma anotação widget que define o retângulo visual na página de destino. +4. Inserir o campo na coleção de formulários do documento. +5. Salvar o PDF modificado. + +Cada passo é explicado em detalhes abaixo, com exemplos de código completos e o raciocínio por trás das chamadas de API. + +## Etapa 1: Carregar o documento PDF + +A primeira operação é ler o PDF de origem. Aspose.PDF representa um arquivo PDF com a classe `Document`. Carregar o documento lhe dá acesso às suas páginas, à coleção de formulários e a outras estruturas. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Por que isso importa:** +Carregar o arquivo cria um modelo em memória do PDF, permitindo que você adicione, remova ou edite objetos sem corromper o arquivo original. O objeto `Document` também expõe a propriedade `Form`, que é onde você **adicionará caixa de texto ao pdf** mais adiante. + +## Etapa 2: Criar um campo de caixa de texto + +Um campo de caixa de texto é um tipo de campo de formulário que permite aos usuários digitar texto livre. No Aspose.PDF você o cria instanciando `TextBoxField`, passando a página de destino e um retângulo que define o tamanho inicial do widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Por que isso importa:** +* `PartialName` é a chave que as ferramentas de processamento de formulários (por exemplo, Adobe Acrobat, analisadores server‑side) usam para recuperar o valor inserido. +* O retângulo passado aqui define apenas o tamanho *inicial* do widget; você pode ajustar sua localização visual posteriormente com uma anotação widget (próxima etapa). +* Definir `DefaultAppearance` garante que o texto dentro da caixa seja renderizado de forma consistente em diferentes visualizadores. + +## Etapa 3: Definir a anotação widget visual + +Um campo de formulário pode ter uma ou mais **anotações widget** que controlam onde o campo aparece em cada página. Ao adicionar um widget você pode colocar o mesmo campo lógico em um local diferente ou até em várias páginas. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Por que isso importa:** +O retângulo do widget determina as coordenadas na tela que os usuários veem. Se você pular esta etapa, o campo pode existir na estrutura de dados do PDF, mas não será visível para o usuário final. Adicionar um widget é o passo que realmente **adiciona caixa de texto ao pdf**. + +## Etapa 4: Adicionar o campo configurado ao formulário do documento + +Agora que o `TextBoxField` está totalmente configurado, você precisa registrá‑lo na coleção de formulários do PDF. Isso torna o campo parte do formulário interativo e garante que ele seja salvo. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Por que isso importa:** +Sem adicionar o campo a `pdfDocument.Form`, o visualizador de PDF ignoraria a anotação widget, e os dados do campo nunca seriam enviados. Esta linha finaliza a operação de **modificar pdf para incluir caixa de texto**. + +## Etapa 5: Salvar o PDF atualizado + +Por fim, escreva as alterações de volta ao disco. Você pode sobrescrever o arquivo original ou criar um novo; o exemplo salva em `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Ao abrir `output.pdf` no Adobe Acrobat Reader, você verá uma caixa de texto retangular rotulada “Comments” na página 2. Os usuários podem clicar dentro, digitar, e o texto inserido fará parte dos dados do formulário PDF. + +## Exemplo completo em funcionamento + +Juntando todas as peças, aqui está um programa completo, pronto para ser executado. Copie‑o para um novo projeto de console, substitua `YOUR_DIRECTORY` por um caminho de pasta real e execute. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Saída esperada:** +A execução do programa imprime duas linhas de confirmação no console. Abrir `output.pdf` mostra uma caixa de texto na página 2 onde o usuário pode digitar comentários. Quando o formulário for enviado (por exemplo, via botão “Submit” do Adobe Acrobat), o nome do campo `Comments` aparecerá nos dados exportados em FDF ou XFDF. + +## Variações comuns e casos de borda + +| Situação | Como adaptar o código | +|-----------|-----------------------| +| **Adicionar o campo a uma página diferente** | Alterar `pdfDocument.Pages[1]` para o índice da página desejada (baseado em 0). | +| **Criar uma caixa de texto multilinha** | Definir `textBox.Multiline = true;` antes de adicionar o widget. | +| **Definir um valor padrão** | Atribuir `textBox.Value = "Enter your comments here";`. | +| **Tornar o campo obrigatório** | Definir `textBox.Required = true;`. | +| **Colocar o campo em várias páginas** | Chamar `textBox.AddWidgetAnnotation` para cada retângulo adicional nas páginas de destino. | +| **Usar uma fonte personalizada** | Carregar a fonte com `FontRepository.AddFont("path/to/font.ttf")` e referenciá‑la em `DefaultAppearance`. | + +**Dica profissional:** Sempre valide as coordenadas do retângulo em relação ao tamanho da página (`pdfDocument.Pages[1].Rect`). Se o widget ficar fora dos limites da página, os visualizadores podem recortar ou ocultar o campo. + +## Testando o campo de formulário + +1. Abra `output.pdf` no Adobe Acrobat Reader. +2. Clique dentro da caixa “Comments”; o cursor deve aparecer. +3. Digite qualquer texto e pressione **Tab** ou clique em outro lugar. +4. Escolha **File → Save As** para persistir o valor inserido. +5. (Opcional) Use a API `Form` do Aspose.PDF para extrair o valor programaticamente: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Este trecho demonstra que o campo não apenas está visível, mas também pode ser recuperado via código — essencial para processamento server‑side. + +## Conclusão + +Agora você sabe como **criar campo de formulário pdf** em C# do início ao fim. O tutorial abordou o carregamento de um PDF, a configuração de um `TextBoxField`, a adição de uma anotação widget, o registro do campo e a gravação do resultado. Com esses blocos de construção você pode **adicionar caixa de texto ao pdf**, **modificar pdf para incluir caixa de texto** e expandir a abordagem para outros tipos de campo, como caixas de seleção, botões de opção ou listas suspensas. + +Em seguida, explore tópicos relacionados como **extrair dados de formulário**, **planificar formulários PDF** ou **estilizar campos com bordas e cores**. Cada um desses conceitos se baseia na mesma API central que você acabou de dominar, permitindo criar PDFs interativos sofisticados inteiramente em C#. + +Feliz codificação, e sinta‑se à vontade para experimentar diferentes retângulos, fontes e regras de validação para atender às necessidades da sua aplicação! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos intimamente 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 em seus próprios projetos. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/programming-with-operators/_index.md b/pdf/portuguese/net/programming-with-operators/_index.md index ad752bd34d..2e8385d98f 100644 --- a/pdf/portuguese/net/programming-with-operators/_index.md +++ b/pdf/portuguese/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Os tutoriais "Programação com Operadores" do Aspose.PDF para .NET guiam você | [Desenhar XForm na página](./draw-xform-on-page/) | Aprenda a desenhar XForms em PDF usando Aspose.PDF para .NET com este guia passo a passo abrangente. | | [Operadores de PDF](./pdf-operators/) | Guia passo a passo para usar operadores PDF com Aspose.PDF para .NET. Adicione uma imagem a uma página PDF e especifique sua posição. | | [Remover objetos gráficos em arquivo PDF](./remove-graphics-objects/) Aprenda a remover objetos gráficos de um arquivo PDF usando o Aspose.PDF para .NET neste guia passo a passo. Simplifique suas tarefas de manipulação de PDF. | +| [Criar dicionário PDF vazio em C# com Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Aprenda a criar um dicionário PDF vazio usando Aspose.Pdf para .NET em C# neste tutorial passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/portuguese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..21122249ec --- /dev/null +++ b/pdf/portuguese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Crie um dicionário PDF vazio em C# usando Aspose.Pdf – aprenda como adicionar + um estado gráfico à coleção ExtGState e modificar PDFs programaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: pt +lastmod: 2026-08-14 +og_description: Crie um dicionário PDF vazio em C# com Aspose.Pdf. Siga este guia + completo para adicionar um estado gráfico personalizado à coleção ExtGState de um + PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Criar dicionário PDF vazio em C# – Guia passo a passo do Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Criar dicionário PDF vazio em C# com Aspose.Pdf +url: /pt/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Criar dicionário PDF vazio em C# com Aspose.Pdf + +Se você precisa **criar dicionário PDF vazio** objetos enquanto trabalha com arquivos PDF, este guia mostra exatamente como fazer isso em C# usando a biblioteca Aspose.Pdf. Seja construindo um estado gráfico personalizado, adicionando um novo recurso ou preparando um modelo para uso futuro, os passos abaixo fornecem uma solução completa e executável. + +Você aprenderá como carregar um PDF, acessar o dicionário de recursos da primeira página, construir um novo `CosPdfDictionary` e inseri-lo na coleção `ExtGState`. Ao final do tutorial você terá um `output.pdf` funcional que contém o dicionário recém‑criado. + +## 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.6+) +- Visual Studio 2022 ou qualquer IDE C# de sua preferência +- Uma licença Aspose.Pdf para .NET (ou uma chave de avaliação temporária) +- Um PDF de exemplo chamado **input.pdf** colocado em uma pasta que você controla (o caminho da pasta será usado como `dataDir`) + +Nenhum pacote NuGet adicional é necessário além de `Aspose.Pdf`. + +## Etapa 1: Configurar o projeto e referenciar Aspose.Pdf + +1. Crie um novo projeto **Console App** no Visual Studio. +2. Abra o **NuGet Package Manager** e instale `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Adicione as seguintes diretivas `using` no topo de `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Por que esses namespaces?* `Aspose.Pdf` contém a classe principal `Document`, enquanto `Aspose.Pdf.Operators.Gfx` fornece `CosPdfDictionary`, `CosPdfNumber` e objetos PDF de baixo nível relacionados necessários para **criar dicionário PDF vazio**. + +## Etapa 2: Carregar o PDF de origem + +A primeira operação é carregar o arquivo PDF existente em uma instância `Document`. Isso lhe dá acesso a todas as páginas, recursos e dicionários de baixo nível. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Explicação*: `Document` lê o arquivo para a memória e prepara estruturas internas. A instrução `using` garante que o manipulador de arquivo seja liberado após concluirmos o processamento. + +## Etapa 3: Acessar o dicionário de recursos da primeira página + +Cada página PDF possui um dicionário **Resources** que agrupa fontes, imagens, objetos ExtGState e outros recursos compartilhados. Para inserir um novo estado gráfico, precisamos editar esse dicionário. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` é uma classe auxiliar que permite tratar um dicionário PDF como um `Dictionary` do C#. + +## Etapa 4: Recuperar (ou criar) a coleção ExtGState + +`ExtGState` contém objetos de estado gráfico como opacidade, modo de mesclagem e espessura de linha. Se o PDF de origem já contém uma entrada `ExtGState`, reutilizamos; caso contrário, criamos um novo dicionário vazio. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Por que essa verificação?* Alguns PDFs omitem completamente a entrada `ExtGState`. Ao tratar ambos os casos, o tutorial permanece robusto para qualquer arquivo de entrada. + +## Etapa 5: **Criar dicionário PDF vazio** para um novo estado gráfico + +Agora realmente **criamos objetos dicionário PDF vazio** que definem os parâmetros do estado gráfico. O dicionário começa vazio, e adicionamos as chaves necessárias: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### O que cada entrada faz + +| Chave | Tipo | Significado | +|-----|------|------------| +| **CA** | `CosPdfNumber` | Opacidade do traço (intervalo 0‑1). | +| **ca** | `CosPdfNumber` | Opacidade do preenchimento (intervalo 0‑1). | +| **BM** | `CosPdfName` | Modo de mesclagem; `"Normal"` é o mais comum. | + +Como começamos com um **dicionário PDF vazio**, temos controle total sobre quais entradas são adicionadas. Você pode estender esse dicionário com parâmetros adicionais de estado gráfico, como `LW` (espessura da linha) ou `LC` (extremidade da linha), sempre que necessário. + +## Etapa 6: Inserir o novo estado gráfico em ExtGState + +O dicionário `ExtGState` funciona como um mapa onde cada entrada é identificada por um nome (ex.: `GS0`, `GS1`). Nós adicionamos nosso dicionário recém‑construído sob uma chave única. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Se você planeja adicionar múltiplos estados, incremente o sufixo (`GS1`, `GS2`, …) para evitar colisões de nomes. + +## Etapa 7: Salvar o PDF modificado + +Finalmente, grave as alterações de volta ao disco. O método `Save` serializa automaticamente os dicionários atualizados. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Abra `output.pdf` em qualquer visualizador de PDF e inspecione a entrada **Resources → ExtGState** (a maioria dos visualizadores oculta isso, mas ferramentas como Adobe Acrobat Preflight ou PDF‑Tron podem revelá‑lo). Você deve ver uma entrada `GS0` contendo os valores de opacidade e modo de mesclagem que definiu. + +## Exemplo completo em funcionamento + +Juntando todas as peças, aqui está o programa completo que você pode copiar‑colar em `Program.cs` e executar: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Saída esperada** – O console imprime uma linha de confirmação, e `output.pdf` contém a nova entrada `GS0` sob `ExtGState`. Quando você renderiza uma página que referencia `GS0` (ex.: via operador de fluxo de conteúdo `gs`), os traços serão totalmente opacos enquanto os preenchimentos terão 50 % de transparência. + +## Perguntas comuns e tratamento de casos extremos + +| Pergunta | Resposta | +|----------|----------| +| *E se o PDF tiver várias páginas?* | O exemplo foca na primeira página (`Pages[1]`). Para afetar todas as páginas, faça um loop em `pdfDocument.Pages` e repita as etapas 3‑5 para os recursos de cada página. | +| *Posso adicionar o dicionário a uma página que já tem uma entrada ExtGState chamada “GS0”?* | Sim, mas você deve usar uma chave diferente (`GS1`, `GS2`, …) para evitar sobrescrever a entrada existente. | +| *É seguro modificar o dicionário após salvar?* | Depois de chamar `Save`, a representação em memória é desvinculada do arquivo. Você pode continuar editando o objeto `Document` e chamar `Save` novamente, se necessário. | +| *Preciso de uma licença para Aspose.Pdf para usar ` | | + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam 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 criar linhas tracejadas em PDFs usando Aspose.PDF para .NET: Um guia passo a passo](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Como remover gráficos de PDFs usando Aspose.PDF .NET: Um guia completo](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Como criar PDFs multilayer usando Aspose.PDF para .NET: Um guia abrangente](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/programming-with-security-and-signatures/_index.md b/pdf/portuguese/net/programming-with-security-and-signatures/_index.md index 9fdb9d8d2d..f2b762e2a0 100644 --- a/pdf/portuguese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/portuguese/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Este tutorial oferece uma visão geral detalhada de métodos e técnicas para ga | [Verificar assinaturas PDF em C# – Como ler arquivos PDF assinados](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Aprenda a ler e validar assinaturas digitais em PDFs usando C# e Aspose.PDF para .NET. | | [Como reparar arquivos PDF – Guia completo em C# com Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Aprenda a reparar arquivos PDF corrompidos usando Aspose.PDF para .NET em C#, passo a passo. | | [Verificar assinatura PDF em C# – Guia completo de programação](./verify-pdf-signature-in-c-complete-programming-guide/) | Aprenda a validar assinaturas digitais em PDFs usando C# e Aspose.PDF, passo a passo, com exemplos completos. | +| [Criar opções de assinatura em C# – guia completo de assinatura digital](./create-signature-options-in-c-full-guide-to-digital-signing/) | Aprenda a criar opções avançadas de assinatura digital em C# usando Aspose.PDF, passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/portuguese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..4b95295bfd --- /dev/null +++ b/pdf/portuguese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Crie opções de assinatura em C# para aplicar assinatura digital. Aprenda + como configurar a assinatura, implementar uma função de hash personalizada e assinar + documentos programaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: pt +lastmod: 2026-08-14 +og_description: Crie opções de assinatura em C# e aplique uma assinatura digital. + Este tutorial orienta você na configuração da assinatura, na adição de uma função + de hash personalizada e na assinatura de um documento. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Crie opções de assinatura em C# – guia passo a passo de assinatura digital +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Crie opções de assinatura em C# – guia completo de assinatura digital +url: /pt/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Criar opções de assinatura em C# – guia completo para assinatura digital + +Crie opções de assinatura em C# para configurar um fluxo de trabalho de assinatura digital. Este tutorial mostra como aplicar assinatura digital, implementar uma função de hash personalizada e assinar um documento usando a classe `SignatureOptions`. Se você já precisou assinar um PDF, XML ou qualquer carga binária a partir de uma aplicação .NET, os passos abaixo fornecem uma solução pronta‑para‑uso. + +Você aprenderá a: + +* configurar `SignatureOptions` com um algoritmo de hash personalizado, +* chamar o método de assinatura corretamente, +* verificar se a assinatura foi aplicada, +* evitar armadilhas comuns ao configurar a assinatura. + +Os únicos pré‑requisitos são um SDK .NET recente (≥ .NET 6) e uma biblioteca de assinatura que exponha `SignatureOptions` (por exemplo, **GroupDocs.Signature**, **Aspose.Signature** ou uma API similar). Nenhuma ferramenta externa é necessária. + +--- + +## Pré‑requisitos + +| Requisito | Por que é importante | +|-----------|----------------------| +| .NET 6 SDK ou posterior | Fornece os recursos de linguagem modernos usados nos exemplos. | +| Um pacote NuGet de biblioteca de assinatura (ex.: `GroupDocs.Signature`) | Disponibiliza o tipo `SignatureOptions` e o método de extensão `Sign`. | +| Acesso a uma chave privada ou certificado | Necessário para gerar uma assinatura digital verificável. | + +Instale a biblioteca com a CLI padrão: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Etapa 1: Criar opções de assinatura + +O primeiro passo é instanciar `SignatureOptions` e definir as propriedades que controlam o processo de assinatura. Este objeto informa à biblioteca *o que* assinar e *como* assinar. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Por que isso importa:** `SignatureOptions` funciona como um contrato entre seu código e o mecanismo de assinatura. Ao configurá‑lo antecipadamente, você evita boilerplate repetido ao assinar múltiplos documentos. + +--- + +## Etapa 2: Implementar uma função de hash personalizada + +Uma *função de hash personalizada* dá controle total sobre o digest que o algoritmo de assinatura assina. Isso é útil quando o hash padrão (SHA‑256) não atende a requisitos de conformidade ou quando você precisa hash de um subconjunto do documento. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Por que isso importa:** Ao atribuir `CustomSignHash`, você substitui a etapa interna de hash da biblioteca por `MyHash`. O mecanismo de assinatura agora assinará os bytes retornados pela sua função, garantindo conformidade com qualquer política personalizada. + +--- + +## Etapa 3: Carregar o documento e aplicar assinatura digital + +Com as opções preparadas, você pode abrir o arquivo de destino e chamar o método de assinatura. O método `Sign` é fornecido pela biblioteca e usa o `SignatureOptions` configurado. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Por que isso importa:** A chamada a `Sign` realiza três ações internamente: + +1. **Cálculo do hash** – agora delegada à sua função de hash personalizada. +2. **Geração da assinatura** – usando a chave privada fornecida na configuração da biblioteca. +3. **Incorporação** – a assinatura gerada é anexada ao arquivo de saída. + +Se qualquer etapa falhar, o método retorna `false`, permitindo que você trate o erro de forma elegante. + +--- + +## Etapa 4: Verificar se o documento está assinado + +Uma verificação rápida confirma que a assinatura foi aplicada corretamente. A maioria das bibliotecas expõe um método `Verify` que checa a integridade do arquivo assinado. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Por que isso importa:** A verificação garante que o documento assinado não foi alterado após a assinatura e que o hash personalizado produziu um digest compatível. + +--- + +## Como configurar assinatura para diferentes tipos de arquivo + +O mesmo objeto `SignatureOptions` pode ser reutilizado para PDFs, documentos Word, imagens ou binários simples. A única mudança necessária é a classe de opções específica (ex.: `PdfSignatureOptions`, `WordSignatureOptions`). Aqui está um exemplo rápido para uma imagem JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Por que isso importa:** Entender como *configurar assinatura* para cada formato permite que você estenda a mesma base de código a múltiplos tipos de documento sem reescrever a lógica de hash. + +--- + +## Armadilhas comuns e boas práticas + +| Armadilha | Correção recomendada | +|-----------|----------------------| +| Esquecer de definir `CustomSignHash` após criar `SignatureOptions` | Atribua o delegate imediatamente após construir o objeto de opções. | +| Usar um algoritmo de hash que o certificado de assinatura não suporta | Verifique se o uso da chave do certificado corresponde ao tamanho do hash (ex.: RSA‑2048 com SHA‑512). | +| Ignorar a necessidade de descartar objetos `Signature` | Envolva a instância `Signature` em um bloco `using` para liberar os manipuladores de arquivo. | +| Salvar o arquivo assinado sobre o arquivo original | Sempre escreva em um novo caminho de arquivo (`outputPath`) para preservar o documento original. | + +--- + +## Exemplo completo funcional + +Abaixo está um programa autocontido que reúne todas as peças. Copie-o para um novo projeto de console e execute; o console reportará sucesso ou falha. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Saída esperada** + +``` +Signature verified successfully. +``` + +Se o console imprimir “Signing failed.” ou “Signature verification failed.”, verifique novamente a configuração do certificado e assegure que o hash personalizado retorne um array de bytes do tamanho esperado. + +--- + +## Conclusão + +Agora você sabe como **criar opções de assinatura** em C#, anexar uma **função de hash personalizada** e **aplicar assinatura digital** a qualquer documento suportado. O tutorial cobriu todo o ciclo de vida: configurar as opções, assinar o arquivo e verificar o resultado. Reutilizando a mesma instância de `SignatureOptions`, você também pode **como configurar assinatura** para imagens, arquivos Word ou binários crus. + +--- + +## O que vem a seguir? + +* Explore propriedades adicionais de `SignatureOptions` como carimbos visuais, servidores de timestamp e cadeias de certificados – elas se alinham com a palavra‑chave **apply digital signature**. +* Experimente outros algoritmos de hash (ex.: Blake2b) trocando a implementação dentro de `MyHash`. +* Integre o fluxo de assinatura em uma API web para habilitar assinatura de documentos em tempo real – uma extensão natural de **how to sign document** em uma arquitetura orientada a serviços. + +Sinta‑se à vontade para adaptar o código às suas políticas de segurança e compartilhar sua experiência nos comentários. Boa assinatura! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos intimamente relacionados que expandem 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 de implementação alternativas em seus próprios projetos. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/programming-with-stamps-and-watermarks/_index.md b/pdf/portuguese/net/programming-with-stamps-and-watermarks/_index.md index ac2da6b0c3..00cefb4065 100644 --- a/pdf/portuguese/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/portuguese/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Os tutoriais "Programação com Carimbos e Marcas D'água" do Aspose.PDF para .N | [Texto no rodapé do arquivo PDF](./text-in-footer/) | Aprenda como adicionar texto no rodapé do arquivo PDF com o Aspose.PDF para .NET. | | [Texto no cabeçalho do arquivo PDF](./text-in-header/) | Aprenda a adicionar cabeçalhos de texto a PDFs usando o Aspose.PDF para .NET com este tutorial passo a passo. Aprimore seus documentos com eficiência e eficácia. | | [Adicionar numeração Bates em PDF em C# – Guia completo](./add-bates-numbering-pdf-in-c-complete-guide/) | Aprenda a aplicar numeração Bates em PDFs usando Aspose.PDF para .NET com este guia passo a passo. | +| [Como definir opções de numeração Bates em C# – guia completo](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Aprenda a configurar opções avançadas de numeração Bates em PDFs usando Aspose.PDF para .NET com este guia passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/portuguese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..3d0b6e4b3e --- /dev/null +++ b/pdf/portuguese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Como definir opções de numeração Bates em C# usando o GroupDocs. Siga + este tutorial passo a passo para adicionar prefixos personalizados e números iniciais + ao converter Word para PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: pt +lastmod: 2026-08-14 +og_description: Como definir opções de numeração Bates rapidamente em C#. Este guia + mostra como adicionar prefixos personalizados e números iniciais ao converter Word + para PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Como definir opções de numeração Bates em C# – tutorial passo a passo +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Como definir opções de numeração Bates em C# – guia completo +url: /pt/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como definir opções de numeração Bates em C# – guia completo + +Se você precisa **como definir opções de numeração Bates** em C#, este guia o conduz pelos passos exatos. Você aprenderá a configurar o número inicial, adicionar um prefixo e aplicar a numeração ao converter um documento Word para PDF usando a API GroupDocs. + +O processamento de documentos costuma exigir identificadores únicos em cada página para fins legais ou de arquivamento. Ao final deste tutorial você terá um trecho reutilizável que pode ser inserido em qualquer projeto .NET, seja para criar uma ferramenta de suporte a litígios ou um gerador de relatórios automatizado. Nenhuma ferramenta externa é necessária — apenas a biblioteca GroupDocs.Conversion e algumas linhas de C#. + +## O que você precisará + +Antes de começar, certifique‑se de que tem: + +* .NET 6.0 SDK ou versão posterior instalada +* Visual Studio 2022 (ou qualquer IDE que suporte .NET) +* Uma licença válida do GroupDocs.Conversion (a avaliação gratuita funciona para testes) +* Um documento Word de exemplo (`input.docx`) que você deseja numerar + +Esses pré‑requisitos garantem que o código seja executado sem configurações adicionais. + +## Como definir opções de numeração Bates – visão geral + +O núcleo de **como definir opções de numeração Bates** está em três objetos: + +1. `Document` – carrega o arquivo de origem. +2. `BatesNumberingOptions` – contém o número inicial, o prefixo e outros detalhes de formatação. +3. `AddBatesNumbering` – o método que insere a numeração em cada página. + +Entender por que cada componente existe ajuda a adaptar a solução a cenários mais complexos, como fontes personalizadas ou numeração multilíngue. + +## Etapa 1: Instalar o pacote NuGet GroupDocs.Conversion + +Abra um terminal na pasta da sua solução e execute: + +```bash +dotnet add package GroupDocs.Conversion +``` + +A **GroupDocs API** fornece a classe `Document` e o método de extensão `AddBatesNumbering` usados mais adiante no tutorial. + +## Etapa 2: Carregar o documento de origem + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Por que esta etapa?* +Carregar o arquivo cria uma representação em memória que o motor de conversão pode manipular. Sem uma instância de `Document` você não pode aplicar a numeração Bates nem qualquer outra transformação. + +## Etapa 3: Criar as opções de numeração Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Por que esta etapa?* +`BatesNumberingOptions` encapsula todas as configurações necessárias ao **definir opções de numeração Bates**. Ajustar `StartNumber` e `Prefix` permite alinhar a saída ao seu sistema de gerenciamento de casos. A propriedade `Position` controla a colocação visual, que frequentemente é um requisito de conformidade. + +## Etapa 4: Aplicar a numeração Bates ao documento + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +O método `AddBatesNumbering` percorre cada página do `Document` carregado e insere a string configurada. Como o método atua sobre a representação em memória, você pode encadear etapas adicionais de processamento (por exemplo, marca d’água) antes de salvar. + +## Etapa 5: Converter e salvar o resultado como PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Por que esta etapa?* +Salvar como PDF é um formato final comum para documentos legais. O objeto `PdfConvertOptions` permite ajustar a saída, mas não é obrigatório para a numeração básica. A chamada `Save` grava o PDF totalmente numerado no disco. + +## Exemplo completo e executável + +Juntando tudo, segue um aplicativo de console autocontido que você pode compilar e executar: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Saída esperada** + +Ao executar o programa, ele cria `output.pdf` onde cada página exibe um rótulo como `CASE-1000`, `CASE-1001` etc., posicionado no rodapé direito. Abra o PDF em qualquer visualizador para confirmar que os números aparecem como esperado. + +## Armadilhas comuns e boas práticas + +| Problema | Por que acontece | Como evitar | +|----------|------------------|--------------| +| **Caminhos relativos causam `FileNotFoundException`** | O diretório de trabalho de um aplicativo console pode ser diferente do do Visual Studio. | Use caminhos absolutos ou `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numeração sobrepõe rodapés existentes** | Se o documento de origem já contém conteúdo na área de rodapé escolhida, o novo número pode ficar oculto. | Escolha um `Position` diferente (ex.: `HeaderLeft`) ou ajuste o modelo de origem. | +| **Documentos grandes são lentos** | A numeração Bates itera sobre cada página; o uso de memória cresce com o tamanho do arquivo. | Processar o documento em blocos usando `Document.Split` se ultrapassar 500 páginas. | +| **Expiração da licença** | A avaliação gratuita do GroupDocs expira após 30 dias, gerando exceção ao chamar `AddBatesNumbering`. | Aplique uma chave de licença válida antes de carregar o documento: `License license = new License(); license.SetLicense("license.lic");`. | + +**Dica profissional:** Se precisar de um formato de número diferente por caso (ex.: `2023-CASE-001`), construa o prefixo dinamicamente antes de criar o `BatesNumberingOptions`. + +## Expandindo a solução + +A mesma abordagem **Bates numbering C#** funciona com outros formatos de origem, como `.txt`, `.html` ou até imagens. Basta alterar a extensão do arquivo ao instanciar o objeto `Document`, e o motor de conversão cuidará do resto. + +Você também pode combinar **document conversion C#** com OCR para PDFs escaneados: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusão + +Agora você sabe **como definir opções de numeração Bates** em C# do início ao fim. Criando um objeto `BatesNumberingOptions`, aplicando‑o com `AddBatesNumbering` e salvando o resultado como PDF, você pode automatizar a produção de documentos legalmente compatíveis e identificados de forma única. + +A partir daqui, explore tópicos relacionados como **geração de PDF em C#**, **conversão de documentos C#** ou recursos avançados da **GroupDocs API**, como marca d’água e assinaturas digitais. Experimente diferentes prefixos, posições e formatos de número para adequar ao seu fluxo de trabalho. + +Happy coding! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos intimamente relacionados que ampliam as técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens alternativas em seus próprios projetos. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/annotations/_index.md b/pdf/russian/net/annotations/_index.md index 867473ab72..8fa92a63d8 100644 --- a/pdf/russian/net/annotations/_index.md +++ b/pdf/russian/net/annotations/_index.md @@ -34,7 +34,8 @@ | [Установить свойство выноски в файле PDF](./setcalloutproperty/) | Узнайте, как задать свойство выноски в PDF-файле с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | | [Установить свободное форматирование текстовых аннотаций](./setfreetextannotationformatting/) | Узнайте, как задать свободное форматирование текстовых аннотаций в документах PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. | | [Вычеркнуть слова](./strikeoutwords/) | Узнайте, как зачеркивать слова в PDF с помощью Aspose.PDF для .NET с помощью этого всеобъемлющего пошагового руководства. Улучшите свои навыки редактирования документов. | -| [Обновить бесплатную текстовую аннотацию PDF](./updatefreetextannotation/) Узнайте, как обновлять свободные текстовые аннотации в документах PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. | +| [Обновить бесплатную текстовую аннотацию PDF](./updatefreetextannotation/) Узнайте, как обновлять свободные текстовые аннотации в документах PDF с помощью Aspose.PDF для .NET с этим пошаговым руководством. | +| [Рисовать прямоугольник в PDF – пошаговое руководство C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Узнайте, как программно рисовать прямоугольники в PDF с помощью Aspose.PDF для .NET на C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/russian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..526b92b4d4 --- /dev/null +++ b/pdf/russian/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Быстро нарисовать прямоугольник в PDF с помощью C#. Узнайте, как задать + размеры прямоугольника и добавить фигуры на страницу PDF всего за несколько строк. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: ru +lastmod: 2026-08-14 +og_description: Нарисуйте прямоугольник в PDF с помощью C# за считанные секунды. Это + руководство показывает, как задать размеры прямоугольника, добавить форму и проверить + границы страницы для надёжной графики PDF. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Рисуем прямоугольник в PDF – полный учебник по C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Рисуем прямоугольник в PDF – пошаговое руководство по C# +url: /ru/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# рисование прямоугольника в pdf – полный учебник C# + +Если вам нужно **draw rectangle on pdf** с использованием C#, это руководство покажет вам лаконичное, готовое к продакшену решение. Вы увидите точно **how to define rectangle dimensions**, проверите, что фигура помещается, и добавите её на страницу одним вызовом метода. + +Учебник охватывает всё от создания PDF‑документа до отрисовки прямоугольника, так что вы можете скопировать‑вставить код в свой проект и увидеть результаты мгновенно. Внешняя документация не требуется — просто следуйте шагам ниже. + +## Предварительные требования + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7+) +* Пакет NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Базовое понимание синтаксиса C# +* IDE, например Visual Studio или VS Code + +> **Pro tip:** Используйте бесплатную оценочную лицензию Aspose.PDF для быстрых экспериментов; она добавляет небольшой водяной знак, но позволяет протестировать все функции. + +## Как нарисовать прямоугольник в PDF с помощью C# + +Суть задачи — создать `RectangleShape`, задать его размер и обводку, и прикрепить к `Page`. Следующий заголовок H2 содержит основной ключевой запрос, удовлетворяя требованиям SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Пояснение каждого шага + +| Step | Зачем это нужно | +|------|-----------------| +| **1️⃣ Create a new PDF document** | Инициализирует контейнер, который будет хранить страницы и графику. | +| **2️⃣ Add a blank page** | Вам нужен объект `Page`, потому что фигуры привязываются к странице, а не напрямую к документу. | +| **3️⃣ Define the rectangle bounds** | Здесь вы **how to define rectangle dimensions**. Конструктор `Rectangle` принимает `x`, `y`, `width` и `height` в пунктах (1 pt = 1/72 in). | +| **4️⃣ Create the rectangle shape** | `RectangleShape` — класс Aspose, который отрисовывает прямоугольник. Установка `StrokeColor` задаёт контур; также можно задать `FillColor` для сплошного заполнения. | +| **5️⃣ Verify page boundaries** | `CheckShapeBoundary` бросает исключение, если прямоугольник превышает размер страницы, предотвращая повреждённые PDF. | +| **6️⃣ Add the shape to the page** | Фигура становится частью потока содержимого страницы. | +| **7️⃣ Save the PDF** | Сохраняет документ в файл, который можно открыть в любом PDF‑просмотрщике. | + +Полученный `RectangleDemo.pdf` содержит чёрный прямоугольник, расположенный в верхнем левом углу страницы, шириной ровно 500 pt и высотой 700 pt. + +![пример рисования прямоугольника в pdf](https://example.com/rectangle-demo.png "пример рисования прямоугольника в pdf") + +*Текст alt изображения: пример рисования прямоугольника в pdf, показывающий чёрный прямоугольник в верхнем левом углу страницы PDF.* + +## Как задать размеры прямоугольника для разных размеров страниц + +В приведённом выше фрагменте используются фиксированные значения (`500 x 700`). В реальных приложениях часто требуется, чтобы прямоугольник адаптировался к ширине и высоте страницы. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Ключевые моменты:** + +* Используйте `page.PageInfo.Width` и `Height` для чтения фактического размера страницы. +* Умножение на коэффициент (например, `0.8f`) позволяет задавать размеры в процентах от страницы. +* Центрирование достигается вычитанием размеров прямоугольника из размеров страницы и делением остатка пополам. + +## Распространённые подводные камни и как их избежать + +| Подводный камень | Почему происходит | Решение | +|------------------|-------------------|---------| +| Прямоугольник выходит за пределы страницы | Жёстко заданные размеры больше размера страницы. | Вызовите `page.CheckShapeBoundary` **до** добавления фигуры; при возникновении исключения скорректируйте размеры. | +| Контур не виден | `StrokeColor` оставлен по умолчанию (`Color.Empty`). | Явно задайте `StrokeColor` (например, `Color.Black`). | +| Прямоугольник появляется за пределами видимой области | Координаты в PDF начинаются с нижнего левого угла; использование координат в стиле экрана (верхний‑левый) приводит к инверсии. | Помните, что начало координат `(0,0)` находится в нижнем левом углу. Скорректируйте `y` соответственно или используйте `pageHeight - desiredY`. | +| Неожиданная толщина линии | Ширина линии по умолчанию может быть слишком тонкой для печати. | Установите `rectangleShape.LineWidth = 2;` чтобы увеличить толщину. | + +## Расширение примера + +Как только вы сможете **draw rectangle on pdf**, вы легко сможете добавить другие фигуры: + +* **EllipseShape** – для кругов или овалов. +* **PolygonShape** – для пользовательских многоугольников. +* **TextFragment** – для подписи ваших прямоугольников. + +Все фигуры используют один и тот же рабочий процесс: задайте границы, настройте внешний вид, проверьте границы, затем добавьте на страницу. + +## Полный, исполняемый пример + +Ниже представлена полная программа, объединяющая базовый прямоугольник и пример динамического масштабирования. Скопируйте её в новый консольный проект, восстановите пакет NuGet `Aspose.PDF` и запустите. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Ожидаемый результат:** +Откройте `CombinedRectangles.pdf`. Вы увидите чёрный прямоугольник, привязанный к нижнему левому углу, и центрированный тёмно‑синий прямоугольник со светло‑жёлтой заливкой. Оба прямоугольника учитывают поля страницы. + +## Заключение + +Теперь вы знаете, как **draw rectangle on pdf** с помощью C# и точно **how to define rectangle dimensions** для фиксированных и адаптивных макетов. Подход использует `RectangleShape` из Aspose.PDF, проверку границ и простую арифметику для адаптации к любому размеру страницы. + +Далее вы можете изучить: + +* Добавление **fill colors** и **line styles** (пунктирные, точечные) – вторичный запрос: how to define rectangle dimensions with style. +* Объединение нескольких фигур в один `Page` для создания диаграмм или форм. +* Экспорт PDF в поток для веб‑API вместо сохранения на диск. + +Экспериментируйте с различными размерами, цветами и позициями, чтобы освоить графику PDF в ваших .NET‑приложениях. Приятного кодинга! + +## Что изучать дальше? + +Следующие учебники охватывают тесно связанные темы, основанные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полные рабочие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и изучить альтернативные подходы к реализации в ваших проектах. + +- [Как настроить PDF с помощью Aspose.PDF for .NET: установить поля страницы и рисовать линии](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Как добавить штампы страниц в PDF с помощью Aspose.PDF for .NET: полное руководство](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Как добавить штампы номеров страниц в PDF с помощью Aspose.PDF for .NET | Водяные знаки и фоны](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/conversion-export/_index.md b/pdf/russian/net/conversion-export/_index.md index 9e7ec65cce..8c347bbaec 100644 --- a/pdf/russian/net/conversion-export/_index.md +++ b/pdf/russian/net/conversion-export/_index.md @@ -51,7 +51,7 @@ Учебник по коду для Aspose.PDF Net ### [Конвертируйте PDF-страницы в PNG с помощью Aspose.PDF .NET: подробное руководство](./convert-pdf-pages-to-png-aspose-net/) -Узнайте, как преобразовать страницы PDF в высококачественные изображения PNG с помощью Aspose.PDF для .NET. Следуйте этому пошаговому руководству, чтобы эффективно автоматизировать процесс преобразования. +Узнайте, как преобразовать страницы PDF в высококачественные изображения PNG с помощью Aspose.PDF для .NET. Следуйте этому подробному руководству, чтобы эффективно автоматизировать процесс преобразования. ### [Конвертируйте PDF в BMP с помощью Aspose.PDF для .NET: пошаговое руководство](./convert-pdf-to-bmp-aspose-pdf-net/) Узнайте, как преобразовать страницы PDF в высококачественные изображения BMP с помощью Aspose.PDF для .NET с помощью этого подробного руководства. @@ -141,7 +141,7 @@ Узнайте, как эффективно экспортировать данные из приложений в PDF с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются настройка, примеры кода на C# и основные функции. ### [Экспорт аннотаций PDF с помощью Aspose.PDF .NET: подробное руководство](./export-annotations-aspose-pdf-net/) -Узнайте, как эффективно экспортировать аннотации из PDF-файлов с помощью Aspose.PDF для .NET. Это руководство охватывает настройку, реализацию и лучшие практики. +Узнайте, как эффективно экспортировать аннотации из PDF-файлов с помощью Aspose.PDF .NET. Это руководство охватывает настройку, реализацию и лучшие практики. ### [Экспорт данных PDF в XML с помощью Aspose.PDF для .NET: пошаговое руководство](./export-pdf-data-to-xml-aspose-dotnet-guide/) Узнайте, как эффективно экспортировать данные PDF-форм в структурированный XML с помощью Aspose.PDF для .NET — мощной библиотеки, предназначенной для работы с PDF-файлами. @@ -230,6 +230,8 @@ ### [Преобразование PDF в TIFF в .NET с использованием Aspose.PDF: пошаговое руководство](./pdf-to-tiff-conversion-aspose-pdf-net/) Узнайте, как преобразовывать документы PDF в изображения TIFF с помощью Aspose.PDF для .NET. Освойте пользовательские глубины цвета и передовые методы обработки изображений. +### [Сохраните PDF как HTML и конвертируйте в PDF/X‑4 с помощью Aspose.PDF на C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) + ### [Как сохранить PDF с помощью Aspose – пошаговое руководство](./how-to-save-pdf-with-aspose-step-by-step-guide/) Подробное руководство по сохранению PDF-файлов с использованием Aspose.PDF в .NET. diff --git a/pdf/russian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/russian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..51969de71a --- /dev/null +++ b/pdf/russian/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Сохранить PDF как HTML и преобразовать PDF в PDF/X‑4 с помощью Aspose.PDF + для C#. Пошаговый код демонстрирует экспорт в HTML, перечисление подписей и редактирование + графического состояния. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: ru +lastmod: 2026-08-14 +og_description: Сохраните PDF в формате HTML и преобразуйте PDF в PDF/X‑4 с помощью + Aspose.PDF для C#. Следуйте этому полному руководству, чтобы экспортировать HTML, + перечислять подписи и редактировать графические состояния. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Сохранить PDF как HTML и конвертировать в PDF/X‑4 с помощью Aspose.PDF – + руководство по C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Сохранить PDF как HTML и преобразовать в PDF/X‑4 с помощью Aspose.PDF в C# +url: /ru/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сохранить PDF как HTML и преобразовать в PDF/X‑4 с помощью Aspose.PDF на C# + +Если вам нужно **сохранить PDF как HTML**, Aspose.Pdf упрощает процесс. В этом руководстве также показано, как **преобразовать PDF в PDF/X‑4**, вывести список полей подписей и добавить пользовательский ExtGState, предоставляя полный сквозной рабочий процесс. + +Вы узнаете, как: + +* Экспортировать PDF в чистый HTML, пропуская растровые изображения. +* Преобразовать документ PDF в стандарт PDF/X‑4 для готового к печати вывода. +* Перечислить все поля подписей в PDF. +* Вставить пользовательское графическое состояние (ExtGState) на первой странице. + +Весь код работает на .NET 6 или новее и требует пакет NuGet Aspose.Pdf for .NET. + +## Prerequisites + +| Требование | Причина | +|-------------|--------| +| .NET 6 SDK или новее | Обеспечивает среду выполнения для примера на C#. | +| Visual Studio 2022 (или любой C# IDE) | Обеспечивает удобное редактирование и отладку. | +| Aspose.Pdf for .NET (v23.12 или новее) | Предоставляет классы `Document`, `PdfFormatConversionOptions` и `HtmlSaveOptions`, используемые в руководстве. | +| Пример PDF‑файла (`sample.pdf`) | Исходный документ, который будет обрабатываться. | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +Программа выполняет шесть логических шагов: + +1. Загрузить исходный PDF. +2. Вывести имена всех полей подписей. +3. **Преобразовать PDF в PDF/X‑4** и сохранить результат. +4. **Сохранить PDF как HTML**, пропуская растровые изображения. +5. Добавить пользовательский ExtGState (графическое состояние) на первую страницу. +6. Сохранить изменённый PDF с новым графическим состоянием. + +Каждый шаг объясняется ниже, с полным кодом и обоснованием выбранных подходов. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Почему это важно*: `Document` представляет весь PDF‑файл. Однократная загрузка позволяет переиспользовать один объект для всех последующих операций, что снижает нагрузку ввода‑вывода. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Почему это важно*: Знание имён полей подписей необходимо, когда позже требуется проверять, удалять или заменять цифровые подписи. Коллекция `Signatures` предоставляет быстрый, только‑для‑чтения просмотр полей. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` указывает Aspose.Pdf внедрить все необходимые ресурсы (шрифты, цветовые профили) и обеспечить соблюдение ограничений PDF/X‑4. +* Преобразование происходит в памяти; на диск записывается только конечный файл, что ускоряет процесс. + +> **Pro tip:** Проверьте результат с помощью валидатора PDF/X‑4 (например, Adobe Preflight), если ваш последующий процесс строго требует соответствия. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Почему это может понадобиться**: HTML‑вывод полезен для веб‑просмотра или индексации контента. Пропуск растровых изображений (`SkipRasterImages = true`) делает HTML лёгким и ускоряет загрузку, особенно когда исходный PDF содержит сканы высокого разрешения. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: Объект **ExtGState** управляет прозрачностью, режимом смешивания и другими графическими параметрами. Добавив `GS0`, вы позже сможете ссылаться на это состояние в потоках содержимого (например, для полупрозрачных наложений). Код использует низкоуровневый COS API, потому что Aspose.Pdf не предоставляет высокоуровневый обёртка для создания ExtGState. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Итоговый файл (`sample_with_extgstate.pdf`) содержит: + +* Все оригинальные страницы и содержимое. +* Соответствующую версию PDF/X‑4 (`sample_pdfx4.pdf`). +* HTML‑представление без растровых изображений (`sample.html`). +* Пользовательский ExtGState (`GS0`), прикреплённый к ресурсам первой страницы. + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Если у исходного PDF нет подписей, цикл ничего не выводит, но продолжает работу без ошибок. + +## Common variations and edge cases + +| Ситуация | Корректировка | +|-----------|------------| +| **PDF содержит нет страниц** | Проверьте `doc.Pages.Count` перед обращением к `doc.Pages[1]`, чтобы избежать `IndexOutOfRangeException`. | +| **Вам нужен PDF/A‑2b вместо PDF/X‑4** | Измените `PdfStandard.PdfX4` на `PdfStandard.PdfA2b` в `PdfFormatConversionOptions`. | +| **Вы хотите оставить растровые изображения** | Установите `SkipRasterImages = false` (или опустите свойство) в `HtmlSaveOptions`. | +| **Несколько объектов ExtGState** | Используйте уникальные ключи (`GS1`, `GS2`, …) при добавлении в `extGStateDict`. | +| **Большие PDF (сотни МБ)** | Включите `doc.OptimizeResources = true` перед сохранением, чтобы снизить потребление памяти. | + +## Full source code (runnable) + + + +## What Should You Learn Next? + +Следующие руководства охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [Полное руководство: Конвертация PDF в HTML с использованием Aspose.PDF .NET с пользовательскими стратегиями](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Конвертация PDF в HTML с пользовательскими URL изображений с использованием Aspose.PDF .NET: Полное руководство](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Конвертация PDF в HTML с использованием Aspose.PDF .NET: Сохранение изображений как внешних PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/programming-with-forms/_index.md b/pdf/russian/net/programming-with-forms/_index.md index 1d2b6b3fe5..37a14db4a9 100644 --- a/pdf/russian/net/programming-with-forms/_index.md +++ b/pdf/russian/net/programming-with-forms/_index.md @@ -25,6 +25,7 @@ | [Заполнение арабского текста](./arabic-text-filling/) | Узнайте, как заполнять арабский текст в формах PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Улучшите свои навыки работы с PDF. | | [Комбинированное поле](./combo-box/) Узнайте, как добавить Combo Box в PDF с помощью Aspose.PDF для .NET. Следуйте нашему пошаговому руководству, чтобы легко создавать интерактивные формы PDF. | | [Создать документ](./create-doc/) | Научитесь создавать интерактивные PDF-документы с переключателями с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | +| [Создать поле формы PDF в C# – пошаговое руководство](./create-pdf-form-field-in-c-step-by-step-guide/) | Узнайте, как создать поле формы PDF в C# с помощью Aspose.PDF для .NET, следуя пошаговому руководству. | | [Удалить поле формы в документе PDF](./delete-form-field/) | Узнайте, как удалить поля форм в документах PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и любителей PDF. | | [Определите обязательные поля в форме PDF](./determine-required-field/) | Узнайте, как определить обязательные поля в форме PDF с помощью Aspose.PDF для .NET. Наше пошаговое руководство упрощает управление формами и улучшает ваш рабочий процесс автоматизации PDF. | | [Динамическая XFA в форме Acro](./dynamic-xfa-to-acro-form/) | Узнайте, как преобразовать динамические формы XFA в стандартные AcroForms с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | diff --git a/pdf/russian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/russian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..cc16ca2dfb --- /dev/null +++ b/pdf/russian/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-14 +description: Быстро создавайте поле формы PDF с помощью C#. Узнайте, как добавить + текстовое поле в PDF и изменить PDF, чтобы включить текстовое поле, используя Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: ru +lastmod: 2026-08-14 +og_description: Создайте поле формы PDF с помощью C#. Этот учебник показывает, как + добавить текстовое поле в PDF и изменить PDF, чтобы включить текстовое поле, используя + Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Создание поля формы PDF в C# – полное руководство по программированию +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Создание поля формы PDF в C# – пошаговое руководство +url: /ru/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Создание поля формы PDF в C# – пошаговое руководство + +Если вам нужно **create pdf form field** в документе, это руководство проведёт вас через весь процесс. Вы увидите, как именно **add text box to pdf** страницы, и как **modify pdf to include text box** с использованием библиотеки Aspose.PDF для .NET. + +Работа с PDF‑формами является распространённым требованием для систем выставления счетов, опросов или любого рабочего процесса, собирающего ввод от пользователя. К концу этого руководства у вас будет переиспользуемый фрагмент кода, который создаёт полностью функциональное поле‑текстовое поле, размещает его там, где вам нужно, и сохраняет обновлённый PDF — всё без выхода из вашего проекта C#. + +## Требования + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7+) +* Visual Studio 2022 или любой IDE, поддерживающий C# +* Действующая лицензия Aspose.PDF for .NET (бесплатная пробная версия подходит для разработки) +* PDF‑файл с именем `input.pdf`, размещённый в известном каталоге (в руководстве используется `YOUR_DIRECTORY` как заполнитель) + +> **Pro tip:** Если у вас ещё нет лицензии, вы можете запросить временный ключ на сайте Aspose; библиотека работает в режиме оценки без изменений кода. + +## Как создать pdf form field в C# (обзор) + +1. Загрузить существующий PDF‑документ. +2. Создать экземпляр `TextBoxField` и настроить его имя и внешний вид. +3. Добавить аннотацию‑виджет, определяющую визуальный прямоугольник на целевой странице. +4. Вставить поле в коллекцию форм документа. +5. Сохранить изменённый PDF. + +Каждый шаг подробно объясняется ниже, с полными примерами кода и объяснением причин вызовов API. + +## Шаг 1: Загрузка PDF‑документа + +Первая операция — чтение исходного PDF. Aspose.PDF представляет PDF‑файл классом `Document`. Загрузка документа даёт доступ к его страницам, коллекции форм и другим структурам. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Почему это важно:** +Загрузка файла создаёт модель PDF в памяти, позволяя добавлять, удалять или редактировать объекты без повреждения оригинального файла. Объект `Document` также раскрывает свойство `Form`, где вы позже **add text box to pdf**. + +## Шаг 2: Создание текстового поля + +Текстовое поле — это тип поля формы, позволяющий пользователям вводить свободный текст. В Aspose.PDF вы создаёте его, создавая экземпляр `TextBoxField`, передавая целевую страницу и прямоугольник, определяющий начальный размер виджета. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Почему это важно:** +* `PartialName` — ключ, который инструменты обработки форм (например, Adobe Acrobat, серверные парсеры) используют для получения введённого значения. +* Прямоугольник, который вы передаёте здесь, определяет только *начальный* размер виджета; позже вы можете скорректировать его визуальное расположение с помощью аннотации‑виджета (следующий шаг). +* Установка `DefaultAppearance` гарантирует, что текст внутри поля будет отображаться одинаково во всех просмотрщиках. + +## Шаг 3: Определение визуальной аннотации‑виджета + +Поле формы может иметь одну или несколько **widget annotations**, которые управляют тем, где поле отображается на каждой странице. Добавляя виджет, вы можете разместить одно и то же логическое поле в другом месте или даже на нескольких страницах. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Почему это важно:** +Прямоугольник виджета определяет координаты на экране, которые видят пользователи. Если пропустить этот шаг, поле может существовать в структуре данных PDF, но не будет видно конечному пользователю. Добавление виджета — это шаг, который действительно **adds text box to pdf**. + +## Шаг 4: Добавление настроенного поля в форму документа + +Теперь, когда `TextBoxField` полностью настроен, его необходимо зарегистрировать в коллекции форм PDF. Это делает поле частью интерактивной формы и гарантирует его сохранение. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Почему это важно:** +Если не добавить поле в `pdfDocument.Form`, просмотрщик PDF проигнорирует аннотацию‑виджет, и данные поля никогда не будут отправлены. Эта строка завершает операцию **modify pdf to include text box**. + +## Шаг 5: Сохранение обновлённого PDF + +Наконец, запишите изменения обратно на диск. Вы можете перезаписать оригинальный файл или создать новый; в примере сохраняется в `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Когда вы откроете `output.pdf` в Adobe Acrobat Reader, вы увидите прямоугольное текстовое поле с меткой «Comments» на странице 2. Пользователи могут кликнуть внутри, ввести текст, и введённый текст станет частью данных формы PDF. + +## Полный рабочий пример + +Собрав все части вместе, представляем полностью готовую к запуску программу. Скопируйте её в новый консольный проект, замените `YOUR_DIRECTORY` реальным путём к папке и запустите. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Ожидаемый вывод:** +Запуск программы выводит две строки подтверждения в консоль. Открытие `output.pdf` показывает текстовое поле на странице 2, где пользователь может вводить комментарии. При отправке формы (например, через кнопку «Submit» в Adobe Acrobat) имя поля `Comments` появляется в экспортированных данных FDF или XFDF. + +## Распространённые варианты и особые случаи + +| Situation | How to adapt the code | +|-----------|-----------------------| +| **Добавить поле на другую страницу** | Change `pdfDocument.Pages[1]` to the desired page index (`0`‑based). | +| **Создать многострочное текстовое поле** | Set `textBox.Multiline = true;` before adding the widget. | +| **Установить значение по умолчанию** | Assign `textBox.Value = "Enter your comments here";`. | +| **Сделать поле обязательным** | Set `textBox.Required = true;`. | +| **Разместить поле на нескольких страницах** | Call `textBox.AddWidgetAnnotation` for each additional rectangle on the target pages. | +| **Использовать пользовательский шрифт** | Load the font with `FontRepository.AddFont("path/to/font.ttf")` and reference it in `DefaultAppearance`. | + +**Pro tip:** Всегда проверяйте координаты прямоугольника относительно размера страницы (`pdfDocument.Pages[1].Rect`). Если виджет находится за пределами границ страницы, просмотрщики могут обрезать или скрыть поле. + +## Тестирование поля формы + +1. Откройте `output.pdf` в Adobe Acrobat Reader. +2. Кликните внутри коробки «Comments»; курсор должен появиться. +3. Введите любой текст и нажмите **Tab** или кликните в другое место. +4. Выберите **File → Save As**, чтобы сохранить введённое значение. +5. (Опционально) Используйте `Form` API Aspose.PDF для программного извлечения значения: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Этот фрагмент демонстрирует, что поле не только видно, но и может быть получено через код — это важно для серверной обработки. + +## Заключение + +Теперь вы знаете, как **create pdf form field** в C# от начала до конца. Руководство охватывало загрузку PDF, настройку `TextBoxField`, добавление аннотации‑виджета, регистрацию поля и сохранение результата. С этими строительными блоками вы можете **add text box to pdf** документы, **modify pdf to include text box**, и расширять подход к другим типам полей, таким как флажки, переключатели или выпадающие списки. + +Далее изучайте связанные темы, такие как **extracting form data**, **flattening PDF forms** или **styling fields with borders and colors**. Каждый из этих концептов опирается на тот же основной API, который вы только что освоили, позволяя полностью создавать сложные интерактивные PDF в C#. + +Удачной разработки, и не стесняйтесь экспериментировать с различными прямоугольниками, шрифтами и правилами валидации, чтобы соответствовать потребностям вашего приложения! + +## Что изучать дальше? + +Следующие руководства охватывают тесно связанные темы, которые опираются на техники, продемонстрированные в этом руководстве. Каждый ресурс включает полные рабочие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы к реализации в ваших проектах. + +- [Создать PDF‑документ с Aspose – добавить страницу, текстовое поле и форму](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Как создать PDF с Aspose – добавить поле формы и страницы](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Как добавить текстовую печать в PDF с помощью Aspose.PDF .NET: Полное руководство](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/programming-with-operators/_index.md b/pdf/russian/net/programming-with-operators/_index.md index 23208c3db4..4d27191af4 100644 --- a/pdf/russian/net/programming-with-operators/_index.md +++ b/pdf/russian/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ | [Нарисовать XForm на странице](./draw-xform-on-page/) | узнайте, как рисовать XForms в PDF с помощью Aspose.PDF для .NET с помощью этого подробного пошагового руководства. | | [Операторы PDF](./pdf-operators/) | Пошаговое руководство по использованию операторов PDF с Aspose.PDF для .NET. Добавьте изображение на страницу PDF и укажите его положение. | | [Удалить графические объекты в PDF-файле](./remove-graphics-objects/) Узнайте, как удалить графические объекты из файла PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Упростите свои задачи по обработке PDF. | +| [Создать пустой PDF-словарь в C# с Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Узнайте, как создать пустой словарь PDF в C# с помощью Aspose.Pdf. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/russian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..b47731b886 --- /dev/null +++ b/pdf/russian/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-14 +description: Создайте пустой словарь PDF в C# с помощью Aspose.Pdf — узнайте, как + добавить графическое состояние в коллекцию ExtGState и программно изменять PDF‑файлы. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: ru +lastmod: 2026-08-14 +og_description: Создайте пустой словарь PDF в C# с помощью Aspose.Pdf. Следуйте этому + полному руководству, чтобы добавить пользовательское графическое состояние в коллекцию + ExtGState PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Создание пустого словаря PDF в C# – пошаговое руководство Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Создать пустой PDF‑словарь в C# с Aspose.Pdf +url: /ru/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Создание пустого PDF‑словаря в C# с Aspose.Pdf + +Если вам нужно **create empty PDF dictionary** объекты при работе с PDF‑файлами, это руководство покажет, как сделать это в C# с использованием библиотеки Aspose.Pdf. Независимо от того, создаёте ли вы пользовательское графическое состояние, добавляете новый ресурс или готовите шаблон для последующего использования, приведённые ниже шаги предоставят полное, готовое к выполнению решение. + +Вы узнаете, как загрузить PDF, получить доступ к словарю ресурсов первой страницы, создать совершенно новый `CosPdfDictionary` и вставить его в коллекцию `ExtGState`. К концу руководства у вас будет рабочий `output.pdf`, содержащий только что созданный словарь. + +## Требования + +- .NET 6.0 или новее (код также работает с .NET Framework 4.6+) +- Visual Studio 2022 или любой предпочитаемый вами C# IDE +- Лицензия Aspose.Pdf for .NET (или временный ключ оценки) +- Пример PDF с именем **input.pdf**, размещённый в папке, которой вы управляете (путь к папке будет использоваться как `dataDir`) + +Дополнительные пакеты NuGet не требуются, кроме `Aspose.Pdf`. + +## Шаг 1: Настройте проект и подключите Aspose.Pdf + +1. Создайте новый проект **Console App** в Visual Studio. +2. Откройте **NuGet Package Manager** и установите `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Добавьте следующие директивы `using` в начало `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Почему эти пространства имён?* `Aspose.Pdf` содержит основной класс `Document`, а `Aspose.Pdf.Operators.Gfx` предоставляет `CosPdfDictionary`, `CosPdfNumber` и связанные низкоуровневые PDF‑объекты, необходимые для **create empty PDF dictionary** структур. + +## Шаг 2: Загрузите исходный PDF + +Первая операция — загрузить существующий PDF‑файл в экземпляр `Document`. Это даёт доступ ко всем страницам, ресурсам и низкоуровневым словарям. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Объяснение*: `Document` читает файл в память и подготавливает внутренние структуры. Оператор `using` гарантирует освобождение дескриптора файла после завершения обработки. + +## Шаг 3: Доступ к словарю ресурсов первой страницы + +Каждая страница PDF имеет словарь **Resources**, который группирует шрифты, изображения, объекты ExtGState и другие общие ресурсы. Чтобы вставить новое графическое состояние, нам нужно отредактировать этот словарь. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` — вспомогательный класс, позволяющий работать со словарём PDF как с C# `Dictionary`. + +## Шаг 4: Получить (или создать) коллекцию ExtGState + +`ExtGState` хранит объекты графического состояния, такие как непрозрачность, режим наложения и ширина линии. Если исходный PDF уже содержит запись `ExtGState`, мы переиспользуем её; иначе создаём новый пустой словарь. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Зачем эта проверка?* Некоторые PDF‑файлы полностью опускают запись `ExtGState`. Обрабатывая оба случая, руководство остаётся надёжным для любого входного файла. + +## Шаг 5: **Create empty PDF dictionary** для нового графического состояния + +Теперь мы действительно **create empty PDF dictionary** объекты, определяющие параметры графического состояния. Словарь начинается пустым, и мы добавляем необходимые ключи: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Что делает каждая запись + +| Ключ | Тип | Значение | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Непрозрачность обводки (диапазон 0‑1). | +| **ca** | `CosPdfNumber` | Непрозрачность заливки (диапазон 0‑1). | +| **BM** | `CosPdfName` | Режим наложения; `"Normal"` — наиболее распространённый. | + +Поскольку мы начали с **empty PDF dictionary**, у нас есть полный контроль над тем, какие записи добавляются. При необходимости вы можете расширить этот словарь дополнительными параметрами графического состояния, такими как `LW` (ширина линии) или `LC` (закругление конца линии). + +## Шаг 6: Вставьте новое графическое состояние в ExtGState + +Словарь `ExtGState` работает как карта, где каждая запись идентифицируется именем (например, `GS0`, `GS1`). Мы добавляем наш только что построенный словарь под уникальным ключом. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Если планируется добавить несколько состояний, увеличьте суффикс (`GS1`, `GS2`, …), чтобы избежать конфликтов имён. + +## Шаг 7: Сохраните изменённый PDF + +Наконец, запишите изменения обратно на диск. Метод `Save` автоматически сериализует обновлённые словари. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Откройте `output.pdf` в любом PDF‑просмотрщике и проверьте запись **Resources → ExtGState** (большинство просмотрщиков скрывают её, но такие инструменты, как Adobe Acrobat Preflight или PDF‑Tron, могут её показать). Вы должны увидеть запись `GS0`, содержащую значения непрозрачности и режима наложения, которые вы задали. + +## Полный рабочий пример + +Объединив все части, представляем полный код программы, который можно скопировать‑вставить в `Program.cs` и запустить: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Ожидаемый вывод** — консоль выводит строку подтверждения, а `output.pdf` содержит новую запись `GS0` в `ExtGState`. При отрисовке страницы, ссылающейся на `GS0` (например, через оператор потока содержимого `gs`), линии будут полностью непрозрачными, а заливки — 50 % прозрачными. + +## Часто задаваемые вопросы и обработка граничных случаев + +| Вопрос | Ответ | +|----------|--------| +| *Что если PDF содержит несколько страниц?* | Пример ориентирован на первую страницу (`Pages[1]`). Чтобы затронуть все страницы, пройдитесь в цикле по `pdfDocument.Pages` и повторите шаги 3‑5 для ресурсов каждой страницы. | +| *Могу ли я добавить словарь на страницу, где уже существует запись ExtGState с именем “GS0”?* | Да, но необходимо использовать другой ключ (`GS1`, `GS2`, …), чтобы не перезаписать существующую запись. | +| *Безопасно ли изменять словарь после сохранения?* | После вызова `Save` представление в памяти отделяется от файла. Вы можете продолжать редактировать объект `Document` и снова вызвать `Save`, если это необходимо. | +| *Нужна ли лицензия для Aspose.Pdf, чтобы использовать ` | + +## Что изучать дальше? + +Следующие руководства охватывают тесно связанные темы, основанные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полные рабочие примеры кода с пошаговыми объяснениями, помогающие освоить дополнительные возможности API и изучить альтернативные подходы к реализации в ваших проектах. + +- [Как создать пунктирные линии в PDF с помощью Aspose.PDF for .NET: пошаговое руководство](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Как удалить графику из PDF с помощью Aspose.PDF .NET: полное руководство](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Как создать многослойные PDF с помощью Aspose.PDF for .NET: всестороннее руководство](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/programming-with-security-and-signatures/_index.md b/pdf/russian/net/programming-with-security-and-signatures/_index.md index 1e035e183d..529855abe5 100644 --- a/pdf/russian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/russian/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ | [Проверка подписей PDF в C# – Как читать подписанные PDF-файлы](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Узнайте, как проверять подписи PDF и читать подписанные файлы с помощью Aspose.PDF для .NET на C#. | | [Проверка подписи PDF в C# – Полное руководство по программированию](./verify-pdf-signature-in-c-complete-programming-guide/) | Узнайте, как проверять подписи PDF в C# с помощью Aspose.PDF для .NET. Полное пошаговое руководство. | | [Как восстановить PDF-файлы – Полное руководство на C# с Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Узнайте, как восстанавливать поврежденные PDF-файлы с помощью Aspose.PDF для .NET. Пошаговое руководство на C#. | +| [Создание параметров подписи в C# – полное руководство по цифровой подписи](./create-signature-options-in-c-full-guide-to-digital-signing/) | Узнайте, как создавать параметры цифровой подписи в PDF с помощью Aspose.PDF для .NET на C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/russian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..0857f40ed6 --- /dev/null +++ b/pdf/russian/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Создайте параметры подписи в C# для применения цифровой подписи. Узнайте, + как настроить подпись, реализовать пользовательскую хеш‑функцию и подписывать документы + программно. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: ru +lastmod: 2026-08-14 +og_description: Создайте параметры подписи в C# и примените цифровую подпись. Этот + учебник проведёт вас через настройку подписи, добавление пользовательской хеш‑функции + и подписание документа. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Создание вариантов подписи в C# – пошаговое руководство по цифровой подписи +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Создание вариантов подписи в C# — полное руководство по цифровой подписи +url: /ru/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Создание параметров подписи в C# – полное руководство по цифровой подписи + +Создайте параметры подписи в C# для настройки рабочего процесса цифровой подписи. В этом руководстве показано, как применить цифровую подпись, реализовать пользовательскую хеш‑функцию и подписать документ с помощью класса `SignatureOptions`. Если вам когда‑нибудь нужно было подписать PDF, XML или любой двоичный payload из .NET‑приложения, приведённые ниже шаги предоставят готовое решение. + +Вы узнаете, как: + +* настроить `SignatureOptions` с пользовательским алгоритмом хеширования, +* правильно вызвать метод подписи, +* проверить, что подпись была применена, +* избежать распространённых ошибок при настройке подписи. + +Единственными предварительными требованиями являются современный .NET SDK (≥ .NET 6) и библиотека подписи, предоставляющая `SignatureOptions` (например, **GroupDocs.Signature**, **Aspose.Signature** или аналогичный API). Внешние инструменты не требуются. + +--- + +## Требования + +| Требование | Почему это важно | +|------------|------------------| +| .NET 6 SDK или новее | Предоставляет современные возможности языка, используемые в примерах. | +| NuGet‑пакет библиотеки подписи (например, `GroupDocs.Signature`) | Содержит тип `SignatureOptions` и метод‑расширение `Sign`. | +| Доступ к закрытому ключу или сертификату | Необходим для создания проверяемой цифровой подписи. | + +Установите библиотеку с помощью стандартного CLI: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Шаг 1: Создать параметры подписи + +Первый шаг – создать экземпляр `SignatureOptions` и задать свойства, управляющие процессом подписи. Этот объект сообщает библиотеке, *что* подписывать и *как* это делать. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Почему это важно:** `SignatureOptions` выступает в роли контракта между вашим кодом и движком подписи. Настроив его заранее, вы избегаете повторяющегося шаблонного кода при подписи нескольких документов. + +--- + +## Шаг 2: Реализовать пользовательскую хеш‑функцию + +*Пользовательская хеш‑функция* даёт вам полный контроль над дайджестом, который подписывает алгоритм подписи. Это полезно, когда хеш по умолчанию (SHA‑256) не удовлетворяет требованиям соответствия или когда необходимо хешировать только часть документа. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Почему это важно:** Присвоив `CustomSignHash`, вы заменяете внутренний шаг хеширования библиотеки на свою функцию `MyHash`. Движок подписи теперь будет подписывать байты, возвращённые вашей функцией, обеспечивая соответствие любой пользовательской политике. + +--- + +## Шаг 3: Загрузить документ и применить цифровую подпись + +После подготовки параметров вы можете открыть целевой файл и вызвать метод подписи. Метод `Sign` предоставлен библиотекой и использует сконфигурированные `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Почему это важно:** Вызов `Sign` выполняет три действия внутри: + +1. **Вычисление хеша** – теперь делегировано вашей пользовательской хеш‑функции. +2. **Генерация подписи** – с использованием закрытого ключа, указанного в конфигурации библиотеки. +3. **Встраивание** – полученная подпись прикрепляется к выходному файлу. + +Если любой из шагов завершится неудачей, метод вернёт `false`, позволяя корректно обработать ошибку. + +--- + +## Шаг 4: Проверить, что документ подписан + +Быстрая проверка подтверждает, что подпись была применена корректно. Большинство библиотек предоставляют метод `Verify`, который проверяет целостность подписанного файла. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Почему это важно:** Проверка гарантирует, что подписанный документ не был изменён после подписи и что пользовательский хеш создал совместимый дайджест. + +--- + +## Как настроить подпись для разных типов файлов + +Один и тот же объект `SignatureOptions` можно переиспользовать для PDF, Word‑документов, изображений или обычных бинарных файлов. Единственное, что меняется, – это конкретный класс параметров (например, `PdfSignatureOptions`, `WordSignatureOptions`). Ниже быстрый пример для изображения JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Почему это важно:** Понимание того, как *настраивать подпись* для каждого формата, позволяет расширять одну кодовую базу на множество типов документов без переписывания логики хеширования. + +--- + +## Распространённые ошибки и лучшие практики + +| Ошибка | Рекомендованное решение | +|--------|--------------------------| +| Забыл установить `CustomSignHash` после создания `SignatureOptions` | Присвойте делегат сразу после создания объекта параметров. | +| Используется алгоритм хеширования, не поддерживаемый сертификатом подписи | Убедитесь, что назначение ключа сертификата соответствует длине хеша (например, RSA‑2048 с SHA‑512). | +| Не освобождаете объекты `Signature` | Оберните экземпляр `Signature` в блок `using` для освобождения файловых дескрипторов. | +| Сохраняете подписанный файл поверх оригинала | Всегда записывайте в новый путь (`outputPath`), чтобы сохранить исходный документ. | + +--- + +## Полный рабочий пример + +Ниже представлена автономная программа, объединяющая все части. Скопируйте её в новый консольный проект и запустите; консоль выведет успех или неудачу. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Ожидаемый вывод** + +``` +Signature verified successfully. +``` + +Если консоль выводит «Signing failed.» или «Signature verification failed.», проверьте конфигурацию сертификата и убедитесь, что пользовательский хеш возвращает массив байтов ожидаемого размера. + +--- + +## Заключение + +Теперь вы знаете, как **создавать параметры подписи** в C#, подключать **пользовательскую хеш‑функцию** и **применять цифровую подпись** к любому поддерживаемому документу. Руководство охватило полный жизненный цикл: настройку параметров, подпись файла и проверку результата. Переиспользуя один и тот же экземпляр `SignatureOptions`, вы также можете **настраивать подпись** для изображений, Word‑файлов или сырых бинарных данных. + +--- + +## Что дальше? + +* Исследуйте дополнительные свойства `SignatureOptions`, такие как визуальные штампы, серверы меток времени и цепочки сертификатов – это соответствует ключевому слову **apply digital signature**. +* Поэкспериментируйте с другими алгоритмами хеширования (например, Blake2b), заменив реализацию внутри `MyHash`. +* Интегрируйте процесс подписи в веб‑API, чтобы обеспечить подпись документов «на лету» – естественное расширение темы **how to sign document** в сервисно‑ориентированной архитектуре. + +Не стесняйтесь адаптировать код под свои политики безопасности и делиться опытом в комментариях. Удачной подписи! + +## Что вам стоит изучить дальше? + +Следующие руководства охватывают тесно связанные темы, построенные на техниках, продемонстрированных в этом пособии. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, помогающими освоить дополнительные возможности API и исследовать альтернативные подходы к реализации в ваших проектах. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/programming-with-stamps-and-watermarks/_index.md b/pdf/russian/net/programming-with-stamps-and-watermarks/_index.md index fb8e65028b..d8d9a16a0a 100644 --- a/pdf/russian/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/russian/net/programming-with-stamps-and-watermarks/_index.md @@ -21,6 +21,7 @@ | Название | Описание | | --- | --- | | [Добавить нумерацию Бейтса в PDF на C# – Полное руководство](./add-bates-numbering-pdf-in-c-complete-guide/) Узнайте, как добавить нумерацию Бейтса в PDF-файлы с помощью Aspose.PDF для .NET на C# в этом полном руководстве. | +| [Как задать параметры нумерации Бейтса в C# – полное руководство](./how-to-set-bates-numbering-options-in-c-complete-guide/) Узнайте, как настроить параметры нумерации Бейтса в PDF с помощью Aspose.PDF для .NET на C# в этом полном руководстве. | | [Добавить отметку даты и времени в файл PDF](./add-date-time-stamp/) Узнайте, как добавлять отметку даты и времени в файлы PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для повышения подлинности документа. | | [Добавить штамп изображения в файл PDF](./add-image-stamp/) | Узнайте, как добавить штамп изображения в файлы PDF с помощью Aspose.PDF для .NET с пошаговыми инструкциями и примерами кода. | | [Добавление различных заголовков в PDF-файл](./adding-different-headers/) | Узнайте, как добавлять различные заголовки в файлы PDF с помощью Aspose.PDF для .NET. Пошаговое руководство по настройке ваших PDF-файлов. | diff --git a/pdf/russian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/russian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..36004676d4 --- /dev/null +++ b/pdf/russian/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: Как установить параметры нумерации Бейтса в C# с использованием GroupDocs. + Следуйте этому пошаговому руководству, чтобы добавить пользовательские префиксы + и начальные номера при конвертации Word в PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: ru +lastmod: 2026-08-14 +og_description: Как быстро настроить параметры нумерации Бейтса в C#. Это руководство + покажет, как добавить пользовательские префиксы и начальные номера при конвертации + Word в PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Как настроить параметры нумерации Бейтса в C# – пошаговое руководство +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Как настроить параметры нумерации Бейтса в C# — полное руководство +url: /ru/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как установить параметры нумерации Бейтса в C# – полное руководство + +Если вам нужно **how to set bates numbering options** в C#, это руководство проведёт вас через точные шаги. Вы узнаете, как настроить начальный номер, добавить префикс и применить нумерацию при конвертации документа Word в PDF с использованием GroupDocs API. + +Обработка документов часто требует уникальных идентификаторов на каждой странице для юридических или архивных целей. К концу этого урока у вас будет переиспользуемый фрагмент кода, который можно вставить в любой .NET‑проект, будь то инструмент поддержки судебных процессов или автоматический генератор отчётов. Внешние инструменты не нужны — только библиотека GroupDocs.Conversion и несколько строк C#. + +## Что вам понадобится + +* .NET 6.0 SDK или более поздняя версия, установленная +* Visual Studio 2022 (или любая IDE, поддерживающая .NET) +* Действующая лицензия GroupDocs.Conversion (бесплатная пробная версия подходит для тестов) +* Пример документа Word (`input.docx`), который нужно пронумеровать + +Эти предварительные условия гарантируют, что код будет работать без дополнительной настройки. + +## Как установить параметры нумерации Бейтса – обзор + +Суть **how to set bates numbering options** заключается в трёх объектах: + +1. `Document` – загружает исходный файл. +2. `BatesNumberingOptions` – хранит начальный номер, префикс и другие параметры форматирования. +3. `AddBatesNumbering` – метод, который вставляет нумерацию на каждую страницу. + +Понимание того, зачем нужен каждый элемент, поможет адаптировать решение к более сложным сценариям, например, с пользовательскими шрифтами или многоязычной нумерацией. + +## Шаг 1: Установите пакет GroupDocs.Conversion NuGet + +Откройте терминал в папке решения и выполните: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** предоставляет класс `Document` и метод‑расширение `AddBatesNumbering`, используемые далее в руководстве. + +## Шаг 2: Загрузите исходный документ + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Почему этот шаг?* +Загрузка файла создаёт представление в памяти, которое может обрабатывать движок конвертации. Без экземпляра `Document` вы не сможете применить нумерацию Бейтса или любую другую трансформацию. + +## Шаг 3: Создайте параметры нумерации Бейтса + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Почему этот шаг?* +`BatesNumberingOptions` инкапсулирует все настройки, которые могут понадобиться при **setting bates numbering options**. Настройка `StartNumber` и `Prefix` позволяет согласовать вывод с вашей системой управления делами. Свойство `Position` контролирует визуальное размещение, что часто является требованием соответствия. + +## Шаг 4: Примените нумерацию Бейтса к документу + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Метод `AddBatesNumbering` проходит по каждой странице загруженного `Document` и вставляет сконфигурированную строку. Поскольку метод работает с представлением в памяти, вы можете добавить дополнительные шаги обработки (например, водяные знаки) перед сохранением. + +## Шаг 5: Конвертируйте и сохраните результат в PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Почему этот шаг?* +Сохранение в PDF — распространённый финальный формат для юридических документов. Объект `PdfConvertOptions` позволяет тонко настроить вывод, но для базовой нумерации он не обязателен. Вызов `Save` записывает полностью пронумерованный PDF на диск. + +## Полный, исполняемый пример + +Объединив всё вместе, получаем автономное консольное приложение, которое можно собрать и запустить: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Ожидаемый результат** + +Запуск программы создаёт `output.pdf`, где каждая страница содержит метку вроде `CASE-1000`, `CASE-1001` и т.д., расположенную в правом нижнем колонтитуле. Откройте PDF в любом просмотрщике, чтобы убедиться, что номера отображаются корректно. + +## Распространённые проблемы и лучшие практики + +| Проблема | Почему происходит | Как избежать | +|----------|-------------------|--------------| +| **Relative paths cause `FileNotFoundException`** | Рабочий каталог консольного приложения может отличаться от каталога Visual Studio. | Используйте абсолютные пути или `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numbering overlaps existing footers** | Если в исходном документе уже есть содержимое в выбранной области нижнего колонтитула, новый номер может быть скрыт. | Выберите другое `Position` (например, `HeaderLeft`) или скорректируйте шаблон документа. | +| **Large documents are slow** | Нумерация Бейтса проходит по каждой странице; потребление памяти растёт с размером файла. | Обрабатывайте документ частями с помощью `Document.Split`, если количество страниц превышает 500. | +| **License expiration** | Бесплатная пробная версия GroupDocs истекает через 30 дней, вызывая исключение при `AddBatesNumbering`. | Примените действительный лицензионный ключ перед загрузкой документа: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tip:** Если нужен иной формат номера для каждого дела (например, `2023-CASE-001`), сформируйте префикс динамически перед созданием `BatesNumberingOptions`. + +## Расширение решения + +Тот же подход **Bates numbering C#** работает с другими исходными форматами, такими как `.txt`, `.html` или даже изображения. Просто измените расширение файла при создании объекта `Document`, и движок конвертации справится с остальным. + +Вы также можете комбинировать **document conversion C#** с OCR для сканированных PDF: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Заключение + +Теперь вы знаете **how to set bates numbering options** в C# от начала до конца. Создав объект `BatesNumberingOptions`, применив его через `AddBatesNumbering` и сохранив результат в PDF, вы можете автоматизировать создание юридически соответствующих, уникально идентифицированных документов. + +Далее вы можете изучать связанные темы, такие как **C# PDF generation**, **document conversion C#**, или продвинутые возможности **GroupDocs API**, например, водяные знаки и цифровые подписи. Экспериментируйте с различными префиксами, позициями и форматами номеров, чтобы подобрать оптимальный рабочий процесс. + +Удачной разработки! + +## Что стоит изучить дальше? + +Следующие руководства охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, помогая вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/annotations/_index.md b/pdf/spanish/net/annotations/_index.md index b4b06eb1c2..1501a1d7dc 100644 --- a/pdf/spanish/net/annotations/_index.md +++ b/pdf/spanish/net/annotations/_index.md @@ -32,9 +32,10 @@ Una colección completa de tutoriales que muestra cómo trabajar con anotaciones | [Ancho de línea de anotación lnk](./lnkannotationlinewidth/) Aprenda a configurar el ancho de línea de anotaciones de tinta en un PDF con Aspose.PDF para .NET. Este tutorial detallado le guiará paso a paso para garantizar un resultado de alta calidad. | [Redactar página](./redactpage/) | Aprenda a redactar documentos de manera eficaz utilizando Aspose.PDF para .NET con esta guía completa paso a paso. | | [Establecer la propiedad de llamada en un archivo PDF](./setcalloutproperty/) | Aprenda cómo configurar la propiedad de llamada en un archivo PDF usando Aspose.PDF para .NET en este tutorial detallado paso a paso. -| [Establecer formato de anotación de texto libre](./setfreetextannotationformatting/) | Aprenda a configurar el formato de anotación de texto libre en documentos PDF usando Aspose.PDF para .NET con esta guía paso a paso. | +| [Establecer formato de anotación de texto libre](./setfreetextannotationformatting/) | Aprenda a configurar el formato anotación de texto libre en documentos PDF usando Aspose.PDF para .NET con una guía paso a paso. | | [Tachar palabras](./strikeoutwords/) Aprenda a tachar palabras en un PDF con Aspose.PDF para .NET con esta completa guía paso a paso. Mejore sus habilidades de edición de documentos. | [Actualizar anotación de texto libre en PDF](./updatefreetextannotation/) Aprenda a actualizar anotaciones de texto libre en documentos PDF usando Aspose.PDF para .NET con esta guía paso a paso. | +| [Dibujar rectángulo en PDF – guía paso a paso en C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Aprenda a dibujar un rectángulo en un archivo PDF usando Aspose.PDF para .NET con esta guía paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/spanish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..3d3c45fe62 --- /dev/null +++ b/pdf/spanish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,256 @@ +--- +category: general +date: 2026-08-14 +description: Dibuja un rectángulo en PDF rápidamente usando C#. Aprende a definir + las dimensiones del rectángulo y a añadir formas a una página PDF en solo unas pocas + líneas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: es +lastmod: 2026-08-14 +og_description: dibujar rectángulo en pdf con C# en segundos. Esta guía muestra cómo + definir las dimensiones del rectángulo, agregar una forma y verificar los límites + de la página para obtener gráficos PDF confiables. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: dibujar rectángulo en pdf – tutorial completo de C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Dibujar un rectángulo en PDF – guía paso a paso en C# +url: /es/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# dibujar rectángulo en pdf – tutorial completo de C# + +Si necesitas **dibujar rectángulo en pdf** usando C#, esta guía te muestra una solución concisa y lista para producción. Verás exactamente **cómo definir dimensiones del rectángulo**, verificar que la forma encaje y añadirla a una página con una única llamada de método. + +El tutorial cubre todo, desde crear un documento PDF hasta renderizar el rectángulo, para que puedas copiar‑pegar el código en tu propio proyecto y ver los resultados al instante. No se requiere documentación externa, solo los pasos a continuación. + +## Requisitos previos + +Antes de comenzar, asegúrate de tener: + +* .NET 6.0 o posterior (el código también funciona con .NET Framework 4.7+) +* El paquete NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Un conocimiento básico de la sintaxis de C# +* Un IDE como Visual Studio o VS Code + +> **Consejo profesional:** Usa la licencia de evaluación gratuita de Aspose.PDF para experimentos rápidos; añade una pequeña marca de agua pero te permite probar todas las funciones. + +## Cómo dibujar rectángulo en PDF con C# + +El núcleo de la tarea es crear un `RectangleShape`, establecer su tamaño y trazo, y adjuntarlo a una `Page`. El siguiente encabezado H2 contiene la palabra clave principal, cumpliendo con los requisitos SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Explicación de cada paso + +| Paso | Por qué es importante | +|------|-----------------------| +| **1️⃣ Crear un nuevo documento PDF** | Inicializa el contenedor que alojará páginas y gráficos. | +| **2️⃣ Añadir una página en blanco** | Necesitas un objeto `Page` porque las formas se adjuntan a una página, no directamente al documento. | +| **3️⃣ Definir los límites del rectángulo** | Aquí es donde **cómo definir dimensiones del rectángulo**. El constructor `Rectangle` recibe `x`, `y`, `width` y `height` en puntos (1 pt = 1/72 in). | +| **4️⃣ Crear la forma del rectángulo** | `RectangleShape` es la clase de Aspose que renderiza un rectángulo. Establecer `StrokeColor` define el contorno; también podrías establecer `FillColor` para un relleno sólido. | +| **5️⃣ Verificar los límites de la página** | `CheckShapeBoundary` lanza una excepción si el rectángulo supera el tamaño de la página, evitando PDFs malformados. | +| **6️⃣ Añadir la forma a la página** | La forma pasa a ser parte del flujo de contenido de la página. | +| **7️⃣ Guardar el PDF** | Persiste el documento en un archivo que puedes abrir con cualquier visor de PDF. | + +El `RectangleDemo.pdf` resultante contiene un rectángulo negro ubicado en la esquina superior izquierda de la página, con exactamente 500 pt de ancho y 700 pt de alto. + +![dibujar rectángulo en pdf ejemplo](https://example.com/rectangle-demo.png "dibujar rectángulo en pdf ejemplo") + +*Texto alternativo de la imagen: dibujar rectángulo en pdf ejemplo que muestra un rectángulo negro en la esquina superior izquierda de una página PDF.* + +## Cómo definir dimensiones del rectángulo para diferentes tamaños de página + +El fragmento anterior usa valores fijos (`500 x 700`). En aplicaciones reales a menudo necesitas que el rectángulo se adapte al ancho y alto de la página. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Puntos clave:** + +* Usa `page.PageInfo.Width` y `Height` para leer el tamaño real de la página. +* Multiplicar por un factor (p. ej., `0.8f`) te permite expresar dimensiones como porcentaje de la página. +* Centrar se logra restando el tamaño del rectángulo al tamaño de la página y dividiendo el resto entre dos. + +## Problemas comunes y cómo evitarlos + +| Problema | Por qué ocurre | Solución | +|----------|----------------|----------| +| El rectángulo se extiende más allá de la página | Dimensiones codificadas que son mayores que el tamaño de la página. | Llama a `page.CheckShapeBoundary` **antes** de añadir la forma; ajusta las dimensiones si se lanza una excepción. | +| El trazo no es visible | `StrokeColor` dejado en su valor predeterminado (`Color.Empty`). | Establece explícitamente `StrokeColor` (p. ej., `Color.Black`). | +| El rectángulo aparece fuera de la pantalla | Las coordenadas comienzan en la esquina inferior izquierda en el espacio PDF; usar coordenadas estilo pantalla (superior izquierda) provoca un volteo. | Recuerda que el origen `(0,0)` está en la esquina inferior izquierda. Ajusta `y` en consecuencia o usa `pageHeight - desiredY`. | +| Grosor de línea inesperado | El ancho de línea predeterminado puede ser demasiado fino para impresión. | Configura `rectangleShape.LineWidth = 2;` para aumentar el grosor. | + +## Extender el ejemplo + +Una vez que puedas **dibujar rectángulo en pdf**, puedes añadir fácilmente otras formas: + +* **EllipseShape** – para círculos u óvalos. +* **PolygonShape** – para polígonos personalizados. +* **TextFragment** – para etiquetar tus rectángulos. + +Todas las formas comparten el mismo flujo de trabajo: definir límites, configurar apariencia, verificar límites y luego añadir a la página. + +## Programa completo y ejecutable + +A continuación tienes el programa completo que combina el rectángulo básico y el ejemplo de dimensionado dinámico. Cópialo en un nuevo proyecto de consola, restaura el paquete NuGet `Aspose.PDF` y ejecútalo. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Salida esperada:** +Abre `CombinedRectangles.pdf`. Verás un rectángulo negro anclado en la esquina inferior izquierda y un rectángulo azul oscuro centrado con relleno amarillo claro. Ambos rectángulos respetan los márgenes de la página. + +## Conclusión + +Ahora sabes cómo **dibujar rectángulo en pdf** con C# y, con precisión, **cómo definir dimensiones del rectángulo** tanto para diseños fijos como responsivos. El enfoque utiliza `RectangleShape` de Aspose.PDF, verificación de límites y aritmética sencilla para adaptarse a cualquier tamaño de página. + +A continuación, podrías explorar: + +* Añadir **colores de relleno** y **estilos de línea** (discontinuo, punteado) – palabra clave secundaria: cómo definir dimensiones del rectángulo con estilo. +* Combinar múltiples formas en una sola `Page` para crear gráficos o formularios. +* Exportar el PDF a un stream para APIs web en lugar de guardarlo en disco. + +Experimenta con diferentes tamaños, colores y posiciones para dominar los gráficos PDF en tus aplicaciones .NET. ¡Feliz codificación! + + +## ¿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 código completo y ejemplos 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. + +- [Cómo personalizar PDFs con Aspose.PDF para .NET: establecer márgenes de página y dibujar líneas](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Cómo añadir sellos de página en PDFs usando Aspose.PDF para .NET: guía completa](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Cómo añadir sellos de número de página en PDFs usando Aspose.PDF para .NET | Marcas de agua y fondos](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/conversion-export/_index.md b/pdf/spanish/net/conversion-export/_index.md index 972b1fef80..a542d47d57 100644 --- a/pdf/spanish/net/conversion-export/_index.md +++ b/pdf/spanish/net/conversion-export/_index.md @@ -159,7 +159,7 @@ Aprenda a convertir fácilmente archivos CGM (Metarchivo de Gráficos de Computa Aprenda a convertir imágenes de metarchivo de gráficos de computadora (CGM) a formato PDF con Aspose.PDF para .NET. Esta guía explica la configuración, los pasos de conversión y la solución de problemas. ### [Cómo convertir EPUB a PDF con Aspose.PDF .NET: Guía paso a paso](./convert-epub-pdf-aspose-pdf-net-guide/) -Aprenda a convertir archivos EPUB a PDF con Aspose.PDF para .NET con esta guía detallada. Ideal para desarrolladores que necesitan una conversión fluida de documentos. +Aprenda a convertir archivos EPUB a PDF con Aspose.PDF .NET. Esta guía detallada es ideal para desarrolladores que necesitan una conversión fluida de documentos. ### [Cómo convertir HTML a PDF con Aspose.PDF .NET: una guía completa](./convert-html-pdf-aspose-dotnet-guide/) Aprenda a convertir eficientemente documentos HTML en archivos PDF de aspecto profesional con Aspose.PDF .NET. Descubra técnicas para gestionar recursos externos y renderizar contenido complejo. @@ -230,6 +230,9 @@ Aprenda a convertir documentos PDF a imágenes TIFF con Aspose.PDF para .NET. Do ### [Cómo guardar PDF con Aspose – Guía paso a paso](./how-to-save-pdf-with-aspose-step-by-step-guide/) Aprenda a guardar documentos PDF con Aspose mediante una guía paso a paso que cubre configuración y opciones de guardado. +### [Guardar PDF como HTML y convertir a PDF/X‑4 con Aspose.PDF en C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Aprenda a guardar un PDF como HTML y luego convertirlo a PDF/X‑4 usando Aspose.PDF en C#. + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/spanish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..b441308695 --- /dev/null +++ b/pdf/spanish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-14 +description: Guardar PDF como HTML y convertir PDF a PDF/X‑4 usando Aspose.PDF para + C#. El código paso a paso muestra la exportación a HTML, el listado de firmas y + la edición del estado gráfico. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: es +lastmod: 2026-08-14 +og_description: Guarda PDF como HTML y convierte PDF a PDF/X‑4 usando Aspose.PDF para + C#. Sigue esta guía completa para exportar HTML, listar firmas y editar estados + gráficos. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Guardar PDF como HTML y convertir a PDF/X‑4 con Aspose.PDF – Guía de C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Guardar PDF como HTML y convertir a PDF/X‑4 con Aspose.PDF en C# +url: /es/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Guardar PDF como HTML y Convertir a PDF/X‑4 con Aspose.PDF en C# + +Si necesita **guardar PDF como HTML**, Aspose.Pdf hace que el proceso sea sencillo. Este tutorial también muestra cómo **convertir PDF a PDF/X‑4**, enumerar los campos de firma y agregar un ExtGState personalizado, brindándole un flujo de trabajo completo de extremo a extremo. + +Aprenderá a: + +* Exportar un PDF a HTML limpio mientras se omiten las imágenes raster. +* Convertir un documento PDF al estándar PDF/X‑4 para salida lista para impresión. +* Enumerar todos los campos de firma en un PDF. +* Insertar un estado gráfico personalizado (ExtGState) en la primera página. + +Todo el código se ejecuta en .NET 6 o posterior y requiere el paquete NuGet Aspose.Pdf para .NET. + +## Requisitos previos + +| Requisito | Razón | +|-------------|--------| +| .NET 6 SDK or newer | Proporciona el tiempo de ejecución para el ejemplo en C#. | +| Visual Studio 2022 (or any C# IDE) | Permite una edición y depuración fáciles. | +| Aspose.Pdf for .NET (v23.12 or later) | Proporciona las clases `Document`, `PdfFormatConversionOptions` y `HtmlSaveOptions` utilizadas en el tutorial. | +| A sample PDF file (`sample.pdf`) | El documento fuente que será procesado. | + +Instale la biblioteca con: + +```bash +dotnet add package Aspose.Pdf +``` + +## Visión general de la solución + +El programa realiza seis pasos lógicos: + +1. Cargar el PDF de origen. +2. Enumerar cada nombre de campo de firma. +3. **Convertir PDF a PDF/X‑4** y guardar el resultado. +4. **Guardar PDF como HTML** mientras se omiten las imágenes raster. +5. Agregar un ExtGState personalizado (estado gráfico) a la primera página. +6. Guardar el PDF modificado con el nuevo estado gráfico. + +Cada paso se explica a continuación, con el código completo y el razonamiento detrás de las decisiones. + +## Paso 1: Cargar el documento PDF + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Por qué es importante*: `Document` representa todo el archivo PDF. Cargarlo una sola vez le permite reutilizar el mismo objeto para todas las operaciones posteriores, lo que reduce la sobrecarga de I/O. + +## Paso 2: Enumerar todos los nombres de campos de firma + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Por qué es importante*: Conocer los nombres de los campos de firma es esencial cuando necesita validar, eliminar o reemplazar firmas digitales más adelante. La colección `Signatures` proporciona una vista rápida y de solo lectura de los campos. + +## Paso 3: Convertir PDF a PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Puntos clave** + +* `PdfStandard.PdfX4` indica a Aspose.Pdf que incruste todos los recursos necesarios (fuentes, perfiles de color) y que aplique las restricciones de PDF/X‑4. +* La conversión se ejecuta en memoria; solo el archivo final se escribe en disco, manteniendo la operación rápida. + +> **Consejo profesional:** Verifique la salida con un validador PDF/X‑4 (por ejemplo, Adobe Preflight) si su flujo de trabajo posterior es estricto en cuanto al cumplimiento. + +## Paso 4: Guardar PDF como HTML mientras se omiten las imágenes raster + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Por qué podría querer esto**: La salida HTML es útil para vista previa web o indexación de contenido. Omitir las imágenes raster (`SkipRasterImages = true`) mantiene el HTML liviano y mejora los tiempos de carga, especialmente cuando el PDF original contiene escaneos de alta resolución. + +## Paso 5: Agregar un ExtGState personalizado a la primera página + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explicación*: Un objeto **ExtGState** controla la transparencia, el modo de fusión y otros parámetros gráficos. Al agregar `GS0`, puede referenciar este estado más adelante en los flujos de contenido (p. ej., para superposiciones semitransparentes). El código utiliza la API COS de bajo nivel porque Aspose.Pdf no expone un contenedor de alto nivel para la creación de ExtGState. + +## Paso 6: Guardar el PDF modificado con el nuevo ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +El archivo final (`sample_with_extgstate.pdf`) contiene: + +* Todas las páginas y contenido originales. +* Una versión PDF/X‑4 conforme (`sample_pdfx4.pdf`). +* Una representación HTML sin imágenes raster (`sample.html`). +* Un ExtGState personalizado (`GS0`) adjunto a los recursos de la primera página. + +### Salida esperada de la consola + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Si el PDF de origen no tiene firmas, el bucle no imprime nada pero continúa sin error. + +## Variaciones comunes y casos límite + +| Situación | Ajuste | +|-----------|------------| +| **PDF contains no pages** | Verifique `doc.Pages.Count` antes de acceder a `doc.Pages[1]` para evitar `IndexOutOfRangeException`. | +| **You need PDF/A‑2b instead of PDF/X‑4** | Cambie `PdfStandard.PdfX4` a `PdfStandard.PdfA2b` en `PdfFormatConversionOptions`. | +| **You want to keep raster images** | Establezca `SkipRasterImages = false` (o omita la propiedad) en `HtmlSaveOptions`. | +| **Multiple ExtGState objects** | Utilice claves únicas (`GS1`, `GS2`, …) al agregar a `extGStateDict`. | +| **Large PDFs (hundreds of MB)** | Active `doc.OptimizeResources = true` antes de guardar para reducir el uso de memoria. | + +## Código fuente completo (ejecutable) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Step 1: Load the PDF document + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Step 2: List all signature field names + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Step 3: Convert the PDF to PDF/X‑4 standard + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Step 4: Save the PDF as HTML while skipping raster images + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Step 5: Add a custom ExtGState (graphics state) to the first page + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## ¿Qué deberías aprender a continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que se basan en 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 funciones adicionales de la API y explorar enfoques de implementación alternativos en sus propios proyectos. + +- [Guía completa: Convertir PDF a HTML usando Aspose.PDF .NET con estrategias personalizadas](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Convertir PDF a HTML con URLs de imagen personalizadas usando Aspose.PDF .NET: Una guía completa](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Conversión de PDF a HTML usando Aspose.PDF .NET: Guardar imágenes como PNG externos](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/programming-with-forms/_index.md b/pdf/spanish/net/programming-with-forms/_index.md index dfd79682a5..b2666a9903 100644 --- a/pdf/spanish/net/programming-with-forms/_index.md +++ b/pdf/spanish/net/programming-with-forms/_index.md @@ -25,6 +25,7 @@ Estos tutoriales también ofrecen ejemplos de código detallados, explicaciones | [Relleno de texto en árabe](./arabic-text-filling/) Aprenda a rellenar texto en árabe en formularios PDF con Aspose.PDF para .NET con este tutorial paso a paso. Mejore sus habilidades de manipulación de PDF. | [Cuadro combinado](./combo-box/) Aprenda a agregar un cuadro combinado a un PDF con Aspose.PDF para .NET. Siga nuestra guía paso a paso para crear formularios PDF interactivos fácilmente. | [Crear documento](./create-doc/) | Aprenda a crear documentos PDF interactivos con botones de opción usando Aspose.PDF para .NET en esta completa guía paso a paso. | +| [Crear campo de formulario PDF en C# – guía paso a paso](./create-pdf-form-field-in-c-step-by-step-guide/) Aprenda a crear campos de formulario PDF en C# con Aspose.PDF paso a paso. | [Eliminar campo de formulario en un documento PDF](./delete-form-field/) Aprenda a eliminar campos de formulario en documentos PDF con Aspose.PDF para .NET con esta guía paso a paso. Ideal para desarrolladores y entusiastas del PDF. | [Determinar el campo obligatorio en el formulario PDF](./determine-required-field/) Aprenda a determinar los campos obligatorios en un formulario PDF con Aspose.PDF para .NET. Nuestra guía paso a paso simplifica la gestión de formularios y mejora su flujo de trabajo de automatización de PDF. | [XFA dinámico a formato Acro](./dynamic-xfa-to-acro-form/) | Aprenda a convertir formularios XFA dinámicos a AcroForms estándar usando Aspose.PDF para .NET en este tutorial paso a paso. | diff --git a/pdf/spanish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/spanish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2702d20aa2 --- /dev/null +++ b/pdf/spanish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-14 +description: Crea campos de formulario PDF rápidamente con C#. Aprende cómo agregar + un cuadro de texto al PDF y modificar el PDF para incluir el cuadro de texto usando + Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: es +lastmod: 2026-08-14 +og_description: Crear campo de formulario PDF con C#. Este tutorial muestra cómo agregar + un cuadro de texto a un PDF y modificar un PDF para incluir un cuadro de texto usando + Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Crear campo de formulario PDF en C# – guía completa de programación +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Crear campo de formulario PDF en C# – guía paso a paso +url: /es/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear campo de formulario pdf en C# – guía paso a paso + +Si necesitas **create pdf form field** en un documento, esta guía te lleva a través de todo el proceso. Verás exactamente cómo **add text box to pdf** en las páginas, y cómo **modify pdf to include text box** usando la biblioteca Aspose.PDF para .NET. + +Trabajar con formularios PDF es un requisito común para sistemas de facturación, encuestas o cualquier flujo de trabajo que recopile la entrada del usuario. Al final de este tutorial tendrás un fragmento de código reutilizable que crea un campo de cuadro de texto totalmente funcional, lo coloca donde desees y guarda el PDF actualizado, todo sin salir de tu proyecto C#. + +## Requisitos previos + +* .NET 6.0 o posterior (el código también funciona con .NET Framework 4.7+) +* Visual Studio 2022 o cualquier IDE que soporte C# +* Una licencia activa de Aspose.PDF para .NET (la prueba gratuita funciona para desarrollo) +* Un archivo PDF llamado `input.pdf` ubicado en un directorio conocido (el tutorial usa `YOUR_DIRECTORY` como marcador de posición) + +> **Pro tip:** Si aún no tienes una licencia, puedes solicitar una clave temporal en el sitio web de Aspose; la biblioteca funciona en modo de evaluación sin cambios de código. + +## Cómo crear campo de formulario pdf en C# (visión general) + +1. Cargar el documento PDF existente. +2. Instanciar un `TextBoxField` y configurar su nombre y apariencia. +3. Añadir una anotación widget que define el rectángulo visual en la página objetivo. +4. Insertar el campo en la colección de formularios del documento. +5. Guardar el PDF modificado. + +Cada paso se explica en detalle a continuación, con ejemplos de código completos y la lógica detrás de las llamadas a la API. + +## Paso 1: Cargar el documento PDF + +La primera operación es leer el PDF de origen. Aspose.PDF representa un archivo PDF con la clase `Document`. Cargar el documento te brinda acceso a sus páginas, colección de formularios y otras estructuras. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Por qué es importante:** +Cargar el archivo crea un modelo del PDF en memoria, lo que te permite agregar, eliminar o editar objetos sin dañar el archivo original. El objeto `Document` también expone la propiedad `Form`, que es donde más adelante **add text box to pdf**. + +## Paso 2: Crear un campo de cuadro de texto + +Un campo de cuadro de texto es un tipo de campo de formulario que permite a los usuarios escribir texto libre. En Aspose.PDF lo creas instanciando `TextBoxField`, pasando la página objetivo y un rectángulo que define el tamaño inicial del widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Por qué es importante:** +* `PartialName` es la clave que las herramientas de procesamiento de formularios (p. ej., Adobe Acrobat, analizadores del lado del servidor) utilizan para recuperar el valor ingresado. +* El rectángulo que pasas aquí solo define el tamaño *inicial* del widget; puedes ajustar más tarde su ubicación visual con una anotación widget (paso siguiente). +* Configurar `DefaultAppearance` garantiza que el texto dentro del cuadro se renderice de manera consistente en todos los visores. + +## Paso 3: Definir la anotación widget visual + +Un campo de formulario puede tener una o más **widget annotations** que controlan dónde aparece el campo en cada página. Al agregar un widget puedes colocar el mismo campo lógico en una ubicación diferente o incluso en varias páginas. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Por qué es importante:** +El rectángulo del widget determina las coordenadas en pantalla que los usuarios ven. Si omites este paso, el campo puede existir en la estructura de datos del PDF pero no será visible para el usuario final. Agregar un widget es el paso que realmente **adds text box to pdf**. + +## Paso 4: Añadir el campo configurado al formulario del documento + +Ahora que el `TextBoxField` está completamente configurado, necesitas registrarlo en la colección de formularios del PDF. Esto hace que el campo forme parte del formulario interactivo y asegura que se guarde. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Por qué es importante:** +Sin añadir el campo a `pdfDocument.Form`, el visor de PDF ignoraría la anotación widget, y los datos del campo nunca se enviarían. Esta línea finaliza la operación **modify pdf to include text box**. + +## Paso 5: Guardar el PDF actualizado + +Finalmente, escribe los cambios de nuevo en el disco. Puedes sobrescribir el archivo original o crear uno nuevo; el ejemplo guarda en `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Cuando abras `output.pdf` en Adobe Acrobat Reader, verás un cuadro de texto rectangular etiquetado como “Comments” en la página 2. Los usuarios pueden hacer clic dentro, escribir, y el texto ingresado será parte de los datos del formulario PDF. + +## Ejemplo completo en funcionamiento + +Uniendo todas las piezas, aquí tienes un programa completo y listo para ejecutar. Cópialo en un nuevo proyecto de consola, reemplaza `YOUR_DIRECTORY` con una ruta de carpeta real y ejecútalo. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Salida esperada:** +Ejecutar el programa imprime dos líneas de confirmación en la consola. Abrir `output.pdf` muestra un cuadro de texto en la página 2 donde el usuario puede escribir comentarios. Cuando el formulario se envía (p. ej., mediante el botón “Submit” de Adobe Acrobat), el nombre del campo `Comments` aparece en los datos exportados FDF o XFDF. + +## Variaciones comunes y casos límite + +| Situación | Cómo adaptar el código | +|-----------|-----------------------| +| **Agregar el campo a una página diferente** | Change `pdfDocument.Pages[1]` to the desired page index (`0`‑based). | +| **Crear un cuadro de texto multilínea** | Set `textBox.Multiline = true;` before adding the widget. | +| **Establecer un valor predeterminado** | Assign `textBox.Value = "Enter your comments here";`. | +| **Hacer que el campo sea obligatorio** | Set `textBox.Required = true;`. | +| **Colocar el campo en varias páginas** | Call `textBox.AddWidgetAnnotation` for each additional rectangle on the target pages. | +| **Usar una fuente personalizada** | Load the font with `FontRepository.AddFont("path/to/font.ttf")` and reference it in `DefaultAppearance`. | + +**Pro tip:** Siempre valida las coordenadas del rectángulo con respecto al tamaño de la página (`pdfDocument.Pages[1].Rect`). Si el widget se encuentra fuera de los límites de la página, los visores pueden recortar u ocultar el campo. + +## Probando el campo de formulario + +1. Abre `output.pdf` en Adobe Acrobat Reader. +2. Haz clic dentro del cuadro “Comments”; debería aparecer el cursor. +3. Escribe cualquier texto y presiona **Tab** o haz clic en otro lugar. +4. Elige **File → Save As** para guardar el valor ingresado. +5. (Opcional) Usa la API `Form` de Aspose.PDF para extraer el valor programáticamente: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Este fragmento demuestra que el campo no solo es visible sino también recuperable mediante código, lo cual es esencial para el procesamiento del lado del servidor. + +## Conclusión + +Ahora sabes cómo **create pdf form field** en C# de principio a fin. El tutorial cubrió cargar un PDF, configurar un `TextBoxField`, agregar una anotación widget, registrar el campo y guardar el resultado. Con estos bloques de construcción puedes **add text box to pdf** documentos, **modify pdf to include text box**, y ampliar el enfoque a otros tipos de campos como casillas de verificación, botones de opción o listas desplegables. + +Después, explora temas relacionados como **extracting form data**, **flattening PDF forms**, o **styling fields with borders and colors**. Cada uno de estos conceptos se basa en la misma API central que acabas de dominar, permitiéndote crear PDFs interactivos sofisticados completamente en C#. + +¡Feliz codificación, y siéntete libre de experimentar con diferentes rectángulos, fuentes y reglas de validación para adaptarlos a las necesidades de tu aplicación! + +## ¿Qué deberías aprender a continuación? + +Los siguientes tutoriales cubren temas estrechamente relacionados que se basan en 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 funciones adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Crear documento PDF con Aspose – Añadir página, cuadro de texto y formulario](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Cómo crear PDF con Aspose – Añadir campo de formulario y páginas](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Cómo añadir una marca de texto a PDF usando Aspose.PDF .NET: Guía completa](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/programming-with-operators/_index.md b/pdf/spanish/net/programming-with-operators/_index.md index 20ff762b0b..a2934ca399 100644 --- a/pdf/spanish/net/programming-with-operators/_index.md +++ b/pdf/spanish/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Los tutoriales "Programación con Operadores" de Aspose.PDF para .NET le guiará | [Dibujar XForm en la página](./draw-xform-on-page/) | Aprenda a dibujar XForms en PDF usando Aspose.PDF para .NET con esta completa guía paso a paso. | | [Operadores de PDF](./pdf-operators/) Guía paso a paso para usar operadores PDF con Aspose.PDF para .NET. Agregue una imagen a una página PDF y especifique su posición. | [Eliminar objetos gráficos en un archivo PDF](./remove-graphics-objects/) Aprenda a eliminar objetos gráficos de un archivo PDF con Aspose.PDF para .NET con esta guía paso a paso. Simplifique la manipulación de PDF. +| [Crear diccionario PDF vacío en C# con Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) Aprenda a crear un diccionario PDF vacío en C# usando Aspose.PDF para .NET. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/spanish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..0ff26108e0 --- /dev/null +++ b/pdf/spanish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Crear un diccionario PDF vacío en C# usando Aspose.Pdf – aprende cómo + agregar un estado gráfico a la colección ExtGState y modificar PDFs programáticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: es +lastmod: 2026-08-14 +og_description: Crear un diccionario PDF vacío en C# con Aspose.Pdf. Sigue esta guía + completa para añadir un estado gráfico personalizado a la colección ExtGState de + un PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Crear un diccionario PDF vacío en C# – Guía paso a paso de Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Crear un diccionario PDF vacío en C# con Aspose.Pdf +url: /es/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear un diccionario PDF vacío en C# con Aspose.Pdf + +Si necesitas **crear objetos de diccionario PDF vacío** mientras trabajas con archivos PDF, esta guía te muestra exactamente cómo hacerlo en C# usando la biblioteca Aspose.Pdf. Ya sea que estés construyendo un estado gráfico personalizado, añadiendo un nuevo recurso o preparando una plantilla para uso posterior, los pasos a continuación te ofrecen una solución completa y ejecutable. + +Aprenderás a cargar un PDF, acceder al diccionario de recursos de la primera página, crear un `CosPdfDictionary` totalmente nuevo y insertarlo en la colección `ExtGState`. Al final del tutorial tendrás un `output.pdf` que contiene el diccionario recién creado. + +## Requisitos previos + +Antes de comenzar, asegúrate de tener: + +- .NET 6.0 o posterior (el código también funciona con .NET Framework 4.6+) +- Visual Studio 2022 o cualquier IDE de C# que prefieras +- Una licencia de Aspose.Pdf para .NET (o una clave de evaluación temporal) +- Un PDF de ejemplo llamado **input.pdf** colocado en una carpeta que controles (la ruta de la carpeta se usará como `dataDir`) + +No se requieren paquetes NuGet adicionales más allá de `Aspose.Pdf`. + +## Paso 1: Configurar el proyecto y referenciar Aspose.Pdf + +1. Crea un nuevo proyecto **Console App** en Visual Studio. +2. Abre el **Administrador de paquetes NuGet** e instala `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Añade las siguientes directivas `using` al inicio de `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *¿Por qué estos espacios de nombres?* `Aspose.Pdf` contiene la clase central `Document`, mientras que `Aspose.Pdf.Operators.Gfx` proporciona `CosPdfDictionary`, `CosPdfNumber` y otros objetos PDF de bajo nivel necesarios para **crear estructuras de diccionario PDF vacío**. + +## Paso 2: Cargar el PDF de origen + +La primera operación es cargar el archivo PDF existente en una instancia de `Document`. Esto te brinda acceso a todas las páginas, recursos y diccionarios de bajo nivel. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Explicación*: `Document` lee el archivo en memoria y prepara las estructuras internas. La sentencia `using` garantiza que el manejador del archivo se libere después de que terminemos el procesamiento. + +## Paso 3: Acceder al diccionario de recursos de la primera página + +Cada página PDF tiene un diccionario **Resources** que agrupa fuentes, imágenes, objetos ExtGState y otros recursos compartidos. Para insertar un nuevo estado gráfico necesitamos editar este diccionario. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` es una clase auxiliar que te permite tratar un diccionario PDF como un `Dictionary` de C#. + +## Paso 4: Recuperar (o crear) la colección ExtGState + +`ExtGState` contiene objetos de estado gráfico como opacidad, modo de fusión y ancho de línea. Si el PDF de origen ya contiene una entrada `ExtGState`, la reutilizamos; de lo contrario creamos un nuevo diccionario vacío. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*¿Por qué esta comprobación?* Algunos PDFs omiten la entrada `ExtGState` por completo. Al manejar ambos casos, el tutorial se mantiene robusto para cualquier archivo de entrada. + +## Paso 5: **Crear diccionario PDF vacío** para un nuevo estado gráfico + +Ahora realmente **creamos objetos de diccionario PDF vacío** que definen los parámetros del estado gráfico. El diccionario comienza vacío y añadimos las claves requeridas: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Qué hace cada entrada + +| Clave | Tipo | Significado | +|-------|------|-------------| +| **CA** | `CosPdfNumber` | Opacidad del trazo (rango 0‑1). | +| **ca** | `CosPdfNumber` | Opacidad del relleno (rango 0‑1). | +| **BM** | `CosPdfName` | Modo de fusión; `"Normal"` es el más común. | + +Como partimos de un **diccionario PDF vacío**, tienes control total sobre qué entradas se añaden. Puedes ampliar este diccionario con parámetros adicionales de estado gráfico como `LW` (ancho de línea) o `LC` (cap de línea) cuando lo necesites. + +## Paso 6: Insertar el nuevo estado gráfico en ExtGState + +El diccionario `ExtGState` funciona como un mapa donde cada entrada se identifica por un nombre (p. ej., `GS0`, `GS1`). Añadimos nuestro diccionario recién creado bajo una clave única. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Si planeas añadir varios estados, incrementa el sufijo (`GS1`, `GS2`, …) para evitar colisiones de nombres. + +## Paso 7: Guardar el PDF modificado + +Finalmente, escribe los cambios en disco. El método `Save` serializa automáticamente los diccionarios actualizados. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Abre `output.pdf` en cualquier visor de PDF e inspecciona la entrada **Resources → ExtGState** (la mayoría de los visores la ocultan, pero herramientas como Adobe Acrobat Preflight o PDF‑Tron pueden revelarla). Deberías ver una entrada `GS0` que contiene los valores de opacidad y modo de fusión que definiste. + +## Ejemplo completo y funcional + +Juntando todas las piezas, aquí tienes el programa completo que puedes copiar‑pegar en `Program.cs` y ejecutar: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Salida esperada** – La consola muestra una línea de confirmación, y `output.pdf` contiene la nueva entrada `GS0` bajo `ExtGState`. Cuando renderices una página que haga referencia a `GS0` (p. ej., mediante el operador de flujo de contenido `gs`), los trazos serán totalmente opacos mientras que los rellenos tendrán un 50 % de transparencia. + +## Preguntas frecuentes y manejo de casos límite + +| Pregunta | Respuesta | +|----------|-----------| +| *¿Qué pasa si el PDF tiene varias páginas?* | El ejemplo se dirige a la primera página (`Pages[1]`). Para afectar a todas las páginas, recorre `pdfDocument.Pages` y repite los pasos 3‑5 para los recursos de cada página. | +| *¿Puedo añadir el diccionario a una página que ya tiene una entrada ExtGState llamada “GS0”?* | Sí, pero debes usar una clave diferente (`GS1`, `GS2`, …) para no sobrescribir la entrada existente. | +| *¿Es seguro modificar el diccionario después de guardar?* | Una vez que llamas a `Save`, la representación en memoria se separa del archivo. Puedes seguir editando el objeto `Document` y volver a llamar a `Save` si lo necesitas. | +| *¿Necesito una licencia para Aspose.Pdf para usar ` | + +## ¿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 con explicaciones paso a paso para ayudarte a dominar funcionalidades adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cómo crear líneas discontinuas en PDFs usando Aspose.PDF para .NET: Guía paso a paso](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Cómo eliminar gráficos de PDFs usando Aspose.PDF .NET: Guía completa](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Cómo crear PDFs multilayer usando Aspose.PDF para .NET: Guía exhaustiva](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/programming-with-security-and-signatures/_index.md b/pdf/spanish/net/programming-with-security-and-signatures/_index.md index 09134bfffc..c29363b110 100644 --- a/pdf/spanish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/spanish/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Este tutorial le ofrece una descripción detallada de los métodos y técnicas p | [Comprobar firmas PDF en C# – Cómo leer archivos PDF firmados](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) Aprenda a comprobar y leer firmas PDF en C# con Aspose.PDF para .NET. Guía paso a paso para extraer información de firmas digitales. | [Cómo reparar archivos PDF – Guía completa en C# con Aspose.PDF](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) Aprenda a reparar archivos PDF dañados con Aspose.PDF para .NET usando C#. Guía paso a paso y ejemplos claros. | [Verificar firma PDF en C# – Guía completa de programación](./verify-pdf-signature-in-c-complete-programming-guide/) Aprenda a verificar firmas PDF en C# con Aspose.PDF para .NET. Guía paso a paso para validar la autenticidad de documentos. +| [Crear opciones de firma en C# – guía completa de firma digital](./create-signature-options-in-c-full-guide-to-digital-signing/) Aprenda a crear y configurar opciones de firma digital en C# con Aspose.PDF para .NET. Guía paso a paso completa. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/spanish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..93b1c82028 --- /dev/null +++ b/pdf/spanish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Crea opciones de firma en C# para aplicar una firma digital. Aprende + cómo configurar la firma, implementar una función hash personalizada y firmar documentos + programáticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: es +lastmod: 2026-08-14 +og_description: Crea opciones de firma en C# y aplica una firma digital. Este tutorial + te guía paso a paso en la configuración de la firma, la incorporación de una función + hash personalizada y la firma de un documento. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Crear opciones de firma en C# – guía paso a paso para la firma digital +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Crear opciones de firma en C# – guía completa de firma digital +url: /es/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear opciones de firma en C# – guía completa para la firma digital + +Crear opciones de firma en C# para configurar un flujo de trabajo de firma digital. Este tutorial muestra cómo aplicar una firma digital, implementar una función hash personalizada y firmar un documento usando la clase `SignatureOptions`. Si alguna vez necesitaste firmar un PDF, XML o cualquier carga binaria desde una aplicación .NET, los pasos a continuación te proporcionan una solución lista para ejecutar. + +Aprenderás a: + +* configurar `SignatureOptions` con un algoritmo hash personalizado, +* invocar el método de firma correctamente, +* verificar que la firma se haya aplicado, +* evitar errores comunes al configurar la firma. + +Los únicos requisitos previos son un SDK reciente de .NET (≥ .NET 6) y una biblioteca de firma que exponga `SignatureOptions` (por ejemplo, **GroupDocs.Signature**, **Aspose.Signature**, o una API similar). No se requieren herramientas externas. + +--- + +## Prerrequisitos + +| Requisito | Por qué es importante | +|-------------|----------------| +| .NET 6 SDK o posterior | Proporciona las características modernas del lenguaje usadas en los ejemplos. | +| Un paquete NuGet de biblioteca de firma (p. ej., `GroupDocs.Signature`) | Suministra el tipo `SignatureOptions` y el método de extensión `Sign`. | +| Acceso a una clave privada o certificado | Necesario para generar una firma digital verificable. | + +Instala la biblioteca con la CLI estándar: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Paso 1: Crear opciones de firma + +El primer paso es instanciar `SignatureOptions` y establecer las propiedades que controlan el proceso de firma. Este objeto indica a la biblioteca *qué* firmar y *cómo* hacerlo. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Por qué es importante:** `SignatureOptions` actúa como un contrato entre tu código y el motor de firma. Al configurarlo de antemano evitas código repetitivo cuando firmas varios documentos. + +--- + +## Paso 2: Implementar una función hash personalizada + +Una *función hash personalizada* te brinda control total sobre el digest que el algoritmo de firma firma. Esto es útil cuando el hash predeterminado (SHA‑256) no cumple con los requisitos de cumplimiento o cuando necesitas hash de una parte del documento. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Por qué es importante:** Al asignar `CustomSignHash`, sustituyes el paso interno de hash de la biblioteca por `MyHash`. El motor de firma ahora firmará los bytes devueltos por tu función, garantizando el cumplimiento de cualquier política personalizada. + +--- + +## Paso 3: Cargar el documento y aplicar la firma digital + +Con las opciones preparadas, ahora puedes abrir el archivo objetivo y llamar al método de firma. El método `Sign` lo proporciona la biblioteca y utiliza el `SignatureOptions` configurado. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Por qué es importante:** La llamada a `Sign` realiza tres acciones internamente: + +1. **Cálculo del hash** – ahora delegada a tu función hash personalizada. +2. **Generación de la firma** – usando la clave privada suministrada a la configuración de la biblioteca. +3. **Incorporación** – la firma generada se adjunta al archivo de salida. + +Si alguna etapa falla, el método devuelve `false`, permitiéndote manejar el error de forma elegante. + +--- + +## Paso 4: Verificar que el documento esté firmado + +Una verificación rápida confirma que la firma se aplicó correctamente. La mayoría de las bibliotecas exponen un método `Verify` que comprueba la integridad del archivo firmado. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Por qué es importante:** La verificación asegura que el documento firmado no haya sido manipulado después de la firma y que el hash personalizado haya producido un digest compatible. + +--- + +## Cómo configurar la firma para diferentes tipos de archivo + +El mismo objeto `SignatureOptions` puede reutilizarse para PDFs, documentos Word, imágenes o binarios simples. El único cambio necesario es la clase de opciones específica (p. ej., `PdfSignatureOptions`, `WordSignatureOptions`). Aquí tienes un ejemplo rápido para una imagen JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Por qué es importante:** Entender cómo *configurar la firma* para cada formato te permite extender la misma base de código a múltiples tipos de documento sin reescribir la lógica de hash. + +--- + +## Errores comunes y buenas prácticas + +| Error | Solución recomendada | +|---------|-----------------| +| Olvidar establecer `CustomSignHash` después de crear `SignatureOptions` | Asigna el delegado inmediatamente después de construir el objeto de opciones. | +| Usar un algoritmo hash que el certificado de firma no soporta | Verifica que el uso de clave del certificado coincida con la longitud del hash (p. ej., RSA‑2048 con SHA‑512). | +| Pasar por alto la necesidad de disponer los objetos `Signature` | Envuelve la instancia `Signature` en un bloque `using` para liberar los manejadores de archivo. | +| Guardar el archivo firmado sobre la fuente original | Siempre escribe en una ruta de archivo nueva (`outputPath`) para preservar el documento original. | + +--- + +## Ejemplo completo funcional + +A continuación se muestra un programa autocontenido que reúne todas las piezas. Cópialo en un nuevo proyecto de consola y ejecútalo; la consola informará éxito o fracaso. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Salida esperada** + +``` +Signature verified successfully. +``` + +Si la consola muestra “Signing failed.” o “Signature verification failed.”, revisa la configuración del certificado y asegura que la función hash personalizada devuelva una matriz de bytes del tamaño esperado. + +--- + +## Conclusión + +Ahora sabes cómo **crear opciones de firma** en C#, adjuntar una **función hash personalizada** y **aplicar una firma digital** a cualquier documento compatible. El tutorial cubrió todo el ciclo de vida: configurar las opciones, firmar el archivo y verificar el resultado. Reutilizando la misma instancia de `SignatureOptions` también puedes **cómo configurar la firma** para imágenes, archivos Word o binarios crudos. + +--- + +## ¿Qué sigue? + +* Explora propiedades adicionales de `SignatureOptions` como sellos visuales, servidores de timestamp y cadenas de certificados – se alinean con la palabra clave **apply digital signature**. +* Experimenta con otros algoritmos hash (p. ej., Blake2b) cambiando la implementación dentro de `MyHash`. +* Integra el flujo de firma en una API web para habilitar la firma de documentos sobre la marcha – una extensión natural de **how to sign document** en una arquitectura orientada a servicios. + +¡Siéntete libre de adaptar el código a tus propias políticas de seguridad y comparte tu experiencia en los comentarios! ¡Feliz firma! + +## ¿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. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/programming-with-stamps-and-watermarks/_index.md b/pdf/spanish/net/programming-with-stamps-and-watermarks/_index.md index 9f29de49f5..7845b3ec2e 100644 --- a/pdf/spanish/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/spanish/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Los tutoriales de Aspose.PDF "Programación con sellos y marcas de agua" para .N | [Texto en el pie de página del archivo PDF](./text-in-footer/) | Aprenda a agregar texto en el pie de página de un archivo PDF con Aspose.PDF para .NET. | | [Texto en el encabezado del archivo PDF](./text-in-header/) Aprenda a agregar encabezados de texto a archivos PDF con Aspose.PDF para .NET con este tutorial paso a paso. Mejore sus documentos de forma eficiente y eficaz. | [Agregar numeración Bates a PDF en C# – Guía completa](./add-bates-numbering-pdf-in-c-complete-guide/) Aprenda a aplicar numeración Bates a documentos PDF usando Aspose.PDF para .NET con este tutorial paso a paso. +| [Cómo establecer opciones de numeración Bates en C# – guía completa](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Aprenda a configurar opciones de numeración Bates en PDFs usando Aspose.PDF para .NET con esta guía paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/spanish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..6659b0e37c --- /dev/null +++ b/pdf/spanish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-14 +description: Cómo configurar las opciones de numeración Bates en C# usando GroupDocs. + Sigue este tutorial paso a paso para agregar prefijos personalizados y números de + inicio al convertir Word a PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: es +lastmod: 2026-08-14 +og_description: Cómo configurar rápidamente las opciones de numeración Bates en C#. + Esta guía le muestra cómo agregar prefijos personalizados y números iniciales al + convertir Word a PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Cómo configurar las opciones de numeración Bates en C# – tutorial paso a + paso +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Cómo configurar las opciones de numeración Bates en C# – guía completa +url: /es/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo establecer opciones de numeración Bates en C# – guía completa + +Si necesitas **cómo establecer opciones de numeración Bates** en C#, esta guía te lleva paso a paso. Aprenderás a configurar el número inicial, añadir un prefijo y aplicar la numeración mientras conviertes un documento Word a PDF usando la API de GroupDocs. + +El procesamiento de documentos a menudo requiere identificadores únicos en cada página para fines legales o de archivo. Al final de este tutorial tendrás un fragmento reutilizable que puedes insertar en cualquier proyecto .NET, ya sea que estés construyendo una herramienta de soporte de litigios o un generador de informes automatizado. No se necesitan herramientas externas, solo la biblioteca GroupDocs.Conversion y unas pocas líneas de C#. + +## Lo que necesitarás + +* SDK de .NET 6.0 o posterior instalado +* Visual Studio 2022 (o cualquier IDE que soporte .NET) +* Una licencia válida de GroupDocs.Conversion (la prueba gratuita funciona para pruebas) +* Un documento Word de ejemplo (`input.docx`) que deseas numerar + +Estos requisitos previos garantizan que el código se ejecute sin configuración adicional. + +## Cómo establecer opciones de numeración Bates – visión general + +El núcleo de **cómo establecer opciones de numeración Bates** se basa en tres objetos: + +1. `Document` – carga el archivo fuente. +2. `BatesNumberingOptions` – contiene el número inicial, el prefijo y otros detalles de formato. +3. `AddBatesNumbering` – el método que inserta la numeración en cada página. + +Entender por qué existe cada componente te ayuda a adaptar la solución a escenarios más complejos, como fuentes personalizadas o numeración multilingüe. + +## Paso 1: Instalar el paquete NuGet GroupDocs.Conversion + +Abre una terminal en la carpeta de tu solución y ejecuta: + +```bash +dotnet add package GroupDocs.Conversion +``` + +## Paso 2: Cargar el documento fuente + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*¿Por qué este paso?* +Cargar el archivo crea una representación en memoria que el motor de conversión puede manipular. Sin una instancia de `Document` no puedes aplicar la numeración Bates ni ninguna otra transformación. + +## Paso 3: Crear las opciones de numeración Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*¿Por qué este paso?* +`BatesNumberingOptions` encapsula todas las configuraciones que podrías necesitar al **establecer opciones de numeración Bates**. Ajustar `StartNumber` y `Prefix` te permite alinear la salida con tu sistema de gestión de casos. La propiedad `Position` controla la ubicación visual, lo cual a menudo es un requisito de cumplimiento. + +## Paso 4: Aplicar la numeración Bates al documento + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +El método `AddBatesNumbering` recorre cada página del `Document` cargado e inserta la cadena configurada. Como el método funciona sobre la representación en memoria, puedes encadenar pasos de procesamiento adicionales (p. ej., marcas de agua) antes de guardar. + +## Paso 5: Convertir y guardar el resultado como PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*¿Por qué este paso?* +Guardar como PDF es un formato final común para documentos legales. El objeto `PdfConvertOptions` te permite afinar la salida, pero no es necesario para la numeración básica. La llamada `Save` escribe el PDF completamente numerado en el disco. + +## Ejemplo completo y ejecutable + +Poniendo todo junto, aquí tienes una aplicación de consola autosuficiente que puedes compilar y ejecutar: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Salida esperada** +Ejecutar el programa crea `output.pdf` donde cada página muestra una etiqueta como `CASE-1000`, `CASE-1001`, etc., posicionada en el pie de página derecho. Abre el PDF en cualquier visor para verificar que los números aparecen como se pretende. + +## Problemas comunes y buenas prácticas + +| Problema | Por qué ocurre | Cómo evitarlo | +|----------|----------------|----------------| +| **Rutas relativas causan `FileNotFoundException`** | El directorio de trabajo de una aplicación de consola puede diferir del de Visual Studio. | Utiliza rutas absolutas o `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **La numeración se superpone a los pies de página existentes** | Si el documento fuente ya tiene contenido en el área de pie de página elegida, el nuevo número puede quedar oculto. | Elige una `Position` diferente (p. ej., `HeaderLeft`) o ajusta la plantilla fuente. | +| **Los documentos grandes son lentos** | La numeración Bates itera sobre cada página; el uso de memoria crece con el tamaño del archivo. | Procesa el documento en fragmentos usando `Document.Split` si superas las 500 páginas. | +| **Expiración de la licencia** | La prueba gratuita de GroupDocs expira después de 30 días, provocando una excepción en `AddBatesNumbering`. | Aplica una clave de licencia válida antes de cargar el documento: `License license = new License(); license.SetLicense("license.lic");`. | + +**Consejo profesional:** Si necesitas un formato de número diferente por caso (p. ej., `2023-CASE-001`), construye el prefijo de forma dinámica antes de crear `BatesNumberingOptions`. + +## Ampliando la solución + +El mismo enfoque de **Bates numbering C#** funciona con otros formatos de origen como `.txt`, `.html` o incluso imágenes. Simplemente cambia la extensión del archivo al crear el objeto `Document`, y el motor de conversión se encargará del resto. + +También podrías combinar **document conversion C#** con OCR para PDFs escaneados: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusión + +Ahora sabes **cómo establecer opciones de numeración Bates** en C# de principio a fin. Creando un objeto `BatesNumberingOptions`, aplicándolo con `AddBatesNumbering` y guardando el resultado como PDF, puedes automatizar la producción de documentos legalmente compatibles y con identificadores únicos. + +A partir de aquí puedes explorar temas relacionados como **generación de PDF en C#**, **conversión de documentos C#**, o funciones avanzadas de la **API de GroupDocs** como marcas de agua y firmas digitales. Experimenta con diferentes prefijos, posiciones y formatos de número para adaptarlos a tu flujo de trabajo. + +¡Feliz codificación! + +## ¿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 funcionales con explicaciones paso a paso para ayudarte a dominar funciones adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Agregar numeración Bates a PDF en C# – Guía completa](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Cómo agregar y personalizar números de página en PDFs usando Aspose.PDF para .NET \| Guía de manipulación de documentos](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Cómo agregar un pie de página de sello de texto en PDFs usando Aspose.PDF para .NET: Guía paso a paso](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/annotations/_index.md b/pdf/swedish/net/annotations/_index.md index b6431a22b4..a6fb42f66a 100644 --- a/pdf/swedish/net/annotations/_index.md +++ b/pdf/swedish/net/annotations/_index.md @@ -35,6 +35,7 @@ En omfattande samling handledningar som visar hur man arbetar med annoteringar i | [Ange formatering för fri textannotering](./setfreetextannotationformatting/) | Lär dig hur du ställer in formatering för fritextanteckningar i PDF-dokument med Aspose.PDF för .NET med den här steg-för-steg-guiden. | | [Stryk ut ord](./strikeoutwords/) | Lär dig hur du stryker över ord i en PDF med Aspose.PDF för .NET med den här omfattande steg-för-steg-guiden. Förbättra dina dokumentredigeringsfärdigheter. | | [Uppdatera fritext PDF-annotering](./updatefreetextannotation/) Lär dig hur du uppdaterar fritextanteckningar i PDF-dokument med Aspose.PDF för .NET med den här steg-för-steg-guiden. | +| [Rita rektangel på PDF – steg‑för‑steg C#‑guide](./draw-rectangle-on-pdf-step-by-step-c-guide/) Lär dig hur du ritar en rektangel i en PDF med Aspose.PDF för .NET i en detaljerad steg‑för‑steg‑guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/swedish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..cd9a1a305e --- /dev/null +++ b/pdf/swedish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-14 +description: Rita rektangel på PDF snabbt med C#. Lär dig hur du definierar rektangelns + dimensioner och lägger till former på en PDF-sida på bara några rader. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: sv +lastmod: 2026-08-14 +og_description: rita rektangel på PDF med C# på några sekunder. Den här guiden visar + hur du definierar rektangelns mått, lägger till en form och verifierar sidgränser + för pålitlig PDF‑grafik. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: Rita rektangel på PDF – komplett C#‑handledning +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: rita rektangel på pdf – steg‑för‑steg C#‑guide +url: /sv/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# rita rektangel i pdf – komplett C#-handledning + +Om du behöver **draw rectangle on pdf** med C#, visar den här guiden en kortfattad, produktionsklar lösning. Du får se exakt **how to define rectangle dimensions**, verifiera att formen passar och lägga till den på en sida med ett enda metodanrop. + +Handledningen täcker allt från att skapa ett PDF-dokument till att rendera rektangeln, så att du kan kopiera‑klistra koden i ditt eget projekt och se resultat omedelbart. Ingen extern dokumentation krävs—bara stegen nedan. + +## Förutsättningar + +* .NET 6.0 eller senare (koden fungerar också med .NET Framework 4.7+) +* **Aspose.PDF for .NET** NuGet‑paketet (`Install-Package Aspose.PDF`) +* Grundläggande förståelse för C#‑syntax +* En IDE såsom Visual Studio eller VS Code + +> **Pro tip:** Använd den kostnadsfria evalueringslicensen för Aspose.PDF för snabba experiment; den lägger till ett litet vattenmärke men låter dig testa alla funktioner. + +## Så ritar du rektangel i PDF med C# + +Kärnan i uppgiften är att skapa en `RectangleShape`, sätta dess storlek och linje, och fästa den på en `Page`. Följande H2‑rubrik innehåller huvudnyckelordet, vilket uppfyller SEO‑kraven. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Förklaring av varje steg + +| Step | Why it matters | +|------|----------------| +| **1️⃣ Skapa ett nytt PDF-dokument** | Initierar behållaren som kommer att hålla sidor och grafik. | +| **2️⃣ Lägg till en tom sida** | Du behöver ett `Page`‑objekt eftersom former fästs på en sida, inte direkt på dokumentet. | +| **3️⃣ Definiera rektangelns gränser** | Här är där du **how to define rectangle dimensions**. `Rectangle`‑konstruktorn tar `x`, `y`, `width` och `height` i punkter (1 pt = 1/72 in). | +| **4️⃣ Skapa rektangelformen** | `RectangleShape` är Aspose‑klassen som renderar en rektangel. Att sätta `StrokeColor` definierar konturen; du kan också sätta `FillColor` för en solid fyllning. | +| **5️⃣ Verifiera sidgränser** | `CheckShapeBoundary` kastar ett undantag om rektangeln överskrider sidans storlek, vilket förhindrar felaktiga PDF‑filer. | +| **6️⃣ Lägg till formen på sidan** | Formen blir en del av sidans innehållsström. | +| **7️⃣ Spara PDF‑filen** | Sparar dokumentet till en fil som du kan öppna med vilken PDF‑visare som helst. | + +Den resulterande `RectangleDemo.pdf` innehåller en svart rektangel placerad i sidans övre‑vänstra hörn, exakt 500 pt bred och 700 pt hög. + +![exempel på att rita rektangel i pdf](https://example.com/rectangle-demo.png "exempel på att rita rektangel i pdf") + +*Bildtext: exempel på att rita rektangel i pdf som visar en svart rektangel i PDF‑sidans övre vänstra hörn.* + +## Så definierar du rektangelns dimensioner för olika sidstorlekar + +Kodsnutten ovan använder fasta värden (`500 x 700`). I verkliga applikationer behöver du ofta att rektangeln anpassas till sidans bredd och höjd. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Viktiga punkter:** + +* Använd `page.PageInfo.Width` och `Height` för att läsa den faktiska sidstorleken. +* Multiplikation med en faktor (t.ex. `0.8f`) låter dig uttrycka dimensioner som en procentandel av sidan. +* Centrering uppnås genom att subtrahera rektangelns storlek från sidans storlek och halvera återstoden. + +## Vanliga fallgropar och hur du undviker dem + +| Fallgrop | Varför det händer | Lösning | +|----------|-------------------|---------| +| Rektangeln sträcker sig utanför sidan | Hårdkodade dimensioner som är större än sidans storlek. | Anropa `page.CheckShapeBoundary` **innan** du lägger till formen; justera dimensionerna om ett undantag kastas. | +| Kontur syns inte | `StrokeColor` lämnad på standard (`Color.Empty`). | Ange explicit `StrokeColor` (t.ex. `Color.Black`). | +| Rektangeln visas utanför skärmen | Koordinaterna startar i nedre vänstra hörnet i PDF‑rymden; att använda skärm‑stilens övre vänstra koordinater orsakar en vändning. | Kom ihåg att ursprunget `(0,0)` är det nedre vänstra hörnet. Justera `y` därefter eller använd `pageHeight - desiredY`. | +| Oväntad linjetjocklek | Standardlinjebredden kan vara för tunn för utskrift. | Sätt `rectangleShape.LineWidth = 2;` för att öka tjockleken. | + +## Utöka exemplet + +När du kan **draw rectangle on pdf**, kan du enkelt lägga till andra former: + +* **EllipseShape** – för cirklar eller ovaler. +* **PolygonShape** – för anpassade polygoner. +* **TextFragment** – för att märka dina rektanglar. + +Alla former delar samma arbetsflöde: definiera gränser, konfigurera utseende, verifiera gränser och sedan lägga till på sidan. + +## Komplett, körbart program + +Nedan är hela programmet som kombinerar den grundläggande rektangeln och exemplet med dynamisk storlek. Kopiera det till ett nytt konsolprojekt, återställ `Aspose.PDF`‑NuGet‑paketet och kör. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Förväntad output:** +Öppna `CombinedRectangles.pdf`. Du kommer att se en svart rektangel förankrad i det nedre vänstra hörnet och en centrerad mörkblå rektangel med en ljusgul fyllning. Båda rektanglarna respekterar sidmarginalerna. + +## Slutsats + +Du vet nu hur du **draw rectangle on pdf** med C# och exakt **how to define rectangle dimensions** för både fasta och responsiva layouter. Metoden använder Aspose.PDF:s `RectangleShape`, gränskontroll och enkel aritmetik för att anpassa sig till vilken sidstorlek som helst. + +Nästa steg kan du utforska: + +* Lägga till **fill colors** och **line styles** (streckade, prickade) – sekundärt nyckelord: how to define rectangle dimensions with style. +* Kombinera flera former till en enda `Page` för att skapa diagram eller formulär. +* Exportera PDF‑en till en ström för webb‑API:er istället för att spara till disk. + +Experimentera med olika storlekar, färger och positioner för att bemästra PDF‑grafik i dina .NET‑applikationer. Lycka till med kodningen! + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närbesläktade ämnen som bygger på teknikerna som demonstrerats 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 du anpassar PDF‑filer med Aspose.PDF för .NET: Ställ in sidmarginaler och rita linjer](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Hur du lägger till sidstämplar i PDF‑filer med Aspose.PDF för .NET: En komplett guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Hur du lägger till sidnumreringsstämplar i PDF‑filer med Aspose.PDF för .NET | Vattenstämplar & bakgrunder](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/conversion-export/_index.md b/pdf/swedish/net/conversion-export/_index.md index ca3f26c607..52215ef07a 100644 --- a/pdf/swedish/net/conversion-export/_index.md +++ b/pdf/swedish/net/conversion-export/_index.md @@ -219,9 +219,10 @@ Lär dig hur du optimerar konverteringen från PDF till HTML med Aspose.PDF för Lär dig hur du konverterar PDF-dokument till HTML med externa PNG-bilder med Aspose.PDF för .NET. Den här guiden säkerställer layoutbevarande och optimering av webbprestanda. ### [PDF till HTML-konvertering med Aspose.PDF .NET: En omfattande guide](./aspose-pdf-net-pdf-to-html-conversion/) -Bemästra PDF-till-HTML-konvertering med Aspose.PDF för .NET. Förbättra dokumenttillgänglighet och engagemang med anpassningsbara alternativ. +Lär dig hur du konverterar PDF-dokument till HTML med externa PNG-bilder med Aspose.PDF för .NET. Den här guiden säkerställer layoutbevarande och optimering av webbprestanda. -### [PDF till HTML-konvertering med Aspose.PDF för .NET](./pdf-to-html-conversion-aspose-dot-net/) +### [Spara PDF som HTML och konvertera till PDF/X‑4 med Aspose.PDF i C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +### [PDF till HTML-konvertering med Aspose.PDF .NET](./pdf-to-html-conversion-aspose-dot-net/) En kodhandledning för Aspose.PDF Net ### [PDF till TIFF-konvertering i .NET med Aspose.PDF: En steg-för-steg-guide](./pdf-to-tiff-conversion-aspose-pdf-net/) diff --git a/pdf/swedish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/swedish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..01f0b3f8dd --- /dev/null +++ b/pdf/swedish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-14 +description: Spara PDF som HTML och konvertera PDF till PDF/X‑4 med Aspose.PDF för + C#. Steg‑för‑steg‑kod visar HTML‑export, signaturlista och redigering av grafik‑tillstånd. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: sv +lastmod: 2026-08-14 +og_description: Spara PDF som HTML och konvertera PDF till PDF/X‑4 med Aspose.PDF + för C#. Följ den här kompletta guiden för att exportera HTML, lista signaturer och + redigera grafiska tillstånd. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Spara PDF som HTML och konvertera till PDF/X‑4 med Aspose.PDF – C#‑guide +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Spara PDF som HTML och konvertera till PDF/X‑4 med Aspose.PDF i C# +url: /sv/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Spara PDF som HTML och konvertera till PDF/X‑4 med Aspose.PDF i C# + +Om du behöver **spara PDF som HTML**, gör Aspose.Pdf processen enkel. Denna handledning visar också hur du **konverterar PDF till PDF/X‑4**, listar signaturfält och lägger till en anpassad ExtGState, vilket ger dig ett komplett end‑to‑end‑arbetsflöde. + +Du kommer att lära dig hur du: + +* Exportera en PDF till ren HTML samtidigt som du hoppar över rasterbilder. +* Konvertera ett PDF‑dokument till PDF/X‑4‑standarden för utskriftsklar output. +* Räkna upp alla signaturfält i en PDF. +* Infoga ett anpassat grafik‑tillstånd (ExtGState) på den första sidan. + +All kod körs på .NET 6 eller senare och kräver NuGet‑paketet Aspose.Pdf för .NET. + +## Förutsättningar + +| Krav | Orsak | +|------|-------| +| .NET 6 SDK eller nyare | Tillhandahåller runtime för C#‑exemplet. | +| Visual Studio 2022 (eller någon C#‑IDE) | Gör det enkelt att redigera och felsöka. | +| Aspose.Pdf för .NET (v23.12 eller senare) | Tillhandahåller klasserna `Document`, `PdfFormatConversionOptions` och `HtmlSaveOptions` som används i handledningen. | +| En exempel‑PDF‑fil (`sample.pdf`) | Källdokumentet som kommer att bearbetas. | + +Installera biblioteket med: + +```bash +dotnet add package Aspose.Pdf +``` + +## Översikt över lösningen + +Programmet utför sex logiska steg: + +1. Läs in käll‑PDF‑filen. +2. Lista varje signaturfälts namn. +3. **Konvertera PDF till PDF/X‑4** och spara resultatet. +4. **Spara PDF som HTML** samtidigt som rasterbilder hoppas över. +5. Lägg till ett anpassat ExtGState (grafik‑tillstånd) på den första sidan. +6. Spara den modifierade PDF‑filen med det nya grafik‑tillståndet. + +Varje steg förklaras nedan, med komplett kod och resonemanget bakom valen. + +## Steg 1: Läs in PDF‑dokumentet + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Varför detta är viktigt*: `Document` representerar hela PDF‑filen. Att läsa in den en gång låter dig återanvända samma objekt för alla efterföljande operationer, vilket minskar I/O‑belastningen. + +## Steg 2: Lista alla signaturfältnamn + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Varför detta är viktigt*: Att känna till signaturfältnamnen är avgörande när du senare behöver validera, ta bort eller ersätta digitala signaturer. `Signatures`‑samlingen ger en snabb, skrivskyddad vy av fälten. + +## Steg 3: Konvertera PDF till PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Viktiga punkter** + +* `PdfStandard.PdfX4` instruerar Aspose.Pdf att bädda in alla nödvändiga resurser (typsnitt, färgprofiler) och att upprätthålla PDF/X‑4‑kraven. +* Konverteringen körs i minnet; endast den slutgiltiga filen skrivs till disk, vilket gör operationen snabb. + +> **Proffstips:** Verifiera utdata med en PDF/X‑4‑validator (t.ex. Adobe Preflight) om ditt efterföljande arbetsflöde är strikt med avseende på efterlevnad. + +## Steg 4: Spara PDF som HTML samtidigt som rasterbilder hoppas över + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Varför du kan vilja göra detta**: HTML‑output är användbar för webb‑förhandsgranskning eller innehålls‑indexering. Att hoppa över rasterbilder (`SkipRasterImages = true`) håller HTML‑filen lättviktig och förbättrar laddningstider, särskilt när den ursprungliga PDF‑filen innehåller högupplösta skanningar. + +## Steg 5: Lägg till ett anpassat ExtGState på den första sidan + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Förklaring*: Ett **ExtGState**‑objekt styr transparens, blandningsläge och andra grafikparametrar. Genom att lägga till `GS0` kan du senare referera till detta tillstånd i innehållsströmmar (t.ex. för halvtransparenta överlägg). Koden använder det lågnivå‑COS‑API:t eftersom Aspose.Pdf inte exponerar ett hög‑nivå‑gränssnitt för skapande av ExtGState. + +## Steg 6: Spara den modifierade PDF‑filen med det nya ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Den slutliga filen (`sample_with_extgstate.pdf`) innehåller: + +* Alla ursprungliga sidor och innehåll. +* En PDF/X‑4‑kompatibel version (`sample_pdfx4.pdf`). +* En HTML‑representation utan rasterbilder (`sample.html`). +* Ett anpassat ExtGState (`GS0`) kopplat till den första sidans resurser. + +### Förväntad konsolutmatning + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Om käll‑PDF‑filen saknar signaturer skriver loopen inget men fortsätter ändå utan fel. + +## Vanliga variationer och kantfall + +| Situation | Åtgärd | +|-----------|--------| +| **PDF innehåller inga sidor** | Kontrollera `doc.Pages.Count` innan du åtkommer `doc.Pages[1]` för att undvika `IndexOutOfRangeException`. | +| **Du behöver PDF/A‑2b istället för PDF/X‑4** | Ändra `PdfStandard.PdfX4` till `PdfStandard.PdfA2b` i `PdfFormatConversionOptions`. | +| **Du vill behålla rasterbilder** | Sätt `SkipRasterImages = false` (eller utelämna egenskapen) i `HtmlSaveOptions`. | +| **Flera ExtGState‑objekt** | Använd unika nycklar (`GS1`, `GS2`, …) när du lägger till i `extGStateDict`. | +| **Stora PDF‑filer (hundratals MB)** | Aktivera `doc.OptimizeResources = true` innan sparning för att minska minnesanvändning. | + +## Fullständig källkod (körbar) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Steg 1: Läs in PDF‑dokumentet + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Steg 2: Lista alla signaturfältnamn + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Steg 3: Konvertera PDF till PDF/X‑4‑standard + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Steg 4: Spara PDF som HTML samtidigt som rasterbilder hoppas över + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Steg 5: Lägg till ett anpassat ExtGState (grafik‑tillstånd) på den första sidan + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## 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 denna guide. 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. + +- [Omfattande guide: Konvertera PDF till HTML med Aspose.PDF .NET med anpassade strategier](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Konvertera PDF till HTML med anpassade bild‑URL:er med Aspose.PDF .NET: En omfattande guide](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF‑till‑HTML‑konvertering med Aspose.PDF .NET: Spara bilder som externa PNG‑filer](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/programming-with-forms/_index.md b/pdf/swedish/net/programming-with-forms/_index.md index 3b7c7b5f3c..6c1a50232f 100644 --- a/pdf/swedish/net/programming-with-forms/_index.md +++ b/pdf/swedish/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Dessa handledningar ger också detaljerade kodexempel, tydliga förklaringar och | [Ställ in bildtext för radioknapp](./set-radio-button-caption/) Lär dig hur du ställer in bildtexter för radioknappar i PDF-filer med Aspose.PDF för .NET. Den här steg-för-steg-guiden guidar dig genom hur du laddar, ändrar och sparar dina PDF-formulär. | | [Textruta](./text-box/) | Upptäck hur du enkelt lägger till textrutor i PDF-filer med Aspose.PDF för .NET med den här steg-för-steg-guiden. Förbättra användarinteraktionen. | | [Hur man skapar PDF med Aspose – Lägg till formulärfält och sidor](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Lär dig hur du skapar en PDF, lägger till formulärfält och sidor med Aspose.PDF för .NET i en steg-för-steg-guide. | +| [Skapa PDF-formulärfält i C# – steg‑för‑steg‑guide](./create-pdf-form-field-in-c-step-by-step-guide/) | Lär dig hur du skapar ett PDF-formulärfält i C# med Aspose.PDF för .NET i denna steg‑för‑steg‑guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/swedish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..9247e9bb4c --- /dev/null +++ b/pdf/swedish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-14 +description: Skapa PDF-formulärfält snabbt med C#. Lär dig hur du lägger till en textruta + i PDF och modifierar PDF för att inkludera en textruta med Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: sv +lastmod: 2026-08-14 +og_description: Skapa PDF-formulärfält med C#. Denna handledning visar hur man lägger + till en textruta i en PDF och modifierar en PDF för att inkludera en textruta med + hjälp av Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Skapa PDF-formulärfält i C# – komplett programmeringsguide +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Skapa PDF‑formulärfält i C# – steg‑för‑steg‑guide +url: /sv/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa PDF-formulärfält i C# – steg‑för‑steg‑guide + +Om du behöver **skapa PDF-formulärfält** i ett dokument, guidar den här artikeln dig genom hela processen. Du får se exakt hur du **lägger till en textruta i PDF**‑sidor och hur du **modifierar PDF för att inkludera en textruta** med hjälp av Aspose.PDF‑biblioteket för .NET. + +Att arbeta med PDF‑formulär är ett vanligt krav för faktureringssystem, enkäter eller någon arbetsflöde som samlar in användarinmatning. I slutet av den här handledningen har du ett återanvändbart kodexempel som skapar ett fullt funktionellt textrutefält, placerar det där du vill och sparar den uppdaterade PDF‑filen – allt utan att lämna ditt C#‑projekt. + +## 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+) +* Visual Studio 2022 eller någon IDE som stödjer C# +* En aktiv Aspose.PDF för .NET‑licens (gratis provversion fungerar för utveckling) +* En PDF‑fil med namnet `input.pdf` placerad i en känd katalog (handledningen använder `YOUR_DIRECTORY` som platshållare) + +> **Proffstips:** Om du ännu inte har en licens kan du begära en temporär nyckel från Asposes webbplats; biblioteket fungerar i utvärderingsläge utan kodändringar. + +## Hur du skapar PDF-formulärfält i C# (översikt) + +1. Läs in den befintliga PDF‑dokumentet. +2. Instansiera ett `TextBoxField` och konfigurera dess namn och utseende. +3. Lägg till en widget‑annotation som definierar den visuella rektangeln på målsidan. +4. Infoga fältet i dokumentets formulärsamling. +5. Spara den modifierade PDF‑filen. + +Varje steg förklaras i detalj nedan, med fullständiga kodexempel och resonemanget bakom API‑anropen. + +## Steg 1: Läs in PDF‑dokumentet + +Den första operationen är att läsa in käll‑PDF‑filen. Aspose.PDF representerar en PDF‑fil med klassen `Document`. När du laddar dokumentet får du åtkomst till dess sidor, formulärsamling och andra strukturer. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Varför detta är viktigt:** +Att ladda filen skapar en modell av PDF‑filen i minnet, vilket gör att du kan lägga till, ta bort eller redigera objekt utan att förstöra originalfilen. `Document`‑objektet exponerar också egenskapen `Form`, där du senare **lägger till en textruta i PDF**. + +## Steg 2: Skapa ett textrutefält + +Ett textrutefält är en typ av formulärfält som låter användare skriva fri text. I Aspose.PDF skapar du det genom att instansiera `TextBoxField`, ange målsidan och en rektangel som definierar widgetens initiala storlek. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Varför detta är viktigt:** +* `PartialName` är nyckeln som formulärhanteringsverktyg (t.ex. Adobe Acrobat, server‑sidiga parsers) använder för att hämta det angivna värdet. +* Rektangeln du anger här definierar endast den *initiala* widget‑storleken; du kan senare justera dess visuella placering med en widget‑annotation (nästa steg). +* Att sätta `DefaultAppearance` säkerställer att texten i rutan renderas konsekvent i olika visare. + +## Steg 3: Definiera den visuella widget‑annoteringen + +Ett formulärfält kan ha en eller flera **widget‑annotationer** som styr var fältet visas på varje sida. Genom att lägga till en widget kan du placera samma logiska fält på en annan plats eller till och med på flera sidor. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Varför detta är viktigt:** +Widget‑rektangeln bestämmer de skärmkoordinater som användarna ser. Om du hoppar över detta steg kan fältet finnas i PDF‑filens datastruktur men blir osynligt för slutanvändaren. Att lägga till en widget är steget som verkligen **lägger till en textruta i PDF**. + +## Steg 4: Lägg till det konfigurerade fältet i dokumentets formulär + +Nu när `TextBoxField` är fullt konfigurerat måste du registrera det i PDF‑filens formulärsamling. Detta gör fältet till en del av det interaktiva formuläret och säkerställer att det sparas. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Varför detta är viktigt:** +Utan att lägga till fältet i `pdfDocument.Form` skulle PDF‑visaren ignorera widget‑annoteringen, och fältdata skulle aldrig skickas. Den här raden slutför **modifiera PDF för att inkludera en textruta**‑operationen. + +## Steg 5: Spara den uppdaterade PDF‑filen + +Till sist skriver du tillbaka ändringarna till disk. Du kan skriva över originalfilen eller skapa en ny; exemplet sparar till `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +När du öppnar `output.pdf` i Adobe Acrobat Reader ser du en rektangulär textruta med etiketten “Comments” på sida 2. Användare kan klicka i rutan, skriva, och den angivna texten blir en del av PDF‑formulärets data. + +## Fullständigt fungerande exempel + +När alla bitar sätts ihop får du ett komplett, körklart program. Kopiera det till ett nytt konsolprojekt, ersätt `YOUR_DIRECTORY` med en riktig sökväg och kör. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Förväntad output:** +När programmet körs skrivs två bekräftelsesatser till konsolen. När du öppnar `output.pdf` visas en textruta på sida 2 där användaren kan skriva kommentarer. När formuläret skickas (t.ex. via Adobe Acrobats “Submit”-knapp) visas fältnamnet `Comments` i den exporterade FDF‑ eller XFDF‑datan. + +## Vanliga variationer och kantfall + +| Situation | Hur du anpassar koden | +|-----------|-----------------------| +| **Lägg till fältet på en annan sida** | Ändra `pdfDocument.Pages[1]` till önskat sidindex (0‑baserat). | +| **Skapa en flerradig textruta** | Sätt `textBox.Multiline = true;` innan du lägger till widgeten. | +| **Ange ett standardvärde** | Tilldela `textBox.Value = "Enter your comments here";`. | +| **Gör fältet obligatoriskt** | Sätt `textBox.Required = true;`. | +| **Placera fältet på flera sidor** | Anropa `textBox.AddWidgetAnnotation` för varje extra rektangel på målsidorna. | +| **Använd ett eget typsnitt** | Ladda typsnittet med `FontRepository.AddFont("path/to/font.ttf")` och referera till det i `DefaultAppearance`. | + +**Proffstips:** Validera alltid rektangelkoordinaterna mot sidstorleken (`pdfDocument.Pages[1].Rect`). Om widgeten ligger utanför sidans gränser kan visare klippa eller dölja fältet. + +## Testa formulärfältet + +1. Öppna `output.pdf` i Adobe Acrobat Reader. +2. Klicka i “Comments”-rutan; markören ska visas. +3. Skriv någon text och tryck **Tab** eller klicka någon annanstans. +4. Välj **File → Save As** för att spara det angivna värdet. +5. (Valfritt) Använd Aspose.PDF:s `Form`‑API för att extrahera värdet programatiskt: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Detta kodexempel visar att fältet inte bara är synligt utan också kan hämtas via kod – viktigt för server‑sidig bearbetning. + +## Slutsats + +Du vet nu hur du **skapar PDF-formulärfält** i C# från början till slut. Handledningen gick igenom att läsa in en PDF, konfigurera ett `TextBoxField`, lägga till en widget‑annotation, registrera fältet och spara resultatet. Med dessa byggstenar kan du **lägga till en textruta i PDF**‑dokument, **modifiera PDF för att inkludera en textruta**, och utöka metoden till andra fälttyper som kryssrutor, radioknappar eller rullgardinsmenyer. + +Nästa steg är att utforska relaterade ämnen som **extrahera formulärdata**, **platta till PDF‑formulär** eller **styla fält med ramar och färger**. Alla dessa koncept bygger på samma kärn‑API som du just har bemästrat, vilket låter dig skapa sofistikerade interaktiva PDF‑filer helt i C#. + +Lycka till med kodandet, och experimentera gärna med olika rektanglar, typsnitt och valideringsregler för att passa just ditt program! + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker nära besläktade ämnen som bygger vidare på teknikerna 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 implementationssätt i dina egna projekt. + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/programming-with-operators/_index.md b/pdf/swedish/net/programming-with-operators/_index.md index 24b4881502..497885d935 100644 --- a/pdf/swedish/net/programming-with-operators/_index.md +++ b/pdf/swedish/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF för .NET:s handledningar "Programmering med operatorer" guidar dig g | [Rita XForm på sidan](./draw-xform-on-page/) | lär dig hur man ritar XForms i PDF med Aspose.PDF för .NET med den här omfattande steg-för-steg-guiden. | | [PDF-operatorer](./pdf-operators/) | Steg-för-steg-guide för att använda PDF-operatorer med Aspose.PDF för .NET. Lägg till en bild på en PDF-sida och ange dess position. | | [Ta bort grafikobjekt i PDF-fil](./remove-graphics-objects/) Lär dig hur du tar bort grafikobjekt från en PDF-fil med Aspose.PDF för .NET i den här steg-för-steg-guiden. Förenkla dina PDF-manipulationsuppgifter. | +| [Skapa tom PDF-dictionary i C# med Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Lär dig hur du skapar en tom PDF-dictionary i C# med Aspose.PDF. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/swedish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..c78cfedb2b --- /dev/null +++ b/pdf/swedish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: Skapa en tom PDF‑ordbok i C# med Aspose.Pdf – lär dig hur du lägger till + ett grafikläge i ExtGState‑samlingen och modifierar PDF‑filer programatiskt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: sv +lastmod: 2026-08-14 +og_description: Skapa en tom PDF‑ordbok i C# med Aspose.Pdf. Följ den här kompletta + guiden för att lägga till ett anpassat grafikläge i en PDFs ExtGState‑samling. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Skapa en tom PDF-ordbok i C# – Aspose.Pdf steg‑för‑steg guide +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Skapa en tom PDF‑ordbok i C# med Aspose.Pdf +url: /sv/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa tom PDF‑dictionary i C# med Aspose.Pdf + +Om du behöver **skapa tom PDF‑dictionary**‑objekt när du arbetar med PDF‑filer, visar den här guiden exakt hur du gör det i C# med Aspose.Pdf‑biblioteket. Oavsett om du bygger ett anpassat grafik‑tillstånd, lägger till en ny resurs eller förbereder en mall för senare användning, ger stegen nedan en komplett, körbar lösning. + +Du kommer att lära dig hur du laddar en PDF, får åtkomst till den första sidans resurs‑dictionary, bygger en helt ny `CosPdfDictionary` och sätter in den i `ExtGState`‑samlingen. I slutet av handledningen har du en fungerande `output.pdf` som innehåller den nyss skapade dictionaryn. + +## Förutsättningar + +Innan du börjar, se till att du har: + +- .NET 6.0 eller senare (koden fungerar även med .NET Framework 4.6+) +- Visual Studio 2022 eller någon annan C#‑IDE du föredrar +- En Aspose.Pdf för .NET‑licens (eller en temporär utvärderingsnyckel) +- En exempel‑PDF med namnet **input.pdf** placerad i en mapp du kontrollerar (mappens sökväg kommer att användas som `dataDir`) + +Inga ytterligare NuGet‑paket krävs utöver `Aspose.Pdf`. + +## Steg 1: Ställ in projektet och referera Aspose.Pdf + +1. Skapa ett nytt **Console App**‑projekt i Visual Studio. +2. Öppna **NuGet Package Manager** och installera `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Lägg till följande `using`‑direktiv högst upp i `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Varför dessa namnrymder?* `Aspose.Pdf` innehåller kärnklassen `Document`, medan `Aspose.Pdf.Operators.Gfx` tillhandahåller `CosPdfDictionary`, `CosPdfNumber` och andra låg‑nivå PDF‑objekt som behövs för att **skapa tom PDF‑dictionary**‑strukturer. + +## Steg 2: Läs in käll‑PDF‑filen + +Den första operationen är att läsa in den befintliga PDF‑filen i en `Document`‑instans. Detta ger dig åtkomst till alla sidor, resurser och låg‑nivå dictionaries. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Förklaring*: `Document` läser in filen i minnet och förbereder interna strukturer. `using`‑satsen ser till att filhandtaget frigörs när vi är klara med bearbetningen. + +## Steg 3: Få åtkomst till den första sidans resurs‑dictionary + +Varje PDF‑sida har en **Resources**‑dictionary som grupperar teckensnitt, bilder, ExtGState‑objekt och andra delade resurser. För att infoga ett nytt grafik‑tillstånd måste vi redigera denna dictionary. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` är en hjälparklass som låter dig behandla en PDF‑dictionary som en C#‑`Dictionary`. + +## Steg 4: Hämta (eller skapa) ExtGState‑samlingen + +`ExtGState` innehåller grafik‑tillståndsobjekt såsom opacitet, blandningsläge och linjebredd. Om käll‑PDF‑filen redan innehåller ett `ExtGState`‑element återanvänder vi det; annars skapar vi en ny tom dictionary. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Varför denna kontroll?* Vissa PDF‑filer saknar helt `ExtGState`‑elementet. Genom att hantera båda fallen blir handledningen robust för alla indatafiler. + +## Steg 5: **Skapa tom PDF‑dictionary** för ett nytt grafik‑tillstånd + +Nu skapar vi faktiskt **tom PDF‑dictionary**‑objekt som definierar grafik‑tillståndets parametrar. Dictionaryn startar tom och vi lägger till de nödvändiga nycklarna: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Vad varje post gör + +| Nyckel | Typ | Betydelse | +|--------|-----|-----------| +| **CA** | `CosPdfNumber` | Stroke‑opacitet (intervall 0‑1). | +| **ca** | `CosPdfNumber` | Fill‑opacitet (intervall 0‑1). | +| **BM** | `CosPdfName` | Blandningsläge; `"Normal"` är det vanligaste. | + +Eftersom vi började med en **tom PDF‑dictionary** har vi full kontroll över vilka poster som läggs till. Du kan utöka dictionaryn med ytterligare grafik‑tillståndsparametrar såsom `LW` (linjebredd) eller `LC` (linje‑cap) när du så önskar. + +## Steg 6: Infoga det nya grafik‑tillståndet i ExtGState + +`ExtGState`‑dictionaryn fungerar som en karta där varje post identifieras av ett namn (t.ex. `GS0`, `GS1`). Vi lägger vår nybyggda dictionary under en unik nyckel. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Om du planerar att lägga till flera tillstånd, öka suffixet (`GS1`, `GS2`, …) för att undvika namnkonflikter. + +## Steg 7: Spara den modifierade PDF‑filen + +Till sist skriver vi tillbaka förändringarna till disk. `Save`‑metoden serialiserar automatiskt de uppdaterade dictionaries. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Öppna `output.pdf` i någon PDF‑visare och inspektera **Resources → ExtGState**‑posten (de flesta visare döljer detta, men verktyg som Adobe Acrobat Preflight eller PDF‑Tron kan visa det). Du bör se en `GS0`‑post som innehåller de opacitets‑ och blandningsvärden du definierade. + +## Komplett fungerande exempel + +När alla bitar sätts ihop ser hela programmet ut så här – du kan kopiera och klistra in det i `Program.cs` och köra: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Förväntad output** – Konsolen skriver ut en bekräftelsesats, och `output.pdf` innehåller den nya `GS0`‑posten under `ExtGState`. När du renderar en sida som refererar `GS0` (t.ex. via en content‑stream‑operator `gs`), blir streck helt ogenomskinliga medan fyllningar är 50 % transparenta. + +## Vanliga frågor och hantering av kantfall + +| Fråga | Svar | +|-------|------| +| *Vad händer om PDF‑filen har flera sidor?* | Exemplet riktar sig mot den första sidan (`Pages[1]`). För att påverka alla sidor, loopa igenom `pdfDocument.Pages` och upprepa steg 3‑5 för varje sidas resurser. | +| *Kan jag lägga till dictionaryn på en sida som redan har ett ExtGState‑element med namnet “GS0”?* | Ja, men du måste använda en annan nyckel (`GS1`, `GS2`, …) för att undvika att skriva över den befintliga posten. | +| *Är det säkert att ändra dictionaryn efter att ha sparat?* | När du anropar `Save` är den minnes‑representation som ligger bakom filen fristående från filen. Du kan fortsätta redigera `Document`‑objektet och anropa `Save` igen om så behövs. | +| *Behöver jag en licens för Aspose.Pdf för att använda ` | + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närliggande ämnen som bygger vidare på teknikerna 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 implementationssätt i dina egna projekt. + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/programming-with-security-and-signatures/_index.md b/pdf/swedish/net/programming-with-security-and-signatures/_index.md index a7a08837e6..d49d7c7048 100644 --- a/pdf/swedish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/swedish/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Handledningen ger dig en detaljerad översikt över metoder och tekniker för at | [Kontrollera PDF-signaturer i C# – Så läser du signerade PDF-filer](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Lär dig hur du läser och verifierar signerade PDF-filer med Aspose.PDF för .NET i C#. | | [Verifiera PDF-signatur i C# – Komplett programmeringsguide](./verify-pdf-signature-in-c-complete-programming-guide/) | Lär dig hur du verifierar PDF-signaturer i C# med Aspose.PDF för .NET i en komplett steg‑för‑steg‑guide. | | [Hur man reparerar PDF-filer – Komplett C#-guide med Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Lär dig steg för steg hur du reparerar skadade PDF-filer med Aspose.PDF i C#. | +| [Skapa signaturalternativ i C# – komplett guide till digital signering](./create-signature-options-in-c-full-guide-to-digital-signing/) | Lär dig hur du skapar signaturalternativ och signerar PDF-dokument digitalt med Aspose.PDF för .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/swedish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..841aa72bb6 --- /dev/null +++ b/pdf/swedish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,312 @@ +--- +category: general +date: 2026-08-14 +description: Skapa signaturalternativ i C# för att tillämpa digital signatur. Lär + dig hur du konfigurerar signaturen, implementerar en anpassad hashfunktion och signerar + dokument programatiskt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: sv +lastmod: 2026-08-14 +og_description: Skapa signaturalternativ i C# och tillämpa en digital signatur. Denna + handledning guidar dig genom att konfigurera signaturen, lägga till en anpassad + hash‑funktion och signera ett dokument. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Skapa signaturalternativ i C# – steg‑för‑steg guide för digital signering +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Skapa signaturalternativ i C# – fullständig guide till digital signering +url: /sv/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa signaturalternativ i C# – fullständig guide till digital signering + +Skapa signaturalternativ i C# för att konfigurera ett digitalt signaturflöde. Denna handledning visar hur du tillämpar digital signatur, implementerar en anpassad hash‑funktion och signerar ett dokument med hjälp av klassen `SignatureOptions`. Om du någonsin har behövt signera en PDF, XML eller någon binär payload från en .NET‑applikation, ger stegen nedan en färdig‑att‑köra‑lösning. + +Du kommer att lära dig hur du: + +* konfigurerar `SignatureOptions` med en anpassad hash‑algoritm, +* anropar signeringsmetoden korrekt, +* verifierar att signaturen har tillämpats, +* undviker vanliga fallgropar när du konfigurerar signaturen. + +Det enda som krävs är ett modernt .NET SDK (≥ .NET 6) och ett signeringsbibliotek som exponerar `SignatureOptions` (t.ex. **GroupDocs.Signature**, **Aspose.Signature** eller ett liknande API). Inga externa verktyg behövs. + +--- + +## Förutsättningar + +| Krav | Varför det är viktigt | +|------|-----------------------| +| .NET 6 SDK eller senare | Tillhandahåller de moderna språkfunktionerna som används i exemplen. | +| Ett signerings‑bibliotek NuGet‑paket (t.ex. `GroupDocs.Signature`) | Tillhandahåller typen `SignatureOptions` och `Sign`‑utökningsmetoden. | +| Tillgång till en privat nyckel eller certifikat | Krävs för att generera en verifierbar digital signatur. | + +Installera biblioteket med den vanliga CLI:n: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Steg 1: Skapa signaturalternativ + +Det första steget är att instansiera `SignatureOptions` och sätta de egenskaper som styr signeringsprocessen. Detta objekt talar om för biblioteket *vad* som ska signeras och *hur* det ska signeras. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Varför detta är viktigt:** `SignatureOptions` fungerar som ett avtal mellan din kod och signeringsmotorn. Genom att konfigurera det i förväg undviker du upprepad boilerplate när du signerar flera dokument. + +--- + +## Steg 2: Implementera en anpassad hash‑funktion + +En *anpassad hash‑funktion* ger dig full kontroll över digest‑värdet som signaturalgoritmen signerar. Detta är användbart när standard‑hashen (SHA‑256) inte uppfyller efterlevnadskrav eller när du behöver hash‑a en delmängd av dokumentet. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Varför detta är viktigt:** Genom att tilldela `CustomSignHash` ersätter du bibliotekets interna hash‑steg med `MyHash`. Signeringsmotorn kommer nu att signera de byte som returneras av din funktion, vilket säkerställer efterlevnad av eventuella anpassade policyer. + +--- + +## Steg 3: Ladda dokumentet och tillämpa digital signatur + +När alternativen är förberedda kan du nu öppna målfilen och anropa signeringsmetoden. Metoden `Sign` tillhandahålls av biblioteket och använder de konfigurerade `SignatureOptions`. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Varför detta är viktigt:** Anropet till `Sign` utför tre handlingar internt: + +1. **Hash‑beräkning** – nu delegerad till din anpassade hash‑funktion. +2. **Signaturgenerering** – med den privata nyckel som levereras till bibliotekets konfiguration. +3. **Inbäddning** – den genererade signaturen bifogas till utdatafilen. + +Om något steg misslyckas returnerar metoden `false`, vilket låter dig hantera felet på ett smidigt sätt. + +--- + +## Steg 4: Verifiera att dokumentet är signerat + +En snabb verifiering bekräftar att signaturen har tillämpats korrekt. De flesta bibliotek exponerar en `Verify`‑metod som kontrollerar integriteten hos den signerade filen. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Varför detta är viktigt:** Verifiering säkerställer att det signerade dokumentet inte har manipulerats efter signering och att den anpassade hashen producerade ett kompatibelt digest. + +--- + +## Hur man konfigurerar signatur för olika filtyper + +Samma `SignatureOptions`‑objekt kan återanvändas för PDF‑filer, Word‑dokument, bilder eller rena binärfiler. Den enda förändring som krävs är den specifika alternativklassen (t.ex. `PdfSignatureOptions`, `WordSignatureOptions`). Här är ett snabbt exempel för en JPEG‑bild: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Varför detta är viktigt:** Att förstå hur man *konfigurerar signatur* för varje format låter dig utöka samma kodbas över flera dokumenttyper utan att skriva om hash‑logiken. + +--- + +## Vanliga fallgropar och bästa praxis + +| Fallgrop | Rekommenderad åtgärd | +|----------|----------------------| +| Glömmer att sätta `CustomSignHash` efter att ha skapat `SignatureOptions` | Tilldela delegaten omedelbart efter att ha konstruerat options‑objektet. | +| Använder en hash‑algoritm som signeringscertifikatet inte stödjer | Verifiera att certifikatets nyckelanvändning matchar hash‑längden (t.ex. RSA‑2048 med SHA‑512). | +| Förbiser behovet av att disponera `Signature`‑objekt | Omslut `Signature`‑instansen i ett `using`‑block för att frigöra filhandtag. | +| Spara den signerade filen över originalkällan | Skriv alltid till en ny filsökväg (`outputPath`) för att bevara originaldokumentet. | + +--- + +## Fullt fungerande exempel + +Nedan är ett självständigt program som sätter ihop alla delar. Kopiera det till ett nytt konsolprojekt och kör det; konsolen kommer att rapportera framgång eller misslyckande. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Förväntad utdata** + +``` +Signature verified successfully. +``` + +Om konsolen skriver ut “Signing failed.” eller “Signature verification failed.”, dubbelkolla certifikatkonfigurationen och säkerställ att den anpassade hashen returnerar en byte‑array av förväntad storlek. + +--- + +## Slutsats + +Du vet nu hur du **skapar signaturalternativ** i C#, bifogar en **anpassad hash‑funktion** och **tillämpa digital signatur** på vilket stödjande dokument som helst. Handledningen täckte hela livscykeln: konfigurera alternativen, signera filen och verifiera resultatet. Genom att återanvända samma `SignatureOptions`‑instans kan du också **hur man konfigurerar signatur** för bilder, Word‑filer eller råa binärer. + +--- + +## Vad blir nästa? + +* Utforska ytterligare `SignatureOptions`‑egenskaper såsom visuella stämplar, tidsstämpelservrar och certifikatkedjor – dessa matchar nyckelordet **apply digital signature**. +* Experimentera med andra hash‑algoritmer (t.ex. Blake2b) genom att byta implementationen i `MyHash`. +* Integrera signeringsflödet i ett web‑API för att möjliggöra on‑the‑fly‑dokumentsignering – en naturlig utvidgning av **how to sign document** i en service‑orienterad arkitektur. + +Känn dig fri att anpassa koden efter dina egna säkerhetspolicyer och dela dina erfarenheter i kommentarerna. Lycka till med signeringen! + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närliggande ämnen som bygger på teknikerna som demonstrerats i denna guide. 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. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/programming-with-stamps-and-watermarks/_index.md b/pdf/swedish/net/programming-with-stamps-and-watermarks/_index.md index ab1020433c..4128ea591f 100644 --- a/pdf/swedish/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/swedish/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDFs handledningar "Programmering med stämplar och vattenstämplar" för | [Text i sidfoten på PDF-filen](./text-in-footer/) | Lär dig hur du lägger till text i sidfoten på en PDF-fil med Aspose.PDF för .NET. | | [Text i sidhuvudet på PDF-filen](./text-in-header/) | Lär dig lägga till textrubriker i PDF-filer med Aspose.PDF för .NET med den här steg-för-steg-handledningen. Förbättra dina dokument effektivt och ändamålsenligt. | | [Lägg till Bates-nummerering i PDF i C# – Komplett guide](./add-bates-numbering-pdf-in-c-complete-guide/) | Lär dig hur du lägger till Bates-nummerering i PDF-filer med Aspose.PDF för .NET i C# med en steg-för-steg-guide. | +| [Hur man ställer in Bates-nummereringsalternativ i C# – komplett guide](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Lär dig hur du konfigurerar Bates-nummereringsalternativ i PDF-filer med Aspose.PDF för .NET i C# med en komplett steg-för-steg-guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/swedish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..e51f531fa8 --- /dev/null +++ b/pdf/swedish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-08-14 +description: Hur man ställer in Bates‑numreringsalternativ i C# med GroupDocs. Följ + den här steg‑för‑steg‑handledningen för att lägga till anpassade prefix och startnummer + när du konverterar Word till PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: sv +lastmod: 2026-08-14 +og_description: Hur du snabbt ställer in Bates-nummereringsalternativ i C#. Den här + guiden visar hur du lägger till anpassade prefix och startnummer när du konverterar + Word till PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Hur man ställer in Bates‑nummereringsalternativ i C# – steg‑för‑steg‑handledning +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Hur man ställer in Bates-nummereringsalternativ i C# – komplett guide +url: /sv/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man ställer in Bates‑numreringsalternativ i C# – komplett guide + +Om du behöver **how to set bates numbering options** i C#, så guidar den här guiden dig genom de exakta stegen. Du kommer att lära dig hur du konfigurerar startnumret, lägger till ett prefix och tillämpar numreringen medan du konverterar ett Word‑dokument till PDF med hjälp av GroupDocs API. + +Dokumentbehandling kräver ofta unika identifierare på varje sida för juridiska eller arkiveringsändamål. I slutet av den här handledningen har du ett återanvändbart kodsnutt som du kan släppa in i vilket .NET‑projekt som helst, oavsett om du bygger ett verktyg för rättsligt stöd eller en automatiserad rapportgenerator. Inga externa verktyg behövs – bara GroupDocs.Conversion‑biblioteket och några rader C#. + +## Vad du behöver + +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) +* En giltig GroupDocs.Conversion‑licens (gratis provversion fungerar för testning) +* Ett exempel‑Word‑dokument (`input.docx`) som du vill numrera + +Dessa förutsättningar säkerställer att koden körs utan ytterligare konfiguration. + +## Så ställer du in Bates‑numreringsalternativ – översikt + +Kärnan i **how to set bates numbering options** ligger i tre objekt: + +1. `Document` – laddar källfilen. +2. `BatesNumberingOptions` – innehåller startnummer, prefix och andra formateringsdetaljer. +3. `AddBatesNumbering` – metoden som injicerar numreringen på varje sida. + +Att förstå varför varje del finns hjälper dig att anpassa lösningen till mer komplexa scenarier, såsom anpassade typsnitt eller flerspråkig numrering. + +## Steg 1: Installera GroupDocs.Conversion NuGet‑paketet + +Öppna en terminal i din lösningsmapp och kör: + +```bash +dotnet add package GroupDocs.Conversion +``` + +GroupDocs‑API‑et tillhandahåller `Document`‑klassen och `AddBatesNumbering`‑utökningmetoden som används senare i guiden. + +## Steg 2: Ladda källdokumentet + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Varför detta steg?* +Att ladda filen skapar en in‑memory‑representation som konverteringsmotorn kan manipulera. Utan en `Document`‑instans kan du inte applicera Bates‑numrering eller någon annan transformation. + +## Steg 3: Skapa Bates‑numreringsalternativen + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Varför detta steg?* +`BatesNumberingOptions` kapslar in alla inställningar du kan behöva när du **setting bates numbering options**. Genom att justera `StartNumber` och `Prefix` kan du anpassa utdata till ditt ärendehanteringssystem. `Position`‑egenskapen styr den visuella placeringen, vilket ofta är ett efterlevnadskrav. + +## Steg 4: Tillämpa Bates‑numrering på dokumentet + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering`‑metoden går igenom varje sida i den laddade `Document` och infogar den konfigurerade strängen. Eftersom metoden arbetar på in‑memory‑representationen kan du kedja ytterligare bearbetningssteg (t.ex. vattenstämpel) innan du sparar. + +## Steg 5: Konvertera och spara resultatet som PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Varför detta steg?* +Att spara som PDF är ett vanligt slutformat för juridiska dokument. `PdfConvertOptions`‑objektet låter dig finjustera utdata, men det krävs inte för grundläggande numrering. `Save`‑anropet skriver den fullt numrerade PDF‑filen till disk. + +## Komplett, körbart exempel + +När allt sätts ihop, här är ett fristående konsolprogram som du kan kompilera och köra: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Förväntat resultat** + +När programmet körs skapas `output.pdf` där varje sida visar en etikett som `CASE-1000`, `CASE-1001` osv., placerad i högra sidfoten. Öppna PDF‑filen i någon visare för att verifiera att siffrorna visas som avsett. + +## Vanliga fallgropar och bästa praxis + +| Problem | Varför det händer | Hur man undviker det | +|---------|-------------------|----------------------| +| **Relativa sökvägar orsakar `FileNotFoundException`** | Arbetskatalogen för ett konsolprogram kan skilja sig från Visual Studios. | Använd absoluta sökvägar eller `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numrering överlappar befintliga sidfötter** | Om källdokumentet redan har innehåll i det valda sidfotområdet kan den nya siffran döljas. | Välj en annan `Position` (t.ex. `HeaderLeft`) eller justera källmall. | +| **Stora dokument är långsamma** | Bates‑numrering itererar över varje sida; minnesanvändning ökar med filstorleken. | Bearbeta dokumentet i delar med `Document.Split` om du överskrider 500 sidor. | +| **Licensutgång** | Gratisprovversionen av GroupDocs går ut efter 30 dagar, vilket orsakar ett undantag på `AddBatesNumbering`. | Använd en giltig licensnyckel innan dokumentet laddas: `License license = new License(); license.SetLicense("license.lic");`. | + +**Proffstips:** Om du behöver ett annat nummerformat per ärende (t.ex. `2023-CASE-001`), bygg prefixet dynamiskt innan du skapar `BatesNumberingOptions`. + +## Utöka lösningen + +Samma **Bates numbering C#**‑metod fungerar med andra källformat såsom `.txt`, `.html` eller till och med bilder. Ändra bara filändelsen när du konstruerar `Document`‑objektet, så hanterar konverteringsmotorn resten. + +Du kan också kombinera **document conversion C#** med OCR för skannade PDF‑filer: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Slutsats + +Du vet nu **how to set bates numbering options** i C# från början till slut. Genom att skapa ett `BatesNumberingOptions`‑objekt, applicera det med `AddBatesNumbering` och spara resultatet som PDF kan du automatisera produktionen av juridiskt korrekta, unikt identifierade dokument. + +Härifrån kan du utforska relaterade ämnen som **C# PDF generation**, **document conversion C#**, eller avancerade **GroupDocs API**‑funktioner som vattenstämpling och digitala signaturer. Experimentera med olika prefix, positioner och nummerformat för att passa ditt arbetsflöde. + +Lycka till med kodandet! + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker nära beslä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 implementationsmetoder i dina egna projekt. + +- [Add Bates Numbering PDF in C# – Complete Guide](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [How to Add and Customize Page Numbers in PDFs Using Aspose.PDF for .NET | Document Manipulation Guide](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [How to Add a Text Stamp Footer in PDFs Using Aspose.PDF for .NET: A Step‑By‑Step Guide](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/annotations/_index.md b/pdf/thai/net/annotations/_index.md index f5f8bcb5b6..d914c34b91 100644 --- a/pdf/thai/net/annotations/_index.md +++ b/pdf/thai/net/annotations/_index.md @@ -35,6 +35,7 @@ - [ตั้งค่ารูปแบบคำอธิบายข้อความแบบอิสระ](./setfreetextannotationformatting/) | เรียนรู้วิธีการตั้งค่าการจัดรูปแบบคำอธิบายข้อความอิสระในเอกสาร PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ - [ขีดฆ่าคำ](./strikeoutwords/) | เรียนรู้วิธีการขีดฆ่าคำใน PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนที่ครอบคลุมนี้ พัฒนาทักษะการแก้ไขเอกสารของคุณ - | [อัปเดตคำอธิบาย PDF ข้อความฟรี](./updatefreetextannotation/) เรียนรู้วิธีอัปเดตคำอธิบายข้อความอิสระในเอกสาร PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ +| [วาดสี่เหลี่ยมบน PDF – คำแนะนำขั้นตอนโดยขั้นตอน C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | เรียนรู้วิธีวาดสี่เหลี่ยมบนไฟล์ PDF ด้วย C# อย่างละเอียดในขั้นตอนต่อขั้นตอน | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/thai/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..fd6609e62d --- /dev/null +++ b/pdf/thai/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: วาดสี่เหลี่ยมบน PDF อย่างรวดเร็วด้วย C#. เรียนรู้วิธีกำหนดขนาดสี่เหลี่ยมและเพิ่มรูปทรงลงในหน้า + PDF เพียงไม่กี่บรรทัด. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: th +lastmod: 2026-08-14 +og_description: วาดสี่เหลี่ยมบน PDF ด้วย C# ในไม่กี่วินาที คู่มือนี้แสดงวิธีกำหนดขนาดสี่เหลี่ยม + เพิ่มรูปทรง และตรวจสอบขอบหน้าสำหรับกราฟิก PDF ที่เชื่อถือได้ +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: วาดสี่เหลี่ยมบน PDF – การสอน C# อย่างสมบูรณ์ +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: วาดสี่เหลี่ยมบน PDF – คู่มือ C# ทีละขั้นตอน +url: /th/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วาดสี่เหลี่ยมบน pdf – คำแนะนำ C# ฉบับสมบูรณ์ + +หากคุณต้องการ **วาดสี่เหลี่ยมบน pdf** ด้วย C# คู่มือนี้จะแสดงวิธีแก้ไขที่กระชับและพร้อมใช้งานในระดับการผลิต คุณจะได้เห็นอย่างชัดเจนว่า **วิธีกำหนดขนาดสี่เหลี่ยม** อย่างไร ตรวจสอบให้แน่ใจว่ารูปร่างพอดี และเพิ่มลงในหน้าโดยใช้การเรียกเมธอดเดียว + +บทเรียนนี้ครอบคลุมทุกอย่างตั้งแต่การสร้างเอกสาร PDF ไปจนถึงการเรนเดอร์สี่เหลี่ยม ดังนั้นคุณสามารถคัดลอก‑วางโค้ดลงในโปรเจกต์ของคุณและเห็นผลลัพธ์ได้ทันที ไม่ต้องอ้างอิงเอกสารภายนอก—เพียงทำตามขั้นตอนด้านล่าง + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน โปรดตรวจสอบว่าคุณมี: + +* .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานได้กับ .NET Framework 4.7+) +* แพ็กเกจ NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* ความเข้าใจพื้นฐานเกี่ยวกับไวยากรณ์ C# +* IDE เช่น Visual Studio หรือ VS Code + +> **เคล็ดลับ:** ใช้ไลเซนส์ทดลองฟรีของ Aspose.PDF สำหรับการทดลองอย่างรวดเร็ว; จะมีลายน้ำเล็ก ๆ ปรากฏแต่คุณสามารถทดสอบฟีเจอร์ทั้งหมดได้ + +## วิธีวาดสี่เหลี่ยมบน PDF ด้วย C# + +หัวใจของงานคือการสร้าง `RectangleShape` ตั้งค่าขนาดและเส้นขอบ แล้วผูกเข้ากับ `Page` ส่วนหัวข้อ H2 ด้านล่างนี้มีคีย์เวิร์ดหลักเพื่อให้สอดคล้องกับข้อกำหนด SEO + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### คำอธิบายของแต่ละขั้นตอน + +| ขั้นตอน | ทำไมจึงสำคัญ | +|------|----------------| +| **1️⃣ สร้างเอกสาร PDF ใหม่** | เริ่มต้นคอนเทนเนอร์ที่จะเก็บหน้าและกราฟิก | +| **2️⃣ เพิ่มหน้าว่าง** | คุณต้องมีอ็อบเจกต์ `Page` เนื่องจากรูปทรงจะถูกผูกกับหน้า ไม่ได้ผูกโดยตรงกับเอกสาร | +| **3️⃣ กำหนดขอบเขตของสี่เหลี่ยม** | นี้คือที่คุณ **วิธีกำหนดขนาดสี่เหลี่ยม** ตัวสร้าง `Rectangle` รับค่า `x`, `y`, `width` และ `height` เป็นหน่วยพอยต์ (1 pt = 1/72 in) | +| **4️⃣ สร้างรูปทรงสี่เหลี่ยม** | `RectangleShape` เป็นคลาสของ Aspose ที่ทำการเรนเดอร์สี่เหลี่ยม การตั้งค่า `StrokeColor` กำหนดเส้นขอบ; คุณยังสามารถตั้งค่า `FillColor` เพื่อเติมสีเต็มได้ | +| **5️⃣ ตรวจสอบขอบเขตของหน้า** | `CheckShapeBoundary` จะโยนข้อยกเว้นหากสี่เหลี่ยมเกินขนาดหน้ากระดาษ ป้องกัน PDF ที่ผิดรูป | +| **6️⃣ เพิ่มรูปทรงลงในหน้า** | รูปทรงจะกลายเป็นส่วนหนึ่งของสตรีมเนื้อหาของหน้า | +| **7️⃣ บันทึก PDF** | เก็บเอกสารลงไฟล์ที่คุณสามารถเปิดด้วยโปรแกรมอ่าน PDF ใดก็ได้ | + +ไฟล์ `RectangleDemo.pdf` ที่ได้จะมีสี่เหลี่ยมสีดำอยู่ที่มุมบน‑ซ้ายของหน้า มีความกว้าง 500 pt และความสูง 700 pt อย่างแม่นยำ + +![ตัวอย่างการวาดสี่เหลี่ยมบน pdf](https://example.com/rectangle-demo.png "ตัวอย่างการวาดสี่เหลี่ยมบน pdf") + +*ข้อความอธิบายภาพ: ตัวอย่างการวาดสี่เหลี่ยมบน pdf แสดงสี่เหลี่ยมสีดำที่มุมบนซ้ายของหน้า PDF* + +## วิธีกำหนดขนาดสี่เหลี่ยมสำหรับขนาดหน้าต่าง ๆ + +โค้ดส่วนข้างบนใช้ค่าคงที่ (`500 x 700`) ในแอปพลิเคชันจริงคุณมักต้องการให้สี่เหลี่ยมปรับตามความกว้างและความสูงของหน้า + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**ประเด็นสำคัญ:** + +* ใช้ `page.PageInfo.Width` และ `Height` เพื่ออ่านขนาดหน้าจริง +* การคูณด้วยแฟกเตอร์ (เช่น `0.8f`) ทำให้คุณระบุขนาดเป็นเปอร์เซ็นต์ของหน้า +* การจัดกึ่งกลางทำได้โดยลบขนาดสี่เหลี่ยมจากขนาดหน้าแล้วหารครึ่งส่วนที่เหลือ + +## ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง + +| ปัญหา | ทำไมถึงเกิด | วิธีแก้ | +|---------|----------------|-----| +| สี่เหลี่ยมขยายเกินหน้ากระดาษ | กำหนดค่าคงที่ที่ใหญ่กว่าขนาดหน้า | เรียก `page.CheckShapeBoundary` **ก่อน**เพิ่มรูปทรง; ปรับขนาดหากเกิดข้อยกเว้น | +| เส้นขอบไม่ปรากฏ | `StrokeColor` อยู่ค่าเริ่มต้น (`Color.Empty`) | ตั้งค่า `StrokeColor` อย่างชัดเจน (เช่น `Color.Black`) | +| สี่เหลี่ยมปรากฏอยู่นอกหน้าจอ | พิกัดเริ่มจากมุมล่าง‑ซ้ายในระบบ PDF; ใช้พิกัดแบบมุมบน‑ซ้ายของหน้าจอทำให้พลิก | จำไว้ว่าจุดกำเนิด `(0,0)` อยู่ที่มุมล่าง‑ซ้าย ปรับค่า `y` ตามหรือใช้ `pageHeight - desiredY` | +| ความหนาเส้นไม่คาดคิด | ความหนาเส้นเริ่มต้นอาจบางเกินสำหรับการพิมพ์ | ตั้งค่า `rectangleShape.LineWidth = 2;` เพื่อเพิ่มความหนา | + +## การขยายตัวอย่าง + +เมื่อคุณสามารถ **วาดสี่เหลี่ยมบน pdf** ได้แล้ว คุณสามารถเพิ่มรูปทรงอื่น ๆ ได้อย่างง่ายดาย: + +* **EllipseShape** – สำหรับวงกลมหรือรูปรี +* **PolygonShape** – สำหรับรูปหลายเหลี่ยมที่กำหนดเอง +* **TextFragment** – เพื่อใส่ข้อความอธิบายสี่เหลี่ยมของคุณ + +รูปทรงทั้งหมดใช้กระบวนการเดียวกัน: กำหนดขอบเขต, ตั้งค่าลักษณะ, ตรวจสอบขอบเขต, แล้วเพิ่มลงในหน้า + +## โปรแกรมเต็มที่สามารถรันได้ + +ด้านล่างเป็นโปรแกรมเต็มที่รวมตัวอย่างสี่เหลี่ยมพื้นฐานและตัวอย่างการกำหนดขนาดแบบไดนามิก คัดลอกไปยังโปรเจกต์คอนโซลใหม่, เรียกคืนแพ็กเกจ NuGet `Aspose.PDF`, แล้วรัน + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** +เปิดไฟล์ `CombinedRectangles.pdf` คุณจะเห็นสี่เหลี่ยมสีดำที่ยึดติดที่มุมล่าง‑ซ้ายและสี่เหลี่ยมสีน้ำเงินเข้มที่อยู่กึ่งกลางพร้อมการเติมสีเหลืองอ่อน ทั้งสองสี่เหลี่ยมเคารพระยะขอบของหน้า + +## สรุป + +ตอนนี้คุณรู้วิธี **วาดสี่เหลี่ยมบน pdf** ด้วย C# และรู้ **วิธีกำหนดขนาดสี่เหลี่ยม** อย่างแม่นยำสำหรับการออกแบบแบบคงที่และแบบตอบสนอง วิธีนี้ใช้ `RectangleShape` ของ Aspose.PDF, การตรวจสอบขอบเขต, และคณิตศาสตร์ง่าย ๆ เพื่อปรับให้เข้ากับขนาดหน้ากระดาษใด ๆ + +ต่อไปคุณอาจสำรวจ: + +* การเพิ่ม **สีเติม** และ **สไตล์เส้น** (เส้นประ, จุด) – คีย์เวิร์ดรอง: วิธีกำหนดขนาดสี่เหลี่ยมพร้อมสไตล์ +* การรวมหลายรูปทรงลงใน `Page` เพื่อสร้างแผนภูมิหรือแบบฟอร์ม +* การส่งออก PDF ไปยังสตรีมสำหรับ API เว็บแทนการบันทึกลงดิสก์ + +ลองเปลี่ยนขนาด, สี, และตำแหน่งต่าง ๆ เพื่อเชี่ยวชาญการวาดกราฟิก PDF ในแอปพลิเคชัน .NET ของคุณ ขอให้เขียนโค้ดสนุก! + +## สิ่งที่คุณควรเรียนต่อ + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีโค้ดตัวอย่างทำงานครบถ้วนพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยคุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานทางเลือกในโปรเจกต์ของคุณเอง + +- [How to Customize PDFs with Aspose.PDF for .NET: Set Page Margins and Draw Lines](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [How to Add Page Stamps in PDFs Using Aspose.PDF for .NET: A Complete Guide](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [How to Add Page Number Stamps in PDFs Using Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/conversion-export/_index.md b/pdf/thai/net/conversion-export/_index.md index 412b7f0c70..05a8173768 100644 --- a/pdf/thai/net/conversion-export/_index.md +++ b/pdf/thai/net/conversion-export/_index.md @@ -224,6 +224,9 @@ ### [การแปลง PDF เป็น HTML ด้วย Aspose.PDF สำหรับ .NET](./pdf-to-html-conversion-aspose-dot-net/) บทช่วยสอนเกี่ยวกับโค้ดสำหรับ Aspose.PDF Net +### [บันทึก PDF เป็น HTML และแปลงเป็น PDF/X‑4 ด้วย Aspose.PDF ใน C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +เรียนรู้วิธีบันทึก PDF เป็น HTML แล้วแปลงเป็น PDF/X‑4 ด้วย Aspose.PDF ใน C# + ### [การแปลง PDF เป็น TIFF ใน .NET โดยใช้ Aspose.PDF: คำแนะนำทีละขั้นตอน](./pdf-to-tiff-conversion-aspose-pdf-net/) เรียนรู้วิธีการแปลงเอกสาร PDF เป็นภาพ TIFF โดยใช้ Aspose.PDF สำหรับ .NET เชี่ยวชาญความลึกสีที่กำหนดเองและเทคนิคการประมวลผลภาพขั้นสูง diff --git a/pdf/thai/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/thai/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..fab3db7d67 --- /dev/null +++ b/pdf/thai/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-14 +description: บันทึก PDF เป็น HTML และแปลง PDF เป็น PDF/X‑4 ด้วย Aspose.PDF สำหรับ + C# โค้ดแบบขั้นตอนแสดงการส่งออกเป็น HTML, รายการลายเซ็น, และการแก้ไขสถานะกราฟิก +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: th +lastmod: 2026-08-14 +og_description: บันทึก PDF เป็น HTML และแปลง PDF เป็น PDF/X‑4 ด้วย Aspose.PDF สำหรับ + C# ตามคู่มือฉบับเต็มนี้เพื่อส่งออก HTML แสดงรายการลายเซ็นและแก้ไขสถานะกราฟิก +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: บันทึก PDF เป็น HTML และแปลงเป็น PDF/X‑4 ด้วย Aspose.PDF – คู่มือ C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: บันทึก PDF เป็น HTML และแปลงเป็น PDF/X‑4 ด้วย Aspose.PDF ใน C# +url: /th/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + +หากคุณต้องการ **บันทึก PDF เป็น HTML** Aspose.Pdf ทำให้กระบวนการเป็นเรื่องง่าย คู่มือฉบับนี้ยังแสดงวิธี **แปลง PDF เป็น PDF/X‑4**, รายชื่อฟิลด์ลายเซ็น, และเพิ่ม ExtGState แบบกำหนดเอง เพื่อให้คุณได้เวิร์กโฟลว์ครบวงจร + +คุณจะได้เรียนรู้วิธี: + +* ส่งออก PDF เป็น HTML ที่สะอาดโดยข้ามภาพเรสเตอร์ +* แปลงเอกสาร PDF ไปเป็นมาตรฐาน PDF/X‑4 สำหรับการพิมพ์ที่พร้อมใช้งาน +* แสดงรายการฟิลด์ลายเซ็นทั้งหมดใน PDF +* แทรกกราฟิกสเตต (ExtGState) แบบกำหนดเองในหน้าที่หนึ่ง + +โค้ดทั้งหมดทำงานบน .NET 6 หรือใหม่กว่าและต้องการแพคเกจ NuGet ของ Aspose.Pdf for .NET + +## Prerequisites + +| ข้อกำหนด | เหตุผล | +|-------------|--------| +| .NET 6 SDK หรือใหม่กว่า | ให้ runtime สำหรับตัวอย่าง C# | +| Visual Studio 2022 (หรือ IDE C# ใดก็ได้) | ช่วยให้แก้ไขและดีบักได้ง่าย | +| Aspose.Pdf for .NET (v23.12 หรือใหม่กว่า) | จัดเตรียมคลาส `Document`, `PdfFormatConversionOptions`, และ `HtmlSaveOptions` ที่ใช้ในบทเรียน | +| ไฟล์ PDF ตัวอย่าง (`sample.pdf`) | เอกสารต้นฉบับที่จะถูกประมวลผล | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +โปรแกรมทำงานตามหกขั้นตอนเชิงตรรกะ: + +1. โหลด PDF ต้นฉบับ +2. แสดงชื่อฟิลด์ลายเซ็นทั้งหมด +3. **แปลง PDF เป็น PDF/X‑4** และบันทึกผลลัพธ์ +4. **บันทึก PDF เป็น HTML** โดยข้ามภาพเรสเตอร์ +5. เพิ่ม ExtGState (กราฟิกสเตต) แบบกำหนดเองในหน้าที่หนึ่ง +6. บันทึก PDF ที่แก้ไขพร้อมกราฟิกสเตตใหม่ + +แต่ละขั้นตอนจะอธิบายด้านล่าง พร้อมโค้ดเต็มและเหตุผลที่เลือกวิธีนั้น + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*ทำไมจึงสำคัญ*: `Document` แสดงถึงไฟล์ PDF ทั้งหมด การโหลดเพียงครั้งเดียวทำให้คุณสามารถใช้วัตถุเดียวกันสำหรับการดำเนินการต่อไปทั้งหมด ซึ่งช่วยลดภาระ I/O + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*ทำไมจึงสำคัญ*: การรู้ชื่อฟิลด์ลายเซ็นเป็นสิ่งจำเป็นเมื่อคุณต้องการตรวจสอบ, ลบ, หรือแทนที่ลายเซ็นดิจิทัลในภายหลัง คอลเลกชัน `Signatures` ให้มุมมองแบบอ่านอย่างเร็วของฟิลด์ + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**ประเด็นสำคัญ** + +* `PdfStandard.PdfX4` บอกให้ Aspose.Pdf ฝังทรัพยากรที่จำเป็นทั้งหมด (ฟอนต์, โปรไฟล์สี) และบังคับใช้ข้อจำกัดของ PDF/X‑4 +* การแปลงทำงานในหน่วยความจำ; มีเพียงไฟล์สุดท้ายที่บันทึกลงดิสก์ ทำให้กระบวนการเร็ว + +> **เคล็ดลับมืออาชีพ:** ตรวจสอบผลลัพธ์ด้วยตัวตรวจสอบ PDF/X‑4 (เช่น Adobe Preflight) หากเวิร์กโฟลว์ต่อเนื่องของคุณต้องการความสอดคล้องอย่างเคร่งครัด + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**ทำไมคุณอาจต้องการเช่นนี้**: ผลลัพธ์ HTML มีประโยชน์สำหรับการแสดงตัวอย่างบนเว็บหรือการทำดัชนีเนื้อหา การข้ามภาพเรสเตอร์ (`SkipRasterImages = true`) ทำให้ HTML มีน้ำหนักเบาและเพิ่มความเร็วในการโหลด โดยเฉพาะเมื่อ PDF ต้นฉบับมีสแกนความละเอียดสูง + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*คำอธิบาย*: วัตถุ **ExtGState** ควบคุมความโปร่งแสง, โหมดผสม, และพารามิเตอร์กราฟิกอื่น ๆ การเพิ่ม `GS0` ทำให้คุณสามารถอ้างอิงสเตตนี้ในสตรีมเนื้อหาในภายหลัง (เช่น สำหรับการซ้อนทับแบบกึ่งโปร่งแสง) โค้ดใช้ COS API ระดับต่ำเนื่องจาก Aspose.Pdf ไม่ได้เปิดให้ใช้ wrapper ระดับสูงสำหรับการสร้าง ExtGState + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +ไฟล์สุดท้าย (`sample_with_extgstate.pdf`) มี: + +* ทุกหน้าต้นฉบับและเนื้อหา +* เวอร์ชัน PDF/X‑4 ที่สอดคล้อง (`sample_pdfx4.pdf`) +* การแสดงผล HTML โดยไม่มีภาพเรสเตอร์ (`sample.html`) +* ExtGState แบบกำหนดเอง (`GS0`) ที่แนบกับทรัพยากรของหน้าที่หนึ่ง + +### ผลลัพธ์คอนโซลที่คาดหวัง + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +หาก PDF ต้นฉบับไม่มีลายเซ็น ลูปจะไม่พิมพ์อะไรเลยแต่ยังคงดำเนินการต่อโดยไม่มีข้อผิดพลาด + +## Common variations and edge cases + +| สถานการณ์ | การปรับเปลี่ยน | +|-----------|------------| +| **PDF ไม่มีหน้า** | ตรวจสอบ `doc.Pages.Count` ก่อนเข้าถึง `doc.Pages[1]` เพื่อหลีกเลี่ยง `IndexOutOfRangeException`. | +| **คุณต้องการ PDF/A‑2b แทน PDF/X‑4** | เปลี่ยน `PdfStandard.PdfX4` เป็น `PdfStandard.PdfA2b` ใน `PdfFormatConversionOptions`. | +| **คุณต้องการเก็บภาพเรสเตอร์** | ตั้งค่า `SkipRasterImages = false` (หรือไม่ระบุ property) ใน `HtmlSaveOptions`. | +| **หลายวัตถุ ExtGState** | ใช้คีย์ที่ไม่ซ้ำ (`GS1`, `GS2`, …) เมื่อเพิ่มลงใน `extGStateDict`. | +| **PDF ขนาดใหญ่ (หลายร้อย MB)** | เปิดใช้งาน `doc.OptimizeResources = true` ก่อนบันทึกเพื่อลดการใช้หน่วยความจำ. | + +## Full source code (runnable) + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // ------------------------------------------------- + // Step 1: Load the PDF document + // ------------------------------------------------- + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); + + // ------------------------------------------------- + // Step 2: List all signature field names + // ------------------------------------------------- + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); + + // ------------------------------------------------- + // Step 3: Convert the PDF to PDF/X‑4 standard + // ------------------------------------------------- + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); + + // ------------------------------------------------- + // Step 4: Save the PDF as HTML while skipping raster images + // ------------------------------------------------- + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); + + // ------------------------------------------------- + // Step 5: Add a custom ExtGState (graphics state) to the first page + // ------------------------------------------------- + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + var new + + +## What Should You Learn Next? + +บทเรียนต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลรวมตัวอย่างโค้ดที่ทำงานได้เต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานทางเลือกในโปรเจกต์ของคุณ + +- [คู่มือฉบับสมบูรณ์: แปลง PDF เป็น HTML ด้วย Aspose.PDF .NET พร้อมกลยุทธ์แบบกำหนดเอง](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [แปลง PDF เป็น HTML พร้อม URL รูปภาพแบบกำหนดเองโดยใช้ Aspose.PDF .NET: คู่มือฉบับสมบูรณ์](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [การแปลง PDF เป็น HTML ด้วย Aspose.PDF .NET: บันทึกรูปภาพเป็น PNG ภายนอก](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/programming-with-forms/_index.md b/pdf/thai/net/programming-with-forms/_index.md index 02df045576..2ac6314656 100644 --- a/pdf/thai/net/programming-with-forms/_index.md +++ b/pdf/thai/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ | [ตั้งค่าคำอธิบายปุ่มตัวเลือก](./set-radio-button-caption/) เรียนรู้วิธีตั้งค่าคำอธิบายปุ่มตัวเลือกใน PDF โดยใช้ Aspose.PDF สำหรับ .NET คำแนะนำทีละขั้นตอนนี้จะแนะนำคุณตลอดการโหลด แก้ไข และบันทึกแบบฟอร์ม PDF ของคุณ - | [กล่องข้อความ](./text-box/) | ค้นพบวิธีการเพิ่มกล่องข้อความลงใน PDF ได้อย่างง่ายดายโดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ ปรับปรุงการโต้ตอบของผู้ใช้ | | [วิธีสร้าง PDF ด้วย Aspose – เพิ่มฟิลด์ฟอร์มและหน้า](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | เรียนรู้วิธีสร้าง PDF พร้อมเพิ่มฟิลด์ฟอร์มและหน้าต่างๆ ด้วย Aspose.NET ในบทช่วยสอนนี้ | +| [สร้างฟิลด์ฟอร์ม PDF ด้วย C# – คู่มือทีละขั้นตอน](./create-pdf-form-field-in-c-step-by-step-guide/) | เรียนรู้วิธีสร้างฟิลด์ฟอร์ม PDF ด้วย C# อย่างละเอียดด้วย Aspose.PDF สำหรับ .NET | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/thai/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..e7f15abbc9 --- /dev/null +++ b/pdf/thai/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-14 +description: สร้างฟิลด์ฟอร์ม PDF อย่างรวดเร็วด้วย C# เรียนรู้วิธีเพิ่มกล่องข้อความลงใน + PDF และแก้ไข PDF เพื่อรวมกล่องข้อความโดยใช้ Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: th +lastmod: 2026-08-14 +og_description: สร้างฟิลด์ฟอร์ม PDF ด้วย C# บทเรียนนี้แสดงวิธีเพิ่มกล่องข้อความลงใน + PDF และแก้ไข PDF เพื่อรวมกล่องข้อความโดยใช้ Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: สร้างฟิลด์ฟอร์ม PDF ใน C# – คู่มือการเขียนโปรแกรมครบถ้วน +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: สร้างฟิลด์ฟอร์ม PDF ใน C# – คู่มือขั้นตอนโดยละเอียด +url: /th/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สร้างฟิลด์ฟอร์ม PDF ใน C# – คู่มือขั้นตอนโดยละเอียด + +หากคุณต้องการ **สร้างฟิลด์ฟอร์ม PDF** ในเอกสาร คำแนะนำนี้จะพาคุณผ่านกระบวนการทั้งหมด คุณจะได้เห็นวิธี **เพิ่มกล่องข้อความลงในหน้า PDF** และวิธี **แก้ไข PDF เพื่อรวมกล่องข้อความ** ด้วยไลบรารี Aspose.PDF สำหรับ .NET + +การทำงานกับฟอร์ม PDF เป็นความต้องการทั่วไปสำหรับระบบใบแจ้งหนี้, แบบสำรวจ หรือกระบวนการทำงานใด ๆ ที่ต้องเก็บข้อมูลจากผู้ใช้ เมื่อจบบทเรียนนี้คุณจะมีโค้ดสแนปช็อตที่สามารถสร้างฟิลด์กล่องข้อความที่ทำงานได้เต็มรูปแบบ วางตำแหน่งตามที่ต้องการ และบันทึก PDF ที่อัปเดต—ทั้งหมดโดยไม่ต้องออกจากโปรเจกต์ C# ของคุณ + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน ให้ตรวจสอบว่าคุณมี: + +* .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานกับ .NET Framework 4.7+) +* Visual Studio 2022 หรือ IDE ใด ๆ ที่รองรับ C# +* ไลเซนส์ Aspose.PDF for .NET ที่ใช้งานได้ (รุ่นทดลองฟรีใช้ได้สำหรับการพัฒนา) +* ไฟล์ PDF ชื่อ `input.pdf` ที่วางไว้ในโฟลเดอร์ที่รู้จัก (บทแนะนำใช้ `YOUR_DIRECTORY` เป็นตัวแทน) + +> **เคล็ดลับ:** หากคุณยังไม่มีไลเซนส์ คุณสามารถขอคีย์ชั่วคราวจากเว็บไซต์ของ Aspose; ไลบรารีจะทำงานในโหมดประเมินผลโดยไม่ต้องแก้ไขโค้ด + +## วิธีสร้างฟิลด์ฟอร์ม PDF ใน C# (ภาพรวม) + +1. โหลดเอกสาร PDF ที่มีอยู่ +2. สร้าง `TextBoxField` และกำหนดชื่อและลักษณะการแสดงผล +3. เพิ่ม widget annotation ที่กำหนดสี่เหลี่ยมมุมมองบนหน้าที่ต้องการ +4. แทรกฟิลด์ลงในคอลเลกชันฟอร์มของเอกสาร +5. บันทึก PDF ที่แก้ไขแล้ว + +แต่ละขั้นตอนจะอธิบายรายละเอียดต่อไป พร้อมตัวอย่างโค้ดเต็มรูปแบบและเหตุผลที่อยู่เบื้องหลังการเรียก API + +## ขั้นตอนที่ 1: โหลดเอกสาร PDF + +การดำเนินการแรกคืออ่าน PDF ต้นฉบับ Aspose.PDF แทนไฟล์ PDF ด้วยคลาส `Document` การโหลดเอกสารทำให้คุณเข้าถึงหน้า, คอลเลกชันฟอร์ม, และโครงสร้างอื่น ๆ + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**ทำไมจึงสำคัญ:** +การโหลดไฟล์จะสร้างโมเดล PDF ในหน่วยความจำ ทำให้คุณสามารถเพิ่ม, ลบ หรือแก้ไขอ็อบเจ็กต์ได้โดยไม่ทำให้ไฟล์ต้นฉบับเสียหาย วัตถุ `Document` ยังเปิดเผยคุณสมบัติ `Form` ซึ่งเป็นที่ที่คุณจะ **เพิ่มกล่องข้อความลงใน PDF** ในขั้นตอนต่อไป + +## ขั้นตอนที่ 2: สร้างฟิลด์กล่องข้อความ + +ฟิลด์กล่องข้อความเป็นประเภทฟิลด์ฟอร์มที่ให้ผู้ใช้พิมพ์ข้อความอิสระ ใน Aspose.PDF คุณสร้างได้โดยสร้างอินสแตนซ์ของ `TextBoxField` พร้อมหน้าที่เป้าหมายและสี่เหลี่ยมที่กำหนดขนาดเริ่มต้นของ widget + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**ทำไมจึงสำคัญ:** +* `PartialName` คือคีย์ที่เครื่องมือประมวลผลฟอร์ม (เช่น Adobe Acrobat, ตัวแยกวิเคราะห์ฝั่งเซิร์ฟเวอร์) ใช้เพื่อดึงค่าที่ผู้ใช้กรอก +* สี่เหลี่ยมที่คุณส่งไปนี้กำหนดขนาด *เริ่มต้น* ของ widget; คุณสามารถปรับตำแหน่งการแสดงผลได้ภายหลังด้วย widget annotation (ขั้นตอนถัดไป) +* การตั้งค่า `DefaultAppearance` ทำให้ข้อความภายในกล่องแสดงผลอย่างสม่ำเสมอในทุก viewer + +## ขั้นตอนที่ 3: กำหนด widget annotation ที่มองเห็นได้ + +ฟิลด์ฟอร์มสามารถมี **widget annotation** หนึ่งหรือหลายตัวที่ควบคุมตำแหน่งที่ฟิลด์ปรากฏบนแต่ละหน้า โดยการเพิ่ม widget คุณสามารถวางฟิลด์ตรรกะเดียวกันในตำแหน่งต่าง ๆ หรือแม้กระทั่งหลายหน้า + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**ทำไมจึงสำคัญ:** +สี่เหลี่ยมของ widget กำหนดพิกัดบนหน้าจอที่ผู้ใช้จะเห็น หากข้ามขั้นตอนนี้ ฟิลด์อาจมีอยู่ในโครงสร้างข้อมูลของ PDF แต่จะไม่ปรากฏต่อผู้ใช้ การเพิ่ม widget คือขั้นตอนที่ทำให้ **เพิ่มกล่องข้อความลงใน PDF** จริง ๆ + +## ขั้นตอนที่ 4: เพิ่มฟิลด์ที่กำหนดค่าแล้วลงในฟอร์มของเอกสาร + +เมื่อ `TextBoxField` ถูกกำหนดค่าอย่างครบถ้วนแล้ว คุณต้องลงทะเบียนฟิลด์นี้กับคอลเลกชันฟอร์มของ PDF การทำเช่นนี้ทำให้ฟิลด์เป็นส่วนหนึ่งของฟอร์มแบบโต้ตอบและรับประกันว่าจะถูกบันทึก + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**ทำไมจึงสำคัญ:** +หากไม่เพิ่มฟิลด์ลงใน `pdfDocument.Form` ตัวอ่าน PDF จะละเลย widget annotation และข้อมูลฟิลด์จะไม่ถูกส่งออก บรรทัดนี้สรุปการดำเนินการ **แก้ไข PDF เพื่อรวมกล่องข้อความ** ให้เสร็จสมบูรณ์ + +## ขั้นตอนที่ 5: บันทึก PDF ที่อัปเดตแล้ว + +สุดท้ายให้เขียนการเปลี่ยนแปลงกลับไปยังดิสก์ คุณสามารถเขียนทับไฟล์เดิมหรือสร้างไฟล์ใหม่; ตัวอย่างนี้บันทึกเป็น `output.pdf` + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +เมื่อคุณเปิด `output.pdf` ด้วย Adobe Acrobat Reader จะเห็นกล่องข้อความสี่เหลี่ยมที่มีป้ายว่า “Comments” บนหน้า 2 ผู้ใช้สามารถคลิกเข้าไปพิมพ์ข้อความและข้อความที่กรอกจะเป็นส่วนหนึ่งของข้อมูลฟอร์ม PDF + +## ตัวอย่างทำงานเต็มรูปแบบ + +รวมทุกส่วนเข้าด้วยกัน นี่คือโปรแกรมที่พร้อมรัน คัดลอกไปยังโปรเจกต์คอนโซลใหม่, แทนที่ `YOUR_DIRECTORY` ด้วยเส้นทางโฟลเดอร์จริง, แล้วรัน + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** +เมื่อรันโปรแกรมจะพิมพ์บรรทัดยืนยันสองบรรทัดบนคอนโซล การเปิด `output.pdf` จะแสดงกล่องข้อความบนหน้า 2 ที่ผู้ใช้สามารถพิมพ์ความคิดเห็นได้ เมื่อฟอร์มถูกส่ง (เช่น ผ่านปุ่ม “Submit” ของ Adobe Acrobat) ชื่อฟิลด์ `Comments` จะปรากฏในข้อมูล FDF หรือ XFDF ที่ส่งออก + +## ความแปรผันทั่วไปและกรณีขอบ + +| สถานการณ์ | วิธีปรับโค้ด | +|-----------|--------------| +| **เพิ่มฟิลด์ไปยังหน้าที่ต่างกัน** | เปลี่ยน `pdfDocument.Pages[1]` เป็นดัชนีหน้าที่ต้องการ (`0`‑based) | +| **สร้างกล่องข้อความหลายบรรทัด** | ตั้งค่า `textBox.Multiline = true;` ก่อนเพิ่ม widget | +| **กำหนดค่าเริ่มต้น** | กำหนด `textBox.Value = "Enter your comments here";` | +| **ทำให้ฟิลด์เป็นข้อบังคับ** | ตั้งค่า `textBox.Required = true;` | +| **วางฟิลด์บนหลายหน้า** | เรียก `textBox.AddWidgetAnnotation` สำหรับสี่เหลี่ยมเพิ่มเติมบนหน้าที่ต้องการ | +| **ใช้ฟอนต์กำหนดเอง** | โหลดฟอนต์ด้วย `FontRepository.AddFont("path/to/font.ttf")` แล้วอ้างอิงใน `DefaultAppearance` | + +**เคล็ดลับ:** ตรวจสอบพิกัดสี่เหลี่ยมเทียบกับขนาดหน้า (`pdfDocument.Pages[1].Rect`) เสมอ หาก widget อยู่ไกลเกินขอบหน้า viewer อาจตัดหรือซ่อนฟิลด์ได้ + +## การทดสอบฟิลด์ฟอร์ม + +1. เปิด `output.pdf` ด้วย Adobe Acrobat Reader +2. คลิกเข้าในกล่อง “Comments”; เคอร์เซอร์ควรปรากฏ +3. พิมพ์ข้อความใด ๆ แล้วกด **Tab** หรือคลิกที่อื่น +4. เลือก **File → Save As** เพื่อบันทึกค่าที่กรอกไว้ +5. (ไม่บังคับ) ใช้ API `Form` ของ Aspose.PDF เพื่อดึงค่าด้วยโค้ด: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +สแนปช็อตนี้แสดงให้เห็นว่าฟิลด์ไม่เพียงแค่มองเห็นได้ แต่ยังสามารถดึงค่าผ่านโค้ดได้—สิ่งสำคัญสำหรับการประมวลผลฝั่งเซิร์ฟเวอร์ + +## สรุป + +ตอนนี้คุณรู้วิธี **สร้างฟิลด์ฟอร์ม PDF** ใน C# ตั้งแต่ต้นจนจบ บทแนะนำได้ครอบคลุมการโหลด PDF, การกำหนดค่า `TextBoxField`, การเพิ่ม widget annotation, การลงทะเบียนฟิลด์, และการบันทึกผลลัพธ์ ด้วยบล็อกเหล่านี้คุณสามารถ **เพิ่มกล่องข้อความลงใน PDF** เอกสาร, **แก้ไข PDF เพื่อรวมกล่องข้อความ**, และขยายวิธีการไปยังประเภทฟิลด์อื่น ๆ เช่น checkbox, radio button, หรือ dropdown + +ต่อไปลองสำรวจหัวข้อที่เกี่ยวข้องเช่น **การดึงข้อมูลฟอร์ม**, **การทำให้ฟอร์มเป็นแบน (flatten)**, หรือ **การจัดรูปแบบฟิลด์ด้วยเส้นขอบและสี** แนวคิดเหล่านี้ทั้งหมดอิงจาก API หลักที่คุณเพิ่งเรียนรู้ ช่วยให้คุณสร้าง PDF แบบโต้ตอบที่ซับซ้อนได้ทั้งหมดใน C# + +ขอให้สนุกกับการเขียนโค้ด และอย่ากลัวที่จะทดลองกับสี่เหลี่ยม, ฟอนต์, และกฎการตรวจสอบต่าง ๆ เพื่อให้ตรงกับความต้องการของแอปพลิเคชันของคุณ! + +## สิ่งที่คุณควรเรียนต่อไป + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่ใกล้เคียงและต่อยอดจากเทคนิคในคู่มือนี้ แต่ละแหล่งรวมตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยคุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโปรเจกต์ของคุณ + +- [Create PDF Document with Aspose – Add Page, Text Box, and Form](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [How to Create PDF with Aspose – Add Form Field and Pages](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [How to Add a Text Stamp to PDF Using Aspose.PDF .NET: Comprehensive Guide](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/programming-with-operators/_index.md b/pdf/thai/net/programming-with-operators/_index.md index b18b824bb2..40cd792c6e 100644 --- a/pdf/thai/net/programming-with-operators/_index.md +++ b/pdf/thai/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ - [วาด XForm บนหน้า](./draw-xform-on-page/) | เรียนรู้วิธีการวาด XForms ใน PDF โดยใช้ Aspose.PDF สำหรับ .NET พร้อมคู่มือทีละขั้นตอนที่ครอบคลุมนี้ - [ตัวดำเนินการ PDF](./pdf-operators/) | คำแนะนำทีละขั้นตอนในการใช้ตัวดำเนินการ PDF กับ Aspose.PDF สำหรับ .NET เพิ่มรูปภาพลงในหน้า PDF และระบุตำแหน่งของรูปภาพ - | [ลบวัตถุกราฟิกออกจากไฟล์ PDF](./remove-graphics-objects/) เรียนรู้วิธีการลบวัตถุกราฟิกออกจากไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET ในคู่มือทีละขั้นตอนนี้ ทำให้ภารกิจการจัดการ PDF ของคุณง่ายขึ้น | +- [สร้างพจนานุกรม PDF ว่างใน C# ด้วย Aspose.PDF](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | สร้างพจนานุกรม PDF ว่างใน C# ด้วย Aspose.PDF {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/thai/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..3da8e889e2 --- /dev/null +++ b/pdf/thai/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-14 +description: สร้างพจนานุกรม PDF ว่างใน C# ด้วย Aspose.Pdf – เรียนรู้วิธีเพิ่มสถานะกราฟิกลงในคอลเลกชัน + ExtGState และแก้ไข PDF อย่างโปรแกรมมิ่ง +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: th +lastmod: 2026-08-14 +og_description: สร้างดิกชันนารี PDF ว่างใน C# ด้วย Aspose.Pdf. ทำตามคู่มือฉบับสมบูรณ์นี้เพื่อเพิ่มสถานะกราฟิกที่กำหนดเองไปยังคอลเลกชัน + ExtGState ของ PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: สร้างดิกชันนารี PDF ว่างใน C# – คู่มือ Aspose.Pdf ทีละขั้นตอน +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: สร้างดิกชันนารี PDF ว่างใน C# ด้วย Aspose.Pdf +url: /th/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สร้างพจนานุกรม PDF ว่างใน C# ด้วย Aspose.Pdf + +หากคุณต้องการ **สร้างพจนานุกรม PDF ว่าง** ขณะทำงานกับไฟล์ PDF คำแนะนำนี้จะแสดงวิธีทำใน C# โดยใช้ไลบรารี Aspose.Pdf ไม่ว่าคุณจะกำลังสร้างกราฟิกสเตตแบบกำหนดเอง เพิ่มทรัพยากรใหม่ หรือเตรียมเทมเพลตสำหรับใช้ในภายหลัง ขั้นตอนต่อไปนี้จะให้โซลูชันที่ทำงานได้เต็มรูปแบบและพร้อมรัน + +คุณจะได้เรียนรู้วิธีโหลด PDF, เข้าถึงพจนานุกรมทรัพยากรของหน้าแรก, สร้าง `CosPdfDictionary` ใหม่จากศูนย์, และแทรกลงในคอลเลกชัน `ExtGState` เมื่อจบบทเรียนคุณจะมีไฟล์ `output.pdf` ที่มีพจนานุกรมที่สร้างใหม่อยู่ + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน ตรวจสอบให้แน่ใจว่าคุณมี: + +- .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานได้กับ .NET Framework 4.6+) +- Visual Studio 2022 หรือ IDE สำหรับ C# ที่คุณชื่นชอบ +- ไลเซนส์ Aspose.Pdf for .NET (หรือคีย์ประเมินผลชั่วคราว) +- ตัวอย่าง PDF ชื่อ **input.pdf** ที่วางไว้ในโฟลเดอร์ที่คุณควบคุม (เส้นทางโฟลเดอร์จะถูกใช้เป็น `dataDir`) + +ไม่ต้องติดตั้ง NuGet package เพิ่มเติมนอกจาก `Aspose.Pdf` + +## ขั้นตอนที่ 1: ตั้งค่าโปรเจกต์และอ้างอิง Aspose.Pdf + +1. สร้างโปรเจกต์ **Console App** ใหม่ใน Visual Studio +2. เปิด **NuGet Package Manager** แล้วติดตั้ง `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. เพิ่มคำสั่ง `using` ต่อไปนี้ที่ส่วนหัวของ `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *ทำไมต้องใช้ namespace เหล่านี้?* `Aspose.Pdf` มีคลาสหลัก `Document` ส่วน `Aspose.Pdf.Operators.Gfx` มี `CosPdfDictionary`, `CosPdfNumber` และอ็อบเจกต์ PDF ระดับต่ำที่จำเป็นสำหรับการ **สร้างพจนานุกรม PDF ว่าง** + +## ขั้นตอนที่ 2: โหลด PDF ต้นฉบับ + +ขั้นตอนแรกคือโหลดไฟล์ PDF ที่มีอยู่เข้าสู่อินสแตนซ์ `Document` ซึ่งทำให้คุณเข้าถึงทุกหน้า, ทรัพยากร, และพจนานุกรมระดับต่ำได้ + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*คำอธิบาย*: `Document` จะอ่านไฟล์เข้าสู่หน่วยความจำและเตรียมโครงสร้างภายใน คำสั่ง `using` ทำให้แน่ใจว่าไฟล์จะถูกปล่อยหลังจากทำงานเสร็จ + +## ขั้นตอนที่ 3: เข้าถึงพจนานุกรมทรัพยากรของหน้าแรก + +แต่ละหน้าของ PDF มีพจนานุกรม **Resources** ที่รวมฟอนต์, รูปภาพ, วัตถุ ExtGState และทรัพยากรที่ใช้ร่วมกันอื่น ๆ เพื่อแทรกกราฟิกสเตตใหม่เราต้องแก้ไขพจนานุกรมนี้ + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` เป็นคลาสช่วยเหลือที่ทำให้คุณจัดการพจนานุกรม PDF เหมือนกับ `Dictionary` ของ C# + +## ขั้นตอนที่ 4: ดึง (หรือสร้าง) คอลเลกชัน ExtGState + +`ExtGState` เก็บวัตถุกราฟิกสเตต เช่น ความทึบ, โหมดผสมสี, และความกว้างของเส้น หาก PDF ต้นฉบับมีรายการ `ExtGState` อยู่แล้ว เราจะใช้ต่อ; หากไม่มีเราจะสร้างพจนานุกรมว่างใหม่ + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*ทำไมต้องตรวจสอบเช่นนี้?* PDF บางไฟล์อาจไม่มีรายการ `ExtGState` เลย การจัดการทั้งสองกรณีทำให้บทเรียนนี้ทำงานได้กับไฟล์ใดก็ได้ + +## ขั้นตอนที่ 5: **สร้างพจนานุกรม PDF ว่าง** สำหรับกราฟิกสเตตใหม่ + +ตอนนี้เราจะ **สร้างพจนานุกรม PDF ว่าง** ที่กำหนดพารามิเตอร์ของกราฟิกสเตต พจนานุกรมเริ่มต้นเป็นค่าว่างและเราจะเพิ่มคีย์ที่จำเป็นเข้าไป: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### สิ่งที่แต่ละรายการทำ + +| คีย์ | ประเภท | ความหมาย | +|-----|--------|-----------| +| **CA** | `CosPdfNumber` | ความทึบของเส้น (ช่วง 0‑1) | +| **ca** | `CosPdfNumber` | ความทึบของการเติม (ช่วง 0‑1) | +| **BM** | `CosPdfName` | โหมดผสมสี; `"Normal"` เป็นค่าเริ่มต้นที่ใช้บ่อยที่สุด | + +เนื่องจากเราเริ่มจาก **พจนานุกรม PDF ว่าง** เราจึงมีอิสระเต็มที่ในการกำหนดว่าคีย์ใดบ้างจะถูกเพิ่ม คุณสามารถขยายพจนานุกรมนี้ด้วยพารามิเตอร์กราฟิกสเตตเพิ่มเติม เช่น `LW` (ความกว้างของเส้น) หรือ `LC` (รูปแบบปลายเส้น) ตามต้องการ + +## ขั้นตอนที่ 6: แทรกกราฟิกสเตตใหม่ลงใน ExtGState + +พจนานุกรม `ExtGState` ทำงานคล้ายแผนที่ที่แต่ละรายการระบุด้วยชื่อ (เช่น `GS0`, `GS1`) เราจะใส่พจนานุกรมที่สร้างใหม่ภายใต้คีย์ที่ไม่ซ้ำกัน + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +หากต้องการเพิ่มหลายสเตต ให้เพิ่มตัวเลขต่อท้าย (`GS1`, `GS2`, …) เพื่อหลีกเลี่ยงการชนกันของชื่อ + +## ขั้นตอนที่ 7: บันทึก PDF ที่แก้ไขแล้ว + +สุดท้ายให้เขียนการเปลี่ยนแปลงกลับไปยังดิสก์ วิธี `Save` จะทำการซีเรียลไลซ์พจนานุกรมที่อัปเดตโดยอัตโนมัติ + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +เปิด `output.pdf` ด้วยโปรแกรมดู PDF ใด ๆ แล้วตรวจสอบรายการ **Resources → ExtGState** (โปรแกรมส่วนใหญ่จะซ่อนรายการนี้ แต่เครื่องมืออย่าง Adobe Acrobat Preflight หรือ PDF‑Tron สามารถแสดงได้) คุณควรเห็นรายการ `GS0` ที่มีค่าความทึบและโหมดผสมสีที่คุณกำหนดไว้ + +## ตัวอย่างทำงานเต็มรูปแบบ + +รวมทุกขั้นตอนเข้าด้วยกัน นี่คือโปรแกรมเต็มที่คุณสามารถคัดลอก‑วางลงใน `Program.cs` แล้วรันได้: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** – คอนโซลจะแสดงข้อความยืนยัน และ `output.pdf` จะมีรายการ `GS0` ใหม่อยู่ภายใต้ `ExtGState` เมื่อคุณเรนเดอร์หน้าที่อ้างอิง `GS0` (เช่น ผ่านออปเจกต์สตรีม `gs`) เส้นจะเต็มความทึบในขณะที่การเติมจะมีความโปร่งใส 50 % + +## คำถามที่พบบ่อยและการจัดการกรณีขอบ + +| คำถาม | คำตอบ | +|-------|--------| +| *PDF มีหลายหน้า จะทำอย่างไร?* | ตัวอย่างนี้มุ่งเป้าไปที่หน้าแรก (`Pages[1]`) หากต้องการกระทบทุกหน้า ให้วนลูปผ่าน `pdfDocument.Pages` แล้วทำซ้ำขั้นตอนที่ 3‑5 สำหรับแต่ละหน้าของทรัพยากร | +| *สามารถเพิ่มพจนานุกรมให้หน้าที่มี ExtGState ชื่อ “GS0” อยู่แล้วได้หรือไม่?* | ทำได้ แต่ต้องใช้คีย์อื่น (`GS1`, `GS2`, …) เพื่อไม่ให้เขียนทับรายการที่มีอยู่ | +| *ปลอดภัยหรือไม่ที่จะแก้ไขพจนานุกรมหลังบันทึก?* | หลังจากเรียก `Save` ตัวแทนในหน่วยความจำจะถูกแยกจากไฟล์ คุณสามารถแก้ไขอ็อบเจกต์ `Document` ต่อได้และเรียก `Save` อีกครั้งหากต้องการ | +| *ต้องมีไลเซนส์ Aspose.Pdf เพื่อใช้ ` | | + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคในคู่มือนี้ แต่ละแหล่งรวมตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานทางเลือกในโปรเจกต์ของคุณ + +- [How to Create Dashed Lines in PDFs Using Aspose.PDF for .NET: A Step-by-Step Guide](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [How to Remove Graphics from PDFs Using Aspose.PDF .NET: A Complete Guide](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [How to Create Multi-Layer PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/programming-with-security-and-signatures/_index.md b/pdf/thai/net/programming-with-security-and-signatures/_index.md index 66f0ad23ad..35e596bd67 100644 --- a/pdf/thai/net/programming-with-security-and-signatures/_index.md +++ b/pdf/thai/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ - [ตรวจสอบลายเซ็น PDF ใน C# – วิธีอ่านไฟล์ PDF ที่ลงนาม](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | เรียนรู้วิธีตรวจสอบและอ่านลายเซ็นดิจิทัลในไฟล์ PDF ด้วย C# และ Aspose.PDF สำหรับ .NET - - [วิธีซ่อมไฟล์ PDF – คู่มือ C# ฉบับสมบูรณ์กับ Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | เรียนรู้วิธีซ่อมไฟล์ PDF ที่เสียหายด้วย Aspose.PDF สำหรับ .NET ผ่านขั้นตอนการเขียนโปรแกรม C# อย่างละเอียด - [ตรวจสอบลายเซ็น PDF ใน C# – คู่มือการเขียนโปรแกรมฉบับสมบูรณ์](./verify-pdf-signature-in-c-complete-programming-guide/) | เรียนรู้วิธีตรวจสอบลายเซ็น PDF อย่างละเอียดด้วย C# และ Aspose.PDF สำหรับ .NET – คู่มือการเขียนโปรแกรมเต็มรูปแบบ +- [สร้างตัวเลือกลายเซ็นใน C# – คู่มือเต็มสำหรับการลงนามดิจิทัล](./create-signature-options-in-c-full-guide-to-digital-signing/) | เรียนรู้วิธีสร้างตัวเลือกลายเซ็นดิจิทัลใน C# อย่างละเอียด {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/thai/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..7083cdad52 --- /dev/null +++ b/pdf/thai/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-08-14 +description: สร้างตัวเลือกลายเซ็นใน C# เพื่อใช้ลายเซ็นดิจิทัล เรียนรู้วิธีกำหนดค่าลายเซ็น, + การทำฟังก์ชันแฮชแบบกำหนดเอง, และการลงนามเอกสารโดยโปรแกรม. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: th +lastmod: 2026-08-14 +og_description: สร้างตัวเลือกลายเซ็นใน C# และใช้ลายเซ็นดิจิทัล บทเรียนนี้จะพาคุณผ่านการกำหนดค่าลายเซ็น + การเพิ่มฟังก์ชันแฮชแบบกำหนดเอง และการเซ็นเอกสาร +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: สร้างตัวเลือกการลงลายเซ็นใน C# – คู่มือการลงนามดิจิทัลแบบทีละขั้นตอน +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: สร้างตัวเลือกการลงลายเซ็นใน C# – คู่มือเต็มสำหรับการลงนามดิจิทัล +url: /th/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สร้างตัวเลือกลายเซ็นใน C# – คู่มือเต็มสำหรับการลงลายเซ็นดิจิทัล + +สร้างตัวเลือกลายเซ็นใน C# เพื่อกำหนดค่ากระบวนการทำงานของลายเซ็นดิจิทัล. บทแนะนำนี้แสดงวิธีการใช้ลายเซ็นดิจิทัล, การทำงานของฟังก์ชันแฮชแบบกำหนดเอง, และการลงลายเซ็นเอกสารโดยใช้คลาส `SignatureOptions`. หากคุณเคยต้องการลงลายเซ็น PDF, XML หรือข้อมูลไบนารีใด ๆ จากแอปพลิเคชัน .NET, ขั้นตอนต่อไปนี้จะให้โซลูชันที่พร้อมใช้งาน. + +คุณจะได้เรียนรู้วิธี: + +* กำหนดค่า `SignatureOptions` ด้วยอัลกอริทึมแฮชแบบกำหนดเอง, +* เรียกใช้เมธอดการลงลายเซ็นอย่างถูกต้อง, +* ตรวจสอบว่าลายเซ็นได้ถูกนำไปใช้แล้ว, +* หลีกเลี่ยงข้อผิดพลาดทั่วไปเมื่อกำหนดค่าลายเซ็น. + +ข้อกำหนดเบื้องต้นเพียงอย่างเดียวคือ .NET SDK เวอร์ชันล่าสุด (≥ .NET 6) และไลบรารีการลงลายเซ็นที่เปิดเผย `SignatureOptions` (เช่น **GroupDocs.Signature**, **Aspose.Signature**, หรือ API ที่คล้ายกัน) ไม่จำเป็นต้องใช้เครื่องมือภายนอก. + +--- + +## ข้อกำหนดเบื้องต้น + +| ข้อกำหนด | เหตุผลที่สำคัญ | +|-------------|----------------| +| .NET 6 SDK หรือรุ่นใหม่กว่า | ให้คุณสมบัติของภาษาที่ทันสมัยที่ใช้ในตัวอย่าง | +| แพ็กเกจ NuGet ของไลบรารีการลงลายเซ็น (เช่น `GroupDocs.Signature`) | จัดหาไทป์ `SignatureOptions` และเมธอดส่วนขยาย `Sign` | +| เข้าถึงคีย์ส่วนตัวหรือใบรับรอง | จำเป็นสำหรับการสร้างลายเซ็นดิจิทัลที่ตรวจสอบได้ | + +ติดตั้งไลบรารีด้วย CLI มาตรฐาน: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## ขั้นตอนที่ 1: สร้างตัวเลือกลายเซ็น + +ขั้นตอนแรกคือการสร้างอินสแตนซ์ของ `SignatureOptions` และตั้งค่าคุณสมบัติที่ควบคุมกระบวนการลงลายเซ็น. อ็อบเจ็กต์นี้บอกไลบรารีว่า *อะไร* ที่จะลงลายเซ็นและ *อย่างไร* ที่จะลงลายเซ็น. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** `SignatureOptions` ทำหน้าที่เป็นสัญญาระหว่างโค้ดของคุณและเอนจินการลงลายเซ็น การกำหนดค่าไว้ล่วงหน้าช่วยหลีกเลี่ยงโค้ดซ้ำซ้อนเมื่อทำการลงลายเซ็นหลายเอกสาร. + +--- + +## ขั้นตอนที่ 2: สร้างฟังก์ชันแฮชแบบกำหนดเอง + +*ฟังก์ชันแฮชแบบกำหนดเอง* ให้คุณควบคุมดิจสต์ที่อัลกอริทึมลายเซ็นจะลงลายเซ็นได้อย่างเต็มที่. สิ่งนี้มีประโยชน์เมื่อแฮชค่าเริ่มต้น (SHA‑256) ไม่ตรงตามข้อกำหนดการปฏิบัติตามหรือเมื่อคุณต้องการแฮชส่วนหนึ่งของเอกสาร. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** การกำหนดค่า `CustomSignHash` ทำให้คุณแทนที่ขั้นตอนแฮชภายในของไลบรารีด้วย `MyHash` เอนจินการลงลายเซ็นจะลงลายเซ็นไบต์ที่ฟังก์ชันของคุณส่งคืน, ทำให้สอดคล้องกับนโยบายที่กำหนดเองใด ๆ. + +--- + +## ขั้นตอนที่ 3: โหลดเอกสารและใช้ลายเซ็นดิจิทัล + +เมื่อเตรียมตัวเลือกแล้ว, คุณสามารถเปิดไฟล์เป้าหมายและเรียกเมธอดการลงลายเซ็นได้. เมธอด `Sign` ถูกจัดหาโดยไลบรารีและใช้ `SignatureOptions` ที่กำหนดค่าไว้. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** การเรียก `Sign` ทำสามขั้นตอนภายใน: + +1. **การคำนวณแฮช** – ตอนนี้มอบหมายให้ฟังก์ชันแฮชแบบกำหนดของคุณ. +2. **การสร้างลายเซ็น** – ใช้คีย์ส่วนตัวที่กำหนดในการตั้งค่าไลบรารี. +3. **การฝัง** – ลายเซ็นที่สร้างจะถูกแนบไปยังไฟล์ผลลัพธ์. + +หากขั้นตอนใดล้มเหลว, เมธอดจะคืนค่า `false`, ทำให้คุณสามารถจัดการข้อผิดพลาดได้อย่างราบรื่น. + +--- + +## ขั้นตอนที่ 4: ตรวจสอบว่าเอกสารถูกลงลายเซ็นแล้ว + +การตรวจสอบอย่างรวดเร็วยืนยันว่าลายเซ็นได้ถูกนำไปใช้อย่างถูกต้อง. ไลบรารีส่วนใหญ่จะมีเมธอด `Verify` ที่ตรวจสอบความสมบูรณ์ของไฟล์ที่ลงลายเซ็น. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** การตรวจสอบทำให้แน่ใจว่าเอกสารที่ลงลายเซ็นไม่ได้ถูกดัดแปลงหลังจากลงลายเซ็นและฟังก์ชันแฮชแบบกำหนดได้สร้างดิจสต์ที่เข้ากันได้. + +--- + +## วิธีกำหนดค่าลายเซ็นสำหรับประเภทไฟล์ต่าง ๆ + +อ็อบเจ็กต์ `SignatureOptions` เดียวกันสามารถนำกลับมาใช้ใหม่สำหรับ PDF, เอกสาร Word, รูปภาพ หรือไฟล์ไบนารีธรรมดา. การเปลี่ยนแปลงเดียวที่ต้องทำคือคลาสตัวเลือกที่เฉพาะเจาะจง (เช่น `PdfSignatureOptions`, `WordSignatureOptions`). ต่อไปนี้คือตัวอย่างอย่างรวดเร็วสำหรับภาพ JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** การเข้าใจวิธี *กำหนดค่าลายเซ็น* สำหรับแต่ละรูปแบบทำให้คุณสามารถขยายโค้ดเบสเดียวกันไปยังหลายประเภทเอกสารโดยไม่ต้องเขียนฟังก์ชันแฮชใหม่. + +--- + +## ข้อผิดพลาดทั่วไปและแนวปฏิบัติที่ดีที่สุด + +| ข้อผิดพลาด | วิธีแก้แนะนำ | +|---------|-----------------| +| ลืมตั้งค่า `CustomSignHash` หลังจากสร้าง `SignatureOptions` | กำหนด delegate ทันทีหลังจากสร้างอ็อบเจ็กต์ options | +| ใช้อัลกอริทึมแฮชที่ใบรับรองการลงลายเซ็นไม่รองรับ | ตรวจสอบว่าการใช้คีย์ของใบรับรองตรงกับความยาวของแฮช (เช่น RSA‑2048 กับ SHA‑512) | +| มองข้ามความจำเป็นในการทำลายอ็อบเจ็กต์ `Signature` | ห่ออ็อบเจ็กต์ `Signature` ด้วยบล็อก `using` เพื่อปล่อยไฟล์แฮนด์เดิล | +| บันทึกไฟล์ที่ลงลายเซ็นทับไฟล์ต้นฉบับ | ควรเขียนไปยังเส้นทางไฟล์ใหม่ (`outputPath`) เสมอเพื่อรักษาเอกสารต้นฉบับ | + +--- + +## ตัวอย่างทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรมที่รวมทุกส่วนไว้ด้วยกัน. คัดลอกไปยังโปรเจกต์คอนโซลใหม่และรัน; คอนโซลจะแจ้งผลสำเร็จหรือความล้มเหลว. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** + +``` +Signature verified successfully. +``` + +หากคอนโซลพิมพ์ข้อความ “Signing failed.” หรือ “Signature verification failed.”, ให้ตรวจสอบการตั้งค่าใบรับรองอีกครั้งและตรวจสอบว่าฟังก์ชันแฮชแบบกำหนดคืนอาร์เรย์ไบต์ที่มีขนาดตามที่คาดหวัง. + +--- + +## สรุป + +ตอนนี้คุณรู้วิธี **สร้างตัวเลือกลายเซ็น** ใน C#, แนบ **ฟังก์ชันแฮชแบบกำหนดเอง**, และ **ใช้ลายเซ็นดิจิทัล** กับเอกสารที่รองรับใด ๆ. บทแนะนำครอบคลุมวงจรชีวิตเต็มรูปแบบ: การกำหนดค่าตัวเลือก, การลงลายเซ็นไฟล์, และการตรวจสอบผลลัพธ์. โดยการใช้ `SignatureOptions` ตัวเดียวกันซ้ำ คุณยังสามารถ **กำหนดค่าลายเซ็น** สำหรับรูปภาพ, ไฟล์ Word, หรือไบนารีดิบได้. + +--- + +## ต่อไปคืออะไร? + +* สำรวจคุณสมบัติเพิ่มเติมของ `SignatureOptions` เช่น ตราประทับภาพ, เซิร์ฟเวอร์ timestamp, และห่วงโซ่ใบรับรอง – สิ่งเหล่านี้สอดคล้องกับคีย์เวิร์ด **apply digital signature**. +* ทดลองอัลกอริทึมแฮชอื่น ๆ (เช่น Blake2b) โดยสลับการทำงานภายใน `MyHash`. +* รวมกระบวนการลงลายเซ็นเข้ากับ Web API เพื่อเปิดใช้งานการลงลายเซ็นเอกสารแบบเรียลไทม์ – การต่อยอดที่เป็นธรรมชาติของ **how to sign document** ในสถาปัตยกรรมแบบบริการ. + +คุณสามารถปรับโค้ดให้สอดคล้องกับนโยบายความปลอดภัยของคุณเองและแบ่งปันประสบการณ์ในความคิดเห็นได้เลย. ขอให้ลงลายเซ็นอย่างสนุกสนาน! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดซึ่งต่อยอดจากเทคนิคที่แสดงในคู่มือนี้. แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานครบถ้วนพร้อมคำอธิบายทีละขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญคุณลักษณะ API เพิ่มเติมและสำรวจแนวทางการทำงานแบบอื่นในโครงการของคุณ. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/programming-with-stamps-and-watermarks/_index.md b/pdf/thai/net/programming-with-stamps-and-watermarks/_index.md index b6d1b5e4d4..a8542f779d 100644 --- a/pdf/thai/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/thai/net/programming-with-stamps-and-watermarks/_index.md @@ -36,10 +36,14 @@ | [รูปภาพในส่วนหัว](./image-in-header/) | เรียนรู้วิธีการเพิ่มรูปภาพลงในส่วนหัวของ PDF โดยใช้ Aspose.PDF สำหรับ .NET ในบทช่วยสอนทีละขั้นตอนนี้ - [หมายเลขหน้าในส่วนหัวส่วนท้ายโดยใช้กล่องลอย](./page-number-in-header-footer-using-floating-box/) | เพิ่มหมายเลขหน้าในส่วนหัวและส่วนท้ายของ PDF ได้อย่างง่ายดายโดยใช้ Floating Box พร้อมกับ Aspose.PDF สำหรับ .NET ในบทช่วยสอนทีละขั้นตอนนี้ - | [แสตมป์หมายเลขหน้าในไฟล์ PDF](./page-number-stamps/) เรียนรู้วิธีการเพิ่มแสตมป์หมายเลขหน้าลงในไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET ได้จากคู่มือที่ทำตามง่ายของเรา พร้อมด้วยตัวอย่างโค้ด -- [เพิ่มหมายเลข Bates ใน PDF ด้วย C# – คู่มือครบถ้วน](./add-bates-numbering-pdf-in-c-complete-guide/) เรียนรู้วิธีเพิ่มหมายเลข Bates ลงในไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ +- [เพิ่มหมายเลข Bates ใน PDF ด้วย C# – คู่มือครบถ้วน](./add-bates-numbering-pdf-in-c-complete-guide/) เรียนรู้วิธีเพิ่มหมายเลข Bates ลงใน PDF ด้วย + +- [วิธีตั้งค่าตัวเลือกการกำหนดหมายเลข Bates ใน C# – คู่มือครบถ้วน](./how-to-set-bates-numbering-options-in-c-complete-guide/) เรียนรู้วิธีตั้งค่าตัวเลือกการกำหนดหมายเลข Bates ในไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET อย่างละเอียด + - [ตารางในส่วนหัวส่วนท้าย](./table-in-header-footer-section/) | เรียนรู้วิธีการเพิ่มข้อความลงในส่วนท้ายของไฟล์ PDF ได้อย่างง่ายดายโดยใช้ Aspose.PDF สำหรับ .NET พร้อมคู่มือทีละขั้นตอนเพื่อการผสานรวมที่ราบรื่น - -| [ข้อความในส่วนท้ายของไฟล์ PDF](./text-in-footer/) | เรียนรู้วิธีการเพิ่มข้อความในส่วนท้ายของไฟล์ PDF ด้วย Aspose.PPDF สำหรับ .NET - -| [ข้อความในส่วนหัวของไฟล์ PDF](./text-in-header/) | เรียนรู้การเพิ่มส่วนหัวข้อความในไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยบทช่วยสอนทีละขั้นตอนนี้ ปรับปรุงเอกสารของคุณอย่างมีประสิทธิภาพและมีประสิทธิผล | +| [ข้อความในส่วนท้ายของไฟล์ PDF](./text-in-footer/) | เรียนรู้ทำ + + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/thai/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..7d779ea3ac --- /dev/null +++ b/pdf/thai/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: วิธีตั้งค่าตัวเลือกการใส่หมายเลขบาเตสใน C# ด้วย GroupDocs. ทำตามบทแนะนำขั้นตอนต่อขั้นตอนนี้เพื่อเพิ่มคำนำหน้าที่กำหนดเองและตั้งค่าตัวเลขเริ่มต้นเมื่อแปลงไฟล์ + Word เป็น PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: th +lastmod: 2026-08-14 +og_description: วิธีตั้งค่าตัวเลือกการใส่หมายเลขบาเตสใน C# อย่างรวดเร็ว คู่มือนี้จะแสดงวิธีเพิ่มคำนำหน้าที่กำหนดเองและตั้งค่าเลขเริ่มต้นเมื่อแปลงไฟล์ + Word เป็น PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: วิธีตั้งค่าตัวเลือกการนับเลขบาเตสใน C# – สอนทีละขั้นตอน +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: วิธีตั้งค่าตัวเลือกการทำหมายเลขบาเตสใน C# – คู่มือฉบับสมบูรณ์ +url: /th/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีตั้งค่าตัวเลือกการใส่หมายเลข Bates ใน C# – คู่มือฉบับสมบูรณ์ + +หากคุณต้องการ **วิธีตั้งค่าตัวเลือกการใส่หมายเลข Bates** ใน C# คู่มือนี้จะพาคุณผ่านขั้นตอนอย่างละเอียด คุณจะได้เรียนรู้วิธีกำหนดหมายเลขเริ่มต้น เพิ่มคำนำหน้า และนำหมายเลขไปใช้ขณะแปลงเอกสาร Word เป็น PDF ด้วย GroupDocs API + +การประมวลผลเอกสารมักต้องการตัวระบุที่ไม่ซ้ำกันบนแต่ละหน้าเพื่อวัตถุประสงค์ทางกฎหมายหรือการจัดเก็บเอกสาร เมื่อจบการสอนนี้คุณจะมีโค้ดสั้นที่สามารถนำไปใช้ซ้ำได้ในโปรเจกต์ .NET ใด ๆ ไม่ว่าจะเป็นเครื่องมือสนับสนุนการฟ้องร้องหรือเครื่องมือสร้างรายงานอัตโนมัติ ไม่ต้องใช้เครื่องมือภายนอก—เพียงแค่ไลบรารี GroupDocs.Conversion และโค้ด C# ไม่กี่บรรทัด + +## สิ่งที่คุณต้องเตรียม + +ก่อนเริ่มทำงาน โปรดตรวจสอบว่าคุณมี: + +* .NET 6.0 SDK หรือรุ่นที่ใหม่กว่า ติดตั้งแล้ว +* Visual Studio 2022 (หรือ IDE ใด ๆ ที่รองรับ .NET) +* ไลเซนส์ GroupDocs.Conversion ที่ใช้งานได้ (รุ่นทดลองฟรีใช้สำหรับการทดสอบ) +* ตัวอย่างไฟล์ Word (`input.docx`) ที่ต้องการใส่หมายเลข + +ข้อกำหนดเหล่านี้ทำให้โค้ดทำงานได้โดยไม่ต้องตั้งค่าเพิ่มเติม + +## วิธีตั้งค่าตัวเลือกการใส่หมายเลข Bates – ภาพรวม + +หัวใจของ **วิธีตั้งค่าตัวเลือกการใส่หมายเลข Bates** อยู่ในสามอ็อบเจกต์: + +1. `Document` – โหลดไฟล์ต้นฉบับ +2. `BatesNumberingOptions` – เก็บหมายเลขเริ่มต้น คำนำหน้า และรายละเอียดการจัดรูปแบบอื่น ๆ +3. `AddBatesNumbering` – เมธอดที่แทรกหมายเลขลงในแต่ละหน้า + +การเข้าใจเหตุผลที่แต่ละส่วนมีอยู่ช่วยให้คุณปรับโซลูชันให้เข้ากับสถานการณ์ที่ซับซ้อนมากขึ้น เช่น ฟอนต์ที่กำหนดเองหรือการใส่หมายเลขหลายภาษา + +## ขั้นตอนที่ 1: ติดตั้งแพคเกจ NuGet ของ GroupDocs.Conversion + +เปิดเทอร์มินัลในโฟลเดอร์โซลูชันของคุณและรัน: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** ให้คลาส `Document` และเมธอดส่วนขยาย `AddBatesNumbering` ที่จะใช้ต่อในบทเรียนนี้ + +## ขั้นตอนที่ 2: โหลดเอกสารต้นฉบับ + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*ทำไมต้องทำขั้นตอนนี้?* +การโหลดไฟล์จะสร้างการแสดงผลในหน่วยความจำที่เครื่องมือแปลงสามารถจัดการได้ หากไม่มีอินสแตนซ์ `Document` คุณจะไม่สามารถใส่หมายเลข Bates หรือทำการแปลงอื่น ๆ ได้ + +## ขั้นตอนที่ 3: สร้างตัวเลือกการใส่หมายเลข Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*ทำไมต้องทำขั้นตอนนี้?* +`BatesNumberingOptions` รวมการตั้งค่าทั้งหมดที่คุณอาจต้องการเมื่อ **ตั้งค่าตัวเลือกการใส่หมายเลข Bates** การปรับ `StartNumber` และ `Prefix` ช่วยให้ผลลัพธ์สอดคล้องกับระบบจัดการคดีของคุณ คุณสมบัติ `Position` ควบคุมตำแหน่งการแสดงผล ซึ่งมักเป็นข้อกำหนดด้านการปฏิบัติตามกฎระเบียบ + +## ขั้นตอนที่ 4: นำหมายเลข Bates ไปใช้กับเอกสาร + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +เมธอด `AddBatesNumbering` จะวนผ่านแต่ละหน้าของ `Document` ที่โหลดแล้วและแทรกสตริงที่กำหนดไว้ เนื่องจากเมธอดทำงานบนการแสดงผลในหน่วยความจำ คุณจึงสามารถต่อขั้นตอนการประมวลผลเพิ่มเติม (เช่น การใส่ลายน้ำ) ก่อนบันทึกได้ + +## ขั้นตอนที่ 5: แปลงและบันทึกผลลัพธ์เป็น PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*ทำไมต้องทำขั้นตอนนี้?* +การบันทึกเป็น PDF เป็นรูปแบบสุดท้ายที่นิยมใช้สำหรับเอกสารทางกฎหมาย `PdfConvertOptions` ช่วยให้คุณปรับแต่งผลลัพธ์ได้ละเอียดขึ้น แต่ไม่จำเป็นสำหรับการใส่หมายเลขพื้นฐาน คำสั่ง `Save` จะเขียนไฟล์ PDF ที่มีหมายเลขครบถ้วนลงดิสก์ + +## ตัวอย่างที่สมบูรณ์และสามารถรันได้ + +รวมทุกอย่างเข้าด้วยกัน นี่คือตัวอย่างแอปคอนโซลที่สมบูรณ์ สามารถคอมไพล์และรันได้: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** + +เมื่อรันโปรแกรมจะสร้าง `output.pdf` ที่ทุกหน้าจะแสดงป้ายเช่น `CASE-1000`, `CASE-1001` ฯลฯ อยู่ที่ส่วนท้ายขวา เปิด PDF ด้วยโปรแกรมดูใด ๆ เพื่อยืนยันว่าตัวเลขปรากฏตามที่ต้องการ + +## ข้อผิดพลาดทั่วไปและแนวทางปฏิบัติที่ดีที่สุด + +| ปัญหา | ทำไมถึงเกิด | วิธีหลีกเลี่ยง | +|-------|--------------|----------------| +| **Relative paths cause `FileNotFoundException`** | โฟลเดอร์ทำงานของแอปคอนโซลอาจแตกต่างจากของ Visual Studio | ใช้เส้นทางแบบ absolute หรือ `Path.Combine(AppContext.BaseDirectory, "input.docx")` | +| **Numbering overlaps existing footers** | หากเอกสารต้นฉบับมีเนื้อหาอยู่ในพื้นที่ส่วนท้ายที่เลือก ตัวเลขใหม่อาจถูกซ่อน | เลือก `Position` อื่น (เช่น `HeaderLeft`) หรือปรับเทมเพลตต้นฉบับ | +| **Large documents are slow** | การใส่หมายเลข Bates ต้องวนผ่านทุกหน้า การใช้หน่วยความจำเพิ่มขึ้นตามขนาดไฟล์ | แบ่งการประมวลผลเป็นชิ้นส่วนโดยใช้ `Document.Split` หากเกิน 500 หน้า | +| **License expiration** | รุ่นทดลองของ GroupDocs หมดอายุหลัง 30 วัน ทำให้เกิดข้อยกเว้นที่ `AddBatesNumbering` | ใส่คีย์ไลเซนส์ที่ใช้งานได้ก่อนโหลดเอกสาร: `License license = new License(); license.SetLicense("license.lic");` | + +**เคล็ดลับ:** หากต้องการรูปแบบหมายเลขที่แตกต่างตามคดี (เช่น `2023-CASE-001`) ให้สร้างคำนำหน้าแบบไดนามิกก่อนสร้าง `BatesNumberingOptions` + +## การขยายโซลูชัน + +วิธี **Bates numbering C#** เดียวกันทำงานกับรูปแบบแหล่งข้อมูลอื่น ๆ เช่น `.txt`, `.html` หรือแม้กระทั่งรูปภาพ เพียงเปลี่ยนส่วนต่อท้ายไฟล์เมื่อสร้างอ็อบเจกต์ `Document` แล้วเอนจินแปลงจะจัดการส่วนที่เหลือให้เอง + +คุณอาจผสาน **document conversion C#** กับ OCR สำหรับ PDF ที่สแกนไว้ได้เช่นกัน: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## สรุป + +ตอนนี้คุณรู้แล้วว่า **วิธีตั้งค่าตัวเลือกการใส่หมายเลข Bates** ใน C# ตั้งแต่ต้นจนจบ โดยการสร้างอ็อบเจกต์ `BatesNumberingOptions` ใช้งานกับ `AddBatesNumbering` แล้วบันทึกผลเป็น PDF คุณสามารถอัตโนมัติการผลิตเอกสารที่เป็นไปตามกฎหมายและมีตัวระบุเฉพาะ + +จากนี้คุณสามารถสำรวจหัวข้อที่เกี่ยวข้อง เช่น **C# PDF generation**, **document conversion C#**, หรือคุณลักษณะขั้นสูงของ **GroupDocs API** เช่น การใส่ลายน้ำและลายเซ็นดิจิทัล ทดลองใช้คำนำหน้า ตำแหน่ง และรูปแบบหมายเลขต่าง ๆ เพื่อให้เข้ากับกระบวนการทำงานของคุณ + +ขอให้สนุกกับการเขียนโค้ด! + +## สิ่งที่คุณควรเรียนต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานครบถ้วนพร้อมคำอธิบายขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการนำไปใช้ในโปรเจกต์ของคุณเอง + +- [เพิ่มหมายเลข Bates PDF ใน C# – คู่มือฉบับสมบูรณ์](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [วิธีเพิ่มและปรับแต่งเลขหน้าใน PDF ด้วย Aspose.PDF สำหรับ .NET | คู่มือการจัดการเอกสาร](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [วิธีเพิ่มข้อความสแตมป์ที่ส่วนท้ายใน PDF ด้วย Aspose.PDF สำหรับ .NET: คู่มือแบบขั้นตอนต่อขั้นตอน](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/annotations/_index.md b/pdf/turkish/net/annotations/_index.md index c096d08f57..35a5fe41d3 100644 --- a/pdf/turkish/net/annotations/_index.md +++ b/pdf/turkish/net/annotations/_index.md @@ -19,21 +19,22 @@ ## Eğitimler | Başlık | Açıklama | | --- | --- | -| [PDF Açıklaması Ekle](./addannotation/) Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'lerinize kolayca özel açıklamalar ekleyin. Açıklamalarınızı belirli ayrıntılar ve simgelerle özelleştirin. | -| [lnk Açıklaması Ekle](./addlnkannotation/) | Bu ilgi çekici, adım adım kılavuzda Aspose.PDF for .NET ile PDF dosyalarına mürekkep açıklamaları eklemeyi öğrenin. +| [PDF Açıklaması Ekle](./addannotation/) Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'lerinize kolayca özel açıklamalar ekleyin. Açıklamalarınızı belirli ayrıntılar ve simgelerle özelleştirin. | | +| [PDF'de Dikdörtgen Çiz – Adım Adım C# Kılavuzu](./draw-rectangle-on-pdf-step-by-step-c-guide/) | Aspose.PDF for .NET ile PDF dosyalarına adım adım dikdörtgen çizerek nasıl ekleyeceğinizi öğrenin. | +| [lnk Açıklaması Ekle](./addlnkannotation/) | Bu ilgi çekici, adım adım kılavuzda Aspose.PDF for .NET ile PDF dosyalarına mürekkep açıklamaları eklemeyi öğrenin. | | [Swf Dosyasını PDF Açıklaması Olarak Ekle](./addswffileasannotation/) | Aspose.PDF for .NET kullanarak SWF dosyalarını PDF açıklamaları olarak nasıl ekleyeceğinizi öğrenin. Bu ayrıntılı eğitimle PDF'lerinizi etkileşimli multimedya içeriğiyle geliştirin. | | [Sayfadan Tüm Açıklamaları Sil](./deleteallannotationsfrompage/) | Aspose.PDF for .NET kullanarak bir PDF sayfasındaki tüm açıklamaları nasıl sileceğinizi öğrenin. PDF'lerinizi etkili bir şekilde temizlemek için adım adım kılavuzumuzu izleyin. | -| [PDF Dosyasındaki Belirli Açıklamayı Sil](./deleteparticularannotation/) | Bu adım adım kılavuzla Aspose.PDF for .NET'i kullanarak bir PDF dosyasındaki belirli bir açıklamayı nasıl sileceğinizi öğrenin. -| [PDF Dosyasındaki Vurgulanan Metni Çıkar](./extracthighlightedtext/) Bu eğitimle Aspose.PDF for .NET kullanarak bir PDF dosyasından vurgulanan metni etkili bir şekilde nasıl çıkaracağınızı öğrenin. Veri analizi ve içerik incelemesi için mükemmeldir. | -| [Sayfadan Tüm Açıklamaları Al](./getallannotationsfrompage/) | Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF dosyalarından açıklamaların nasıl çıkarılacağını öğrenin. Her seviyedeki geliştirici için mükemmel. | -| [PDF Dosyasında Belirli Açıklamayı Alın](./getparticularannotation/) | Bu detaylı, 2000 kelimelik eğitimde Aspose.PDF for .NET kullanarak bir PDF dosyasından belirli bir açıklamayı nasıl çıkaracağınızı öğrenin. Geliştiriciler için mükemmel. | -| [Açıklama Kaynağını Alın](./getresourceofannotation/) | Aspose.PDF for .NET ile PDF yönetiminin gücünü açığa çıkarın - kusursuz PDF açıklamaları ve düzenlemeleri için başvuracağınız kütüphaneniz. | -| [PDF Dosyasında Görünmez Açıklama](./invisibleannotation/) | Aspose.PDF for .NET kullanarak bir PDF dosyasına görünmez bir açıklama eklemeyi öğrenin. Bu güçlü özelliği ustalıkla kullanmak için adım adım kılavuzumuzu izleyin. | -| [lnk Açıklama Satır Genişliği](./lnkannotationlinewidth/) .NET için Aspose.PDF'yi kullanarak bir PDF'de mürekkep açıklama çizgisi genişliğini nasıl ayarlayacağınızı öğrenin. Bu ayrıntılı eğitim, her adımda size rehberlik ederek yüksek kaliteli çıktı sağlar. | -| [Sayfayı Sansürle](./redactpage/) | Bu kapsamlı, adım adım kılavuzla Aspose.PDF for .NET kullanarak belgeleri etkili bir şekilde nasıl sansürleyeceğinizi öğrenin. -| [PDF Dosyasında Çağrı Özelliğini Ayarla](./setcalloutproperty/) | Bu ayrıntılı, adım adım eğitimde Aspose.PDF for .NET kullanarak bir PDF dosyasında callout özelliğinin nasıl ayarlanacağını öğrenin. -| [Serbest Metin Açıklama Biçimlendirmesini Ayarla](./setfreetextannotationformatting/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF belgelerinde serbest metin açıklama biçimlendirmesini nasıl ayarlayacağınızı öğrenin. -| [Kelimeleri Sil](./strikeoutwords/) | Bu kapsamlı adım adım kılavuzla .NET için Aspose.PDF'yi kullanarak bir PDF'deki kelimeleri nasıl çizeceğinizi öğrenin. Belge düzenleme becerilerinizi geliştirin. | +| [PDF Dosyasındaki Belirli Açıklamayı Sil](./deleteparticularannotation/) | Bu adım adım kılavuzla Aspose.PDF for .NET'i kullanarak bir PDF dosyasındaki belirli bir açıklamayı nasıl sileceğinizi öğrenin. | +| [PDF Dosyasındaki Vurgulanan Metni Çıkar](./extracthighlightedtext/) Bu eğitimle Aspose.PDF for .NET kullanarak bir PDF dosyasından vurgulanan metni etkili bir şekilde nasıl çıkaracağınızı öğrenin. Veri analizi ve içerik incelemesi için mükemmeldir. | +| [Sayfadan Tüm Açıklamaları Al](./getallannotationsfrompage/) | Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF dosyalarından açıklamaların nasıl çıkarılacağını öğrenin. Her seviyedeki geliştirici için mükemmel. | +| [PDF Dosyasında Belirli Açıklamayı Alın](./getparticularannotation/) | Bu detaylı, 2000 kelimelik eğitimde Aspose.PDF for .NET kullanarak bir PDF dosyasından belirli bir açıklamayı nasıl çıkaracağınızı öğrenin. Geliştiriciler için mükemmel. | +| [Açıklama Kaynağını Alın](./getresourceofannotation/) | Aspose.PDF for .NET ile PDF yönetiminin gücünü açığa çıkarın - kusursuz PDF açıklamaları ve düzenlemeleri için başvuracağınız kütüphaneniz. | +| [PDF Dosyasında Görünmez Açıklama](./invisibleannotation/) | Aspose.PDF for .NET kullanarak bir PDF dosyasına görünmez bir açıklama eklemeyi öğrenin. Bu güçlü özelliği ustalıkla kullanmak için adım adım kılavuzumuzu izleyin. | +| [lnk Açıklama Satır Genişliği](./lnkannotationlinewidth/) .NET için Aspose.PDF'yi kullanarak bir PDF'de mürekkep açıklama çizgisi genişliğini nasıl ayarlayacağınızı öğrenin. Bu ayrıntılı eğitim, her adımda size rehberlik ederek yüksek kaliteli çıktı sağlar. | +| [Sayfayı Sansürle](./redactpage/) | Bu kapsamlı, adım adım kılavuzla Aspose.PDF for .NET kullanarak belgeleri etkili bir şekilde nasıl sansürleyeceğinizi öğrenin. | +| [PDF Dosyasında Çağrı Özelliğini Ayarla](./setcalloutproperty/) | Bu ayrıntılı, adım adım eğitimde Aspose.PDF for .NET kullanarak bir PDF dosyasında callout özelliğinin nasıl ayarlanacağını öğrenin. | +| [Serbest Metin Açıklama Biçimlendirmesini Ayarla](./setfreetextannotationformatting/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF belgelerinde serbest metin açıklama biçimlendirmesini nasıl ayarlayacağınızı öğrenin. | +| [Kelimeleri Sil](./strikeoutwords/) | Bu kapsamlı adım adım kılavuzla .NET için Aspose.PDF'yi kullanarak bir PDF'deki kelimeleri nasıl çizeceğinizi öğrenin. Belge düzenleme becerilerinizi geliştirin. | | [Ücretsiz Metin PDF Açıklamasını Güncelle](./updatefreetextannotation/) Bu adım adım kılavuzla Aspose.PDF for .NET'i kullanarak PDF belgelerindeki serbest metin açıklamalarını nasıl güncelleyeceğinizi öğrenin. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/turkish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..777be1a703 --- /dev/null +++ b/pdf/turkish/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-14 +description: C# kullanarak PDF üzerinde hızlıca dikdörtgen çizin. Dikdörtgen boyutlarını + nasıl tanımlayacağınızı ve sadece birkaç satırla bir PDF sayfasına şekil eklemeyi + öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: tr +lastmod: 2026-08-14 +og_description: C# ile PDF üzerinde saniyeler içinde dikdörtgen çizin. Bu rehber, + dikdörtgen boyutlarını nasıl tanımlayacağınızı, bir şekil ekleyeceğinizi ve güvenilir + PDF grafikleri için sayfa sınırlarını nasıl doğrulayacağınızı gösterir. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: PDF'de dikdörtgen çiz – tam C# öğreticisi +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: PDF'de dikdörtgen çiz – adım adım C# rehberi +url: /tr/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF üzerinde dikdörtgen çiz – tam C# öğreticisi + +C# kullanarak **draw rectangle on pdf** ihtiyacınız varsa, bu kılavuz size kısa ve üretim‑hazır bir çözüm gösterir. **how to define rectangle dimensions** nasıl tanımlanacağını tam olarak görecek, şeklin sığdığını doğrulayacak ve tek bir metod çağrısıyla bir sayfaya ekleyeceksiniz. + +Bu öğretici, PDF belgesi oluşturmaktan dikdörtgeni çizmeye kadar her şeyi kapsar, böylece kodu kendi projenize kopyalayıp yapıştırabilir ve sonuçları anında görebilirsiniz. Harici bir dokümantasyona gerek yok—sadece aşağıdaki adımları izleyin. + +## Önkoşullar + +* .NET 6.0 veya daha yeni (kod ayrıca .NET Framework 4.7+ ile de çalışır) +* The **Aspose.PDF for .NET** NuGet paketi (`Install-Package Aspose.PDF`) +* C# sözdizimi hakkında temel bir anlayış +* Visual Studio veya VS Code gibi bir IDE + +> **Pro tip:** Hızlı denemeler için Aspose.PDF'nin ücretsiz değerlendirme lisansını kullanın; küçük bir filigran ekler ancak tüm özellikleri test etmenizi sağlar. + +## C# ile PDF üzerinde dikdörtgen çizme + +Görevin çekirdeği, bir `RectangleShape` oluşturmak, boyut ve çizgi ayarlarını yapmak ve onu bir `Page`'e eklemektir. Aşağıdaki H2 başlığı birincil anahtar kelimeyi içerir ve SEO gereksinimlerini karşılar. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Her adımın açıklaması + +| Adım | Neden önemlidir | +|------|-----------------| +| **1️⃣ Yeni bir PDF belgesi oluştur** | Sayfaları ve grafikleri tutacak konteyneri başlatır. | +| **2️⃣ Boş bir sayfa ekle** | Şekiller bir sayfaya eklenir, doğrudan belgeye değil, bu yüzden bir `Page` nesnesine ihtiyacınız var. | +| **3️⃣ Dikdörtgen sınırlarını tanımla** | Bu, **how to define rectangle dimensions** yaptığınız yerdir. `Rectangle` yapıcıları `x`, `y`, `width` ve `height` değerlerini puan cinsinden alır (1 pt = 1/72 in). | +| **4️⃣ Dikdörtgen şekli oluştur** | `RectangleShape`, bir dikdörtgen çizen Aspose sınıfıdır. `StrokeColor` ayarı konturu tanımlar; aynı zamanda `FillColor` ile dolgu rengi de belirlenebilir. | +| **5️⃣ Sayfa sınırlarını doğrula** | `CheckShapeBoundary`, dikdörtgen sayfa boyutunu aşıyorsa bir istisna fırlatır ve hatalı PDF'lerin oluşmasını önler. | +| **6️⃣ Şekli sayfaya ekle** | Şekil, sayfanın içerik akışının bir parçası haline gelir. | +| **7️⃣ PDF'yi kaydet** | Belgeyi, herhangi bir PDF görüntüleyiciyle açabileceğiniz bir dosyaya yazar. | + +Oluşturulan `RectangleDemo.pdf`, sayfanın sol‑üst köşesine konumlandırılmış, tam olarak 500 pt genişliğinde ve 700 pt yüksekliğinde siyah bir dikdörtgen içerir. + +![pdf üzerinde dikdörtgen çiz örneği](https://example.com/rectangle-demo.png "pdf üzerinde dikdörtgen çiz örneği") + +*Görsel alt metni: pdf üzerinde dikdörtgen çiz örneği, PDF sayfasının sol üst köşesinde siyah bir dikdörtgen gösterir.* + +## Farklı sayfa boyutları için dikdörtgen boyutlarını nasıl tanımlarsınız + +Yukarıdaki kod parçacığı sabit değerler (`500 x 700`) kullanır. Gerçek uygulamalarda genellikle dikdörtgenin sayfanın genişliği ve yüksekliğine uyum sağlaması gerekir. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Anahtar noktalar:** + +* `page.PageInfo.Width` ve `Height` kullanarak gerçek sayfa boyutunu okuyun. +* Bir faktörle (ör. `0.8f`) çarparak boyutları sayfanın yüzde olarak ifade edebilirsiniz. +* Ortalamak, dikdörtgen boyutunu sayfa boyutundan çıkarıp kalan kısmı ikiye bölerek elde edilir. + +## Yaygın tuzaklar ve nasıl önlenir + +| Tuzak | Neden olur | Çözüm | +|-------|------------|-------| +| Dikdörtgen sayfanın dışına uzanır | Sabit kodlanmış boyutlar sayfa boyutundan büyük. | `page.CheckShapeBoundary` **şekli eklemeden önce** çağırın; bir istisna fırlatılırsa boyutları ayarlayın. | +| Kontur görünmez | `StrokeColor` varsayılan (`Color.Empty`) bırakılmış. | `StrokeColor`'ı açıkça ayarlayın (örn. `Color.Black`). | +| Dikdörtgen ekranda görünmez | PDF uzayında koordinatlar sol‑alt köşeden başlar; ekran‑stili üst‑sol koordinatlar kullanmak ters çevirmeye neden olur. | Orijinin `(0,0)` alt‑sol köşe olduğunu unutmayın. `y` değerini buna göre ayarlayın veya `pageHeight - desiredY` kullanın. | +| Beklenmedik çizgi kalınlığı | Varsayılan çizgi kalınlığı baskı için çok ince olabilir. | `rectangleShape.LineWidth = 2;` ile kalınlığı artırın. | + +## Örneği genişletmek + +**draw rectangle on pdf** yapabildiğinizde, diğer şekilleri kolayca ekleyebilirsiniz: + +* **EllipseShape** – daireler veya ovalar için. +* **PolygonShape** – özel çokgenler için. +* **TextFragment** – dikdörtgenlerinizi etiketlemek için. + +Tüm şekiller aynı iş akışını paylaşır: sınırları tanımlayın, görünümü yapılandırın, sınırları doğrulayın ve ardından sayfaya ekleyin. + +## Tam, çalıştırılabilir program + +Aşağıda temel dikdörtgeni ve dinamik boyutlandırma örneğini birleştiren tam program yer alıyor. Yeni bir konsol projesine kopyalayın, `Aspose.PDF` NuGet paketini geri yükleyin ve çalıştırın. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Beklenen çıktı:** +`CombinedRectangles.pdf` dosyasını açın. Alt‑sol köşeye yerleştirilmiş siyah bir dikdörtgen ve ortalanmış koyu‑mavi bir dikdörtgenin hafif‑sarı dolgu ile olduğunu göreceksiniz. Her iki dikdörtgen de sayfa kenar boşluklarına uyar. + +## Sonuç + +Artık C# ile **draw rectangle on pdf** ve sabit ve duyarlı düzenler için **how to define rectangle dimensions** nasıl tanımlanacağını kesin olarak biliyorsunuz. Yaklaşım, Aspose.PDF’nin `RectangleShape`, sınır kontrolü ve basit aritmetiği kullanarak herhangi bir sayfa boyutuna uyum sağlar. + +Sonraki adımda şunları keşfedebilirsiniz: + +* **fill colors** ve **line styles** (kesikli, noktalı) eklemek – ikincil anahtar kelime: how to define rectangle dimensions with style. +* Birden fazla şekli tek bir `Page` içinde birleştirerek grafikler veya formlar oluşturmak. +* PDF'yi diske kaydetmek yerine web API'leri için bir akıma (stream) dışa aktarmak. + +Farklı boyutlar, renkler ve konumlarla deney yaparak .NET uygulamalarınızda PDF grafiklerinde uzmanlaşın. Kodlamanın tadını çıkarın! + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanan 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. + +- [PDF'leri Aspose.PDF for .NET ile Özelleştirme: Sayfa Kenar Boşluklarını Ayarlama ve Çizgiler Çizme](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [PDF'lerde Sayfa Damgaları Eklemek Aspose.PDF for .NET ile: Tam Kılavuz](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [PDF'lerde Sayfa Numarası Damgaları Eklemek Aspose.PDF for .NET ile | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/conversion-export/_index.md b/pdf/turkish/net/conversion-export/_index.md index 85230d2629..853bf1bd0a 100644 --- a/pdf/turkish/net/conversion-export/_index.md +++ b/pdf/turkish/net/conversion-export/_index.md @@ -171,7 +171,7 @@ Aspose.PDF .NET kullanarak büyük Bilgisayar Grafikleri Meta Dosyası (CGM) gö Aspose.PDF for .NET kullanarak MHT dosyalarını zahmetsizce PDF'lere nasıl dönüştüreceğinizi öğrenin. Bu kılavuz kurulum, dönüştürme adımları ve en iyi uygulamaları kapsar. ### [.NET için Aspose.PDF Kullanarak Birden Fazla TIFF Görüntüsünü Tek Bir PDF'ye Nasıl Dönüştürebilirsiniz: Kapsamlı Bir Kılavuz](./convert-tiff-to-pdf-aspose-dotnet-guide/) -Aspose.PDF for .NET kullanarak birden fazla TIFF görüntüsünü tek bir PDF belgesine nasıl verimli bir şekilde dönüştüreceğinizi öğrenin. Bu kılavuz kurulum, uygulama ve performans optimizasyonunu kapsar. +Aspose.PDF for .NET kullanarak birden fazla TIFF görüntüsünü tek bir PDF belgesine nasıl verimli bir şekilde dönüştürebileceğinizi öğrenin. Bu kılavuz kurulum, uygulama ve performans optimizasyonunu kapsar. ### [.NET için Aspose.PDF Kullanarak PCL'yi PDF'ye Nasıl Dönüştürebilirsiniz: Eksiksiz Bir Kılavuz](./convert-pcl-to-pdf-aspose-net/) Aspose.PDF for .NET kullanarak Printer Command Language (PCL) dosyalarını sorunsuz bir şekilde PDF'ye nasıl dönüştüreceğinizi öğrenin. Kod örnekleri ve pratik uygulamalarla bu adım adım kılavuzu izleyin. @@ -230,6 +230,8 @@ Aspose.PDF for .NET kullanarak PDF belgelerini TIFF görüntülerine nasıl dön ### [Aspose ile PDF Kaydetme – Adım Adım Kılavuz](./how-to-save-pdf-with-aspose-step-by-step-guide/) Aspose.PDF for .NET kullanarak PDF dosyalarını kaydetme sürecini adım adım öğrenin. +### [C#'ta Aspose.PDF ile PDF'yi HTML olarak kaydedin ve PDF/X‑4'e dönüştürün](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) + ## Ek Kaynaklar - [Net Belgeleme için Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/turkish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/turkish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..875a4b8317 --- /dev/null +++ b/pdf/turkish/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: PDF'yi HTML olarak kaydedin ve Aspose.PDF for C# kullanarak PDF'yi PDF/X‑4'e + dönüştürün. Adım adım kod, HTML dışa aktarımını, imza listesini ve grafik durumu + düzenlemesini gösterir. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: tr +lastmod: 2026-08-14 +og_description: PDF'yi HTML olarak kaydedin ve Aspose.PDF for C# kullanarak PDF'yi + PDF/X‑4'e dönüştürün. HTML dışa aktarma, imzaları listeleme ve grafik durumlarını + düzenleme konularını kapsayan bu tam kılavuzu izleyin. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: PDF'yi HTML olarak kaydedin ve Aspose.PDF ile PDF/X‑4'e dönüştürün – C# + rehberi +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: PDF'yi HTML olarak kaydedin ve Aspose.PDF ile C#'ta PDF/X‑4'e dönüştürün +url: /tr/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'yi HTML Olarak Kaydedin ve Aspose.PDF ile C#'ta PDF/X‑4'e Dönüştürün + +Eğer **PDF'yi HTML olarak kaydetmeniz** gerekiyorsa, Aspose.Pdf süreci basitleştirir. Bu öğreticide ayrıca **PDF'yi PDF/X‑4'e dönüştürmeyi**, imza alanlarını listelemeyi ve özel bir ExtGState eklemeyi göstererek tam bir uçtan uca iş akışı sunar. + +Şunları öğreneceksiniz: + +* Raster görüntüleri atlayarak temiz bir HTML'e PDF dışa aktarma. +* Baskıya hazır çıktı için PDF belgesini PDF/X‑4 standardına dönüştürme. +* Bir PDF'teki tüm imza alanlarını listeleme. +* İlk sayfada özel bir grafik durumu (ExtGState) ekleme. + +Tüm kod .NET 6 veya sonraki sürümlerde çalışır ve Aspose.Pdf for .NET NuGet paketini gerektirir. + +## Prerequisites + +| Requirement | Reason | +|-------------|--------| +| .NET 6 SDK or newer | Provides the runtime for the C# sample. | +| Visual Studio 2022 (or any C# IDE) | Enables easy editing and debugging. | +| Aspose.Pdf for .NET (v23.12 or later) | Supplies the `Document`, `PdfFormatConversionOptions`, and `HtmlSaveOptions` classes used in the tutorial. | +| A sample PDF file (`sample.pdf`) | The source document that will be processed. | + +Install the library with: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +Program altı mantıksal adım gerçekleştirir: + +1. Kaynak PDF'i yükle. +2. Her imza alanı adını listele. +3. **PDF'yi PDF/X‑4'e dönüştür** ve sonucu kaydet. +4. **PDF'yi HTML olarak kaydet** ve raster görüntüleri atla. +5. İlk sayfaya özel bir ExtGState (grafik durumu) ekle. +6. Yeni grafik durumu ile değiştirilmiş PDF'i kaydet. + +Her adım aşağıda açıklanmıştır; tam kod ve seçimlerin gerekçesi de verilmiştir. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` represents the entire PDF file. Loading it once lets you reuse the same object for all subsequent operations, which reduces I/O overhead. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: Knowing the signature field names is essential when you need to validate, remove, or replace digital signatures later. The `Signatures` collection provides a fast, read‑only view of the fields. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` tells Aspose.Pdf to embed all required resources (fonts, color profiles) and to enforce the PDF/X‑4 constraints. +* The conversion runs in memory; only the final file is written to disk, keeping the operation fast. + +> **Pro tip:** Verify the output with a PDF/X‑4 validator (e.g., Adobe Preflight) if your downstream workflow is strict about compliance. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Why you might want this**: HTML output is useful for web preview or content indexing. Skipping raster images (`SkipRasterImages = true`) keeps the HTML lightweight and improves load times, especially when the original PDF contains high‑resolution scans. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: An **ExtGState** object controls transparency, blend mode, and other graphics parameters. By adding `GS0`, you can later reference this state in content streams (e.g., for semi‑transparent overlays). The code uses the low‑level COS API because Aspose.Pdf does not expose a high‑level wrapper for ExtGState creation. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +The final file (`sample_with_extgstate.pdf`) contains: + +* All original pages and content. +* A compliant PDF/X‑4 version (`sample_pdfx4.pdf`). +* An HTML representation without raster images (`sample.html`). +* A custom ExtGState (`GS0`) attached to the first page’s resources. + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +If the source PDF has no signatures, the loop prints nothing but still proceeds without error. + +## Common variations and edge cases + +| Situation | Adjustment | +|-----------|------------| +| **PDF contains no pages** | Check `doc.Pages.Count` before accessing `doc.Pages[1]` to avoid `IndexOutOfRangeException`. | +| **You need PDF/A‑2b instead of PDF/X‑4** | Change `PdfStandard.PdfX4` to `PdfStandard.PdfA2b` in `PdfFormatConversionOptions`. | +| **You want to keep raster images** | Set `SkipRasterImages = false` (or omit the property) in `HtmlSaveOptions`. | +| **Multiple ExtGState objects** | Use unique keys (`GS1`, `GS2`, …) when adding to `extGStateDict`. | +| **Large PDFs (hundreds of MB)** | Enable `doc.OptimizeResources = true` before saving to reduce memory usage. | + +## Full source code (runnable) + + + +## What Should You Learn Next? + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanarak yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanız ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmeniz için adım adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [Kapsamlı Rehber: Aspose.PDF .NET ile Özel Stratejiler Kullanarak PDF'yi HTML'e Dönüştürme](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Aspose.PDF .NET ile Özel Görüntü URL'leri Kullanarak PDF'yi HTML'e Dönüştürme: Kapsamlı Rehber](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [Aspose.PDF .NET ile PDF'den HTML'e Dönüştürme: Görüntüleri Harici PNG Olarak Kaydetme](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/programming-with-forms/_index.md b/pdf/turkish/net/programming-with-forms/_index.md index f17f20b5b0..1efcb78a78 100644 --- a/pdf/turkish/net/programming-with-forms/_index.md +++ b/pdf/turkish/net/programming-with-forms/_index.md @@ -23,7 +23,7 @@ Bu eğitimler ayrıca anlamanızı ve öğrenmenizi kolaylaştırmak için ayrı | --- | --- | | [Alana Araç İpucu Ekle](./add-tooltip-to-field/) | Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF belgelerindeki form alanlarına araç ipuçlarının nasıl ekleneceğini öğrenin. Kullanılabilirliği ve kullanıcı deneyimini geliştirin. | | [Arapça Metin Doldurma](./arabic-text-filling/) | Bu adım adım eğitimle Aspose.PDF for .NET kullanarak PDF formlarına Arapça metinleri nasıl dolduracağınızı öğrenin. PDF düzenleme becerilerinizi geliştirin. | -| [Kombo Kutusu](./combo-box/) Aspose.PDF for .NET kullanarak bir PDF'ye Combo Box eklemeyi öğrenin. Etkileşimli PDF formlarını kolayca oluşturmak için adım adım kılavuzumuzu izleyin. | +| [Kombo Kutusu](./combo-box/) Aspose.PDF for .NET kullanarak bir PDF'ye Combo Box eklemeyi öğrenin. Etkileşimli PDF formlarını kolayca oluşturmak için adım adım kılavuzumuzu izleyin. | | [Belge Oluştur](./create-doc/) | Bu kapsamlı adım adım kılavuzda Aspose.PDF for .NET kullanarak radyo düğmeli etkileşimli PDF belgeleri oluşturmayı öğrenin. | [PDF Belgesindeki Form Alanını Sil](./delete-form-field/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF belgelerindeki form alanlarını nasıl sileceğinizi öğrenin. Geliştiriciler ve PDF meraklıları için mükemmel. | | [PDF Formunda Gerekli Alanı Belirleyin](./determine-required-field/) | .NET için Aspose.PDF kullanarak bir PDF formundaki zorunlu alanların nasıl belirleneceğini öğrenin. Adım adım kılavuzumuz form yönetimini basitleştirir ve PDF otomasyon iş akışınızı geliştirir. | @@ -50,7 +50,8 @@ Bu eğitimler ayrıca anlamanızı ve öğrenmenizi kolaylaştırmak için ayrı | [Java Script'i Ayarla](./set-java-script/) | .NET için Aspose.PDF'nin gücünü açığa çıkarın. Adım adım kılavuzumuzla form alanlarında JavaScript'i nasıl kuracağınızı öğrenin. | | [Radyo Düğmesi Başlığını Ayarla](./set-radio-button-caption/) Aspose.PDF for .NET kullanarak PDF'lerde radyo düğmesi başlıklarının nasıl ayarlanacağını öğrenin. Bu adım adım kılavuz, PDF formlarınızı yükleme, değiştirme ve kaydetme konusunda size yol gösterir. | | [Metin Kutusu](./text-box/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'lere metin kutularını zahmetsizce nasıl ekleyeceğinizi keşfedin. Kullanıcı etkileşimini geliştirin. | -| [Aspose ile PDF Oluşturma – Form Alanı ve Sayfalar Ekle](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aspose.PDF for .NET kullanarak PDF'e form alanı eklemeyi ve sayfalar eklemeyi adım adım öğrenin. | +| [Aspose ile PDF Oluşturma – Form Alanı ve Sayfalar Ekle](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aspose.PDF for .NET kullanarak PDF'e form alanı eklemeyi ve sayfalar eklemeyi adım adım öğrenin. | +| [C#'ta PDF form alanı oluşturma – adım adım rehber](./create-pdf-form-field-in-c-step-by-step-guide/) | C# kullanarak PDF form alanı oluşturmayı adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/turkish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..5356347fc6 --- /dev/null +++ b/pdf/turkish/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-14 +description: C# ile PDF form alanını hızlıca oluşturun. PDF'ye metin kutusu eklemeyi + ve Aspose.PDF kullanarak PDF'yi metin kutusu içerecek şekilde değiştirmeyi öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: tr +lastmod: 2026-08-14 +og_description: C# ile PDF form alanı oluşturun. Bu öğreticide, bir PDF'ye metin kutusu + ekleme ve Aspose.PDF kullanarak bir PDF'yi metin kutusu içerecek şekilde değiştirme + gösterilmektedir. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: C#'te PDF Form Alanı Oluşturma – Tam Programlama Rehberi +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: C#'ta PDF form alanı oluşturma – adım adım rehber +url: /tr/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#’ta PDF form alanı oluşturma – adım adım kılavuz + +Bir belgede **create pdf form field** oluşturmanız gerekiyorsa, bu kılavuz sizi tüm süreç boyunca yönlendirecek. **add text box to pdf** sayfalara nasıl ekleyeceğinizi ve Aspose.PDF .NET kütüphanesini kullanarak **modify pdf to include text box** nasıl yapacağınızı tam olarak göreceksiniz. + +PDF formlarıyla çalışmak, fatura sistemleri, anketler veya kullanıcı girdisi toplayan herhangi bir iş akışı için yaygın bir gereksinimdir. Bu öğreticinin sonunda, tamamen işlevsel bir metin kutusu alanı oluşturan, istediğiniz yere yerleştiren ve güncellenmiş PDF’yi kaydeden yeniden kullanılabilir bir kod parçacığına sahip olacaksınız — tüm bunlar C# projenizden çıkmadan. + +## Önkoşullar + +* .NET 6.0 veya üzeri (kod ayrıca .NET Framework 4.7+ ile de çalışır) +* Visual Studio 2022 veya C# destekleyen herhangi bir IDE +* Aktif bir Aspose.PDF for .NET lisansı (ücretsiz deneme sürümü geliştirme için çalışır) +* `input.pdf` adlı bir PDF dosyası, bilinen bir dizine yerleştirilmiş (öğreticide `YOUR_DIRECTORY` yer tutucu olarak kullanılır) + +> **Pro ipucu:** Henüz bir lisansınız yoksa, Aspose’un web sitesinden geçici bir anahtar talep edebilirsiniz; kütüphane kod değişikliği yapmadan değerlendirme modunda çalışır. + +## C#’ta pdf form alanı oluşturma (genel bakış) + +1. Mevcut PDF belgesini yükleyin. +2. `TextBoxField` nesnesini oluşturun ve adını ve görünümünü yapılandırın. +3. Hedef sayfada görsel dikdörtgeni tanımlayan bir widget açıklaması ekleyin. +4. Alanı belgenin form koleksiyonuna ekleyin. +5. Değiştirilen PDF’yi kaydedin. + +Her adım aşağıda ayrıntılı olarak açıklanmıştır, tam kod örnekleri ve API çağrılarının mantığıyla birlikte. + +## Adım 1: PDF belgesini yükleme + +İlk işlem, kaynak PDF’yi okumaktır. Aspose.PDF, bir PDF dosyasını `Document` sınıfı ile temsil eder. Belgeyi yüklemek, sayfalarına, form koleksiyonuna ve diğer yapılara erişim sağlar. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Neden önemli:** +Dosyayı yüklemek, PDF’nin bellek içi bir modelini oluşturur ve orijinal dosyayı bozmadan nesneleri eklemenize, kaldırmanıza veya düzenlemenize olanak tanır. `Document` nesnesi ayrıca `Form` özelliğini ortaya çıkarır; burada daha sonra **add text box to pdf** yapacaksınız. + +## Adım 2: Metin kutusu alanı oluşturma + +Metin kutusu alanı, kullanıcıların serbest metin girmesine izin veren bir form alanı türüdür. Aspose.PDF’de bunu `TextBoxField` nesnesini örnekleyerek, hedef sayfayı ve widget’ın ilk boyutunu tanımlayan bir dikdörtgeni geçirerek oluşturursunuz. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Neden önemli:** +* `PartialName`, form işleme araçlarının (ör. Adobe Acrobat, sunucu‑tarafı ayrıştırıcılar) girilen değeri alırken kullandığı anahtardır. +* Burada geçirdiğiniz dikdörtgen yalnızca *ilk* widget boyutunu tanımlar; daha sonra bir widget açıklaması (sonraki adım) ile görsel konumunu ayarlayabilirsiniz. +* `DefaultAppearance` ayarlanması, kutu içindeki metnin görüntüleyiciler arasında tutarlı şekilde render edilmesini sağlar. + +## Adım 3: Görsel widget açıklamasını tanımlama + +Bir form alanı, alanın her sayfada nerede görüneceğini kontrol eden bir veya daha fazla **widget açıklaması** içerebilir. Bir widget ekleyerek aynı mantıksal alanı farklı bir konuma ya da hatta birden çok sayfaya yerleştirebilirsiniz. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Neden önemli:** +Widget dikdörtgeni, kullanıcıların gördüğü ekran koordinatlarını belirler. Bu adımı atlayarsanız, alan PDF’nin veri yapısında mevcut olabilir ancak son kullanıcıya görünmez. Bir widget eklemek, gerçekten **adds text box to pdf** yapan adımdır. + +## Adım 4: Yapılandırılmış alanı belgenin formuna ekleme + +`TextBoxField` tamamen yapılandırıldıktan sonra, PDF’nin form koleksiyonuna kaydetmeniz gerekir. Bu, alanı etkileşimli formun bir parçası yapar ve kaydedilmesini sağlar. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Neden önemli:** +`pdfDocument.Form`'a alan eklenmezse, PDF görüntüleyici widget açıklamasını görmezden gelir ve alan verileri asla gönderilmez. Bu satır **modify pdf to include text box** işlemini tamamlar. + +## Adım 5: Güncellenmiş PDF’yi kaydetme + +Son olarak, değişiklikleri diske geri yazın. Orijinal dosyanın üzerine yazabilir veya yeni bir dosya oluşturabilirsiniz; örnek `output.pdf`'ye kaydeder. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +`output.pdf`'yi Adobe Acrobat Reader’da açtığınızda, 2. sayfada “Comments” etiketiyle bir dikdörtgen metin kutusu göreceksiniz. Kullanıcılar içine tıklayıp yazabilir ve girilen metin PDF form verisinin bir parçası olur. + +## Tam çalışan örnek + +Tüm parçaları bir araya getirerek, işte tam, çalıştırmaya hazır bir program. Yeni bir konsol projesine kopyalayın, `YOUR_DIRECTORY`'yi gerçek bir klasör yolu ile değiştirin ve çalıştırın. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Beklenen çıktı:** +Programı çalıştırmak, konsola iki onay satırı yazdırır. `output.pdf`'yi açmak, kullanıcının yorum yazabileceği 2. sayfada bir metin kutusu gösterir. Form gönderildiğinde (ör. Adobe Acrobat’ın “Submit” düğmesiyle), `Comments` alan adı dışa aktarılan FDF veya XFDF verilerinde görünür. + +## Yaygın varyasyonlar ve uç durumlar + +| Durum | Kodu nasıl uyarlamalısınız | +|-----------|-----------------------| +| **Farklı bir sayfaya alan ekleyin** | `pdfDocument.Pages[1]` ifadesini istenen sayfa indeksine (`0` tabanlı) değiştirin. | +| **Çok satırlı bir metin kutusu oluşturun** | Widget eklemeden önce `textBox.Multiline = true;` ayarlayın. | +| **Varsayılan bir değer ayarlayın** | `textBox.Value = "Enter your comments here";` atayın. | +| **Alanı zorunlu yapın** | `textBox.Required = true;` ayarlayın. | +| **Alanı birden çok sayfaya yerleştirin** | Hedef sayfalardaki her ek dikdörtgen için `textBox.AddWidgetAnnotation` çağırın. | +| **Özel bir yazı tipi kullanın** | `FontRepository.AddFont("path/to/font.ttf")` ile yazı tipini yükleyin ve `DefaultAppearance` içinde referans verin. | + +**Pro ipucu:** Dikdörtgen koordinatlarını sayfa boyutuna (`pdfDocument.Pages[1].Rect`) karşı her zaman doğrulayın. Widget sayfa sınırlarının dışına çıkarsa, görüntüleyiciler alanı kırpabilir veya gizleyebilir. + +## Form alanını test etme + +1. `output.pdf`'yi Adobe Acrobat Reader’da açın. +2. “Comments” kutusunun içine tıklayın; imleç görünmelidir. +3. Herhangi bir metin yazın ve **Tab** tuşuna basın ya da başka bir yere tıklayın. +4. **File → Save As** seçeneğini seçerek girilen değeri kalıcı hale getirin. +5. (İsteğe bağlı) Aspose.PDF’nin `Form` API’sini kullanarak değeri programlı olarak çıkarın: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Bu kod parçacığı, alanın yalnızca görünür olmadığını, aynı zamanda kod aracılığıyla alınabilir olduğunu gösterir—sunucu‑tarafı işleme için gereklidir. + +## Sonuç + +Artık C#’ta **create pdf form field** nasıl yapılacağını baştan sona biliyorsunuz. Öğreticide PDF yükleme, bir `TextBoxField` yapılandırma, widget açıklaması ekleme, alanı kaydetme ve sonucu kaydetme konuları ele alındı. Bu yapı taşlarıyla **add text box to pdf** belgelerine, **modify pdf to include text box** ekleyebilir ve yaklaşımı onay kutuları, radyo düğmeleri veya açılır menüler gibi diğer alan türlerine genişletebilirsiniz. + +Sonra, **extracting form data**, **flattening PDF forms**, veya **styling fields with borders and colors** gibi ilgili konuları keşfedin. Bu kavramların her biri, yeni öğrendiğiniz aynı temel API üzerine inşa edilmiştir ve tamamen C# içinde gelişmiş etkileşimli PDF’ler oluşturmanıza olanak tanır. + +Kodlamaktan keyif alın ve uygulamanızın ihtiyaçlarına göre farklı dikdörtgenler, yazı tipleri ve doğrulama kurallarıyla denemeler yapmaktan çekinmeyin! + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan 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 ile PDF Belgesi Oluşturma – Sayfa, Metin Kutusu ve Form Ekle](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Aspose ile PDF Oluşturma – Form Alanı ve Sayfalar Ekle](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose.PDF .NET Kullanarak PDF’e Metin Damgası Ekleme: Kapsamlı Kılavuz](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/programming-with-operators/_index.md b/pdf/turkish/net/programming-with-operators/_index.md index 20dfde302d..e43493441a 100644 --- a/pdf/turkish/net/programming-with-operators/_index.md +++ b/pdf/turkish/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Aspose.PDF for .NET'in "Operatörlerle Programlama" eğitimleri, PDF programlama | [Sayfada XForm Çiz](./draw-xform-on-page/) | Bu kapsamlı adım adım kılavuzla .NET için Aspose.PDF kullanarak PDF'de XForms'un nasıl çizileceğini öğrenin. | | [PDF Operatörleri](./pdf-operators/) | Aspose.PDF for .NET ile PDF operatörlerini kullanma konusunda adım adım kılavuz. Bir PDF sayfasına resim ekleyin ve konumunu belirtin. | | [PDF Dosyasındaki Grafik Nesnelerini Kaldır](./remove-graphics-objects/) Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak bir PDF dosyasından grafik nesnelerinin nasıl kaldırılacağını öğrenin. PDF düzenleme görevlerinizi basitleştirin. | +| [C# ile Aspose.Pdf kullanarak boş PDF sözlüğü oluşturma](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Aspose.PDF for .NET kullanarak C# içinde boş bir PDF sözlüğü oluşturmayı öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/turkish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..8c38f1553c --- /dev/null +++ b/pdf/turkish/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-14 +description: Aspose.Pdf kullanarak C#'te boş PDF sözlüğü oluşturun – ExtGState koleksiyonuna + bir grafik durumu eklemeyi ve PDF'leri programlı olarak değiştirmeyi öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: tr +lastmod: 2026-08-14 +og_description: Aspose.Pdf ile C#’ta boş PDF sözlüğü oluşturun. PDF’nin ExtGState + koleksiyonuna özel bir grafik durumu eklemek için bu kapsamlı kılavuzu izleyin. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: C#'ta boş PDF sözlüğü oluşturma – Aspose.Pdf adım adım rehberi +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Aspose.Pdf ile C#’ta boş PDF sözlüğü oluştur +url: /tr/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Boş PDF sözlüğü oluşturma C# ile Aspose.Pdf + +PDF dosyalarıyla çalışırken **create empty PDF dictionary** nesneleri oluşturmanız gerekiyorsa, bu kılavuz C# ve Aspose.Pdf kütüphanesini kullanarak bunu tam olarak nasıl yapacağınızı gösterir. İster özel bir grafik durumu oluşturuyor olun, yeni bir kaynak ekliyor olun ya da daha sonra kullanmak üzere bir şablon hazırlıyor olun, aşağıdaki adımlar size eksiksiz, çalıştırılabilir bir çözüm sunar. + +PDF'yi nasıl yükleyeceğinizi, ilk sayfanın kaynak sözlüğüne nasıl erişeceğinizi, yepyeni bir `CosPdfDictionary` oluşturacağınızı ve bunu `ExtGState` koleksiyonuna nasıl ekleyeceğinizi öğreneceksiniz. Öğreticinin sonunda yeni oluşturulan sözlüğü içeren çalışan bir `output.pdf` elde edeceksiniz. + +## Önkoşullar + +- .NET 6.0 veya daha yenisi (kod ayrıca .NET Framework 4.6+ ile de çalışır) +- Visual Studio 2022 veya tercih ettiğiniz herhangi bir C# IDE +- Aspose.Pdf for .NET lisansı (veya geçici bir değerlendirme anahtarı) +- **input.pdf** adlı örnek bir PDF, kontrol ettiğiniz bir klasöre yerleştirilmiş (klasör yolu `dataDir` olarak kullanılacak) + +Ek bir NuGet paketi `Aspose.Pdf` dışında gerekli değildir. + +## Adım 1: Projeyi kurun ve Aspose.Pdf referansını ekleyin + +1. Visual Studio'da yeni bir **Console App** projesi oluşturun. +2. **NuGet Package Manager**'ı açın ve `Aspose.Pdf` paketini yükleyin: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. `Program.cs` dosyasının en üstüne aşağıdaki `using` yönergelerini ekleyin: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Neden bu ad alanları?* `Aspose.Pdf` temel `Document` sınıfını içerirken, `Aspose.Pdf.Operators.Gfx` **create empty PDF dictionary** yapılarına ihtiyaç duyulan `CosPdfDictionary`, `CosPdfNumber` ve ilgili düşük seviyeli PDF nesnelerini sağlar. + +## Adım 2: Kaynak PDF'yi yükleyin + +İlk işlem, mevcut PDF dosyasını bir `Document` örneğine yüklemektir. Bu, tüm sayfalara, kaynaklara ve düşük seviyeli sözlüklere erişmenizi sağlar. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Açıklama*: `Document` dosyayı belleğe okur ve iç yapılarını hazırlar. `using` ifadesi, işleme tamamlandıktan sonra dosya tutamacının serbest bırakılmasını sağlar. + +## Adım 3: İlk sayfanın kaynak sözlüğüne erişin + +Her PDF sayfasının, yazı tipleri, görseller, ExtGState nesneleri ve diğer ortak kaynakları gruplandıran bir **Resources** sözlüğü vardır. Yeni bir grafik durumu eklemek için bu sözlüğü düzenlememiz gerekir. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor`, bir PDF sözlüğünü C# `Dictionary` gibi kullanmanıza olanak tanıyan yardımcı bir sınıftır. + +## Adım 4: ExtGState koleksiyonunu alın (veya oluşturun) + +`ExtGState`, opaklık, karışım modu ve çizgi kalınlığı gibi grafik durumu nesnelerini tutar. Kaynak PDF zaten bir `ExtGState` girdisi içeriyorsa, onu yeniden kullanırız; aksi takdirde yeni bir boş sözlük oluştururuz. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Neden bu kontrol?* Bazı PDF'ler `ExtGState` girdisini tamamen atlayabilir. Her iki durumu da ele alarak, öğretici herhangi bir giriş dosyası için dayanıklı kalır. + +## Adım 5: Yeni bir grafik durumu için **Create empty PDF dictionary** oluşturun + +Şimdi gerçekten **create empty PDF dictionary** nesnelerini oluşturuyoruz; bu nesneler grafik durumu parametrelerini tanımlar. Sözlük başlangıçta boştur ve gerekli anahtarları ekleriz: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Her bir girdinin yaptığı şey + +| Anahtar | Tür | Anlam | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Çizgi opaklığı (aralık 0‑1). | +| **ca** | `CosPdfNumber` | Dolgu opaklığı (aralık 0‑1). | +| **BM** | `CosPdfName` | Karışım modu; `"Normal"` en yaygın olanıdır. | + +Bir **empty PDF dictionary** ile başladığımız için, eklenen girdiler üzerinde tam kontrol sahibiyiz. İhtiyaç duyduğunuzda bu sözlüğü `LW` (çizgi kalınlığı) veya `LC` (çizgi ucu) gibi ek grafik durumu parametreleriyle genişletebilirsiniz. + +## Adım 6: Yeni grafik durumunu ExtGState içine ekleyin + +`ExtGState` sözlüğü, her girdinin bir ad (ör. `GS0`, `GS1`) ile tanımlandığı bir harita gibi çalışır. Yeni oluşturduğumuz sözlüğü benzersiz bir anahtar altında ekliyoruz. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Birden fazla durum eklemeyi planlıyorsanız, ad çakışmalarını önlemek için soneki (`GS1`, `GS2`, …) artırın. + +## Adım 7: Değiştirilen PDF'yi kaydedin + +Son olarak, değişiklikleri diske geri yazın. `Save` yöntemi güncellenen sözlükleri otomatik olarak serileştirir. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Herhangi bir PDF görüntüleyicide `output.pdf` dosyasını açın ve **Resources → ExtGState** girdisini inceleyin (çoğu görüntüleyici bunu gizler, ancak Adobe Acrobat Preflight veya PDF‑Tron gibi araçlar gösterebilir). Tanımladığınız opaklık ve karışım modu değerlerini içeren bir `GS0` girdisi görmelisiniz. + +## Tam çalışan örnek + +Tüm parçaları bir araya getirerek, `Program.cs` içine kopyalayıp çalıştırabileceğiniz tam program aşağıdadır: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Beklenen çıktı** – Konsol bir onay satırı yazdırır ve `output.pdf` `ExtGState` altında yeni `GS0` girdisini içerir. `GS0`'a başvuran bir sayfayı (ör. içerik akışı operatörü `gs` ile) renderladığınızda, çizgiler tamamen opak, dolgu ise %50 şeffaf olacaktır. + +## Yaygın sorular ve kenar‑durumları ele alma + +| Soru | Cevap | +|----------|--------| +| *PDF'nin birden fazla sayfası olsaydı ne olur?* | Örnek ilk sayfayı hedefler (`Pages[1]`). Tüm sayfaları etkilemek için `pdfDocument.Pages` üzerinde döngü yapın ve her sayfanın kaynakları için adım 3‑5'i tekrarlayın. | +| *Zaten “GS0” adlı bir ExtGState girdisine sahip bir sayfaya sözlüğü ekleyebilir miyim?* | Evet, ancak mevcut girdiyi üzerine yazmamak için farklı bir anahtar (`GS1`, `GS2`, …) kullanmanız gerekir. | +| *Kaydetmeden sonra sözlüğü değiştirmek güvenli mi?* | `Save` metodunu çağırdığınızda, bellek içindeki temsil dosyadan ayrılır. Gerektiğinde `Document` nesnesini düzenlemeye devam edebilir ve tekrar `Save` çağırabilirsiniz. | +| *Aspose.Pdf'i kullanmak için lisansa ihtiyacım var mı?* | | + +## Sonraki Öğrenmeniz Gerekenler + +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çıklamalar içeren eksiksiz çalışan kod örnekleri sunar. + +- [Aspose.PDF for .NET ile PDF'lerde Kesikli Çizgiler Oluşturma: Adım Adım Kılavuz](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF .NET ile PDF'lerden Grafikleri Kaldırma: Tam Kılavuz](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Aspose.PDF for .NET ile Çok Katmanlı PDF'ler Oluşturma: Kapsamlı Kılavuz](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/programming-with-security-and-signatures/_index.md b/pdf/turkish/net/programming-with-security-and-signatures/_index.md index c22405ef16..f1b451c022 100644 --- a/pdf/turkish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/turkish/net/programming-with-security-and-signatures/_index.md @@ -35,7 +35,8 @@ Eğitim, PDF dosyalarınızın gizliliğini ve gerçekliğini sağlamak için y | [İmza Alanını Kullanarak Akıllı Kartla İmzalayın](./sign-with-smart-card-using-signature-field/) | Aspose.PDF for .NET ile akıllı kart kullanarak PDF'leri güvenli bir şekilde nasıl imzalayacağınızı öğrenin. Kolay uygulama için adım adım kılavuzumuzu izleyin. | | [C# ile PDF İmzalarını Kontrol Et – İmzalı PDF Dosyalarını Okuma](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Aspose.PDF for .NET kullanarak C# ile PDF imzalarını kontrol etmeyi ve imzalı dosyaları okumayı öğrenin. | | [PDF Dosyalarını Onarmak – Aspose.Pdf ile Tam C# Rehberi](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Aspose.PDF for .NET kullanarak PDF dosyalarını nasıl onaracağınızı adım adım öğrenin. | -| [C# ile PDF İmzasını Doğrulama – Tam Programlama Rehberi](./verify-pdf-signature-in-c-complete-programming-guide/) | Aspose.PDF for .NET ile C# kullanarak PDF imzalarını nasıl doğrulayacağınızı öğrenin. Adım adım tam rehber. | +| [C# ile PDF İmzasını Doğrulama – Tam Programlama Rehberi](./verify-pdf-signature-in-c-complete-programming-guide/) | Aspose.PDF for .NET ile C# kullanarak PDF imzalarını nasıl doğrulayacağınızı öğrenin. Adım adım tam rehber. | +| [C#'ta imza seçenekleri oluşturma – dijital imzalama tam rehberi](./create-signature-options-in-c-full-guide-to-digital-signing/) | Aspose.PDF for .NET kullanarak C# ile imza seçeneklerini oluşturmayı ve dijital imzalama sürecini adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/turkish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..91e90397ff --- /dev/null +++ b/pdf/turkish/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,314 @@ +--- +category: general +date: 2026-08-14 +description: C#'ta dijital imza uygulamak için imza seçenekleri oluşturun. İmzayı + nasıl yapılandıracağınızı, özel bir hash işlevi nasıl uygulayacağınızı ve belgeleri + programlı olarak nasıl imzalayacağınızı öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: tr +lastmod: 2026-08-14 +og_description: C#'ta imza seçenekleri oluşturun ve bir dijital imza uygulayın. Bu + öğretici, imzayı yapılandırma, özel bir hash işlevi ekleme ve bir belgeyi imzalama + adımlarını size gösterir. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: C#'ta imza seçenekleri oluşturun – adım adım dijital imzalama rehberi +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: C#'ta imza seçenekleri oluşturma – dijital imzalama için tam rehber +url: /tr/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#'ta imza seçenekleri oluşturma – dijital imzalama için tam rehber + +C#'ta imza seçenekleri oluşturarak bir dijital‑imza iş akışını yapılandırın. Bu öğreticide dijital imzanın nasıl uygulanacağını, özel bir hash işlevinin nasıl uygulanacağını ve bir belgeyi `SignatureOptions` sınıfı kullanarak nasıl imzalayacağınızı gösterir. .NET uygulamasından bir PDF, XML veya herhangi bir ikili yükü imzalamanız gerektiğinde, aşağıdaki adımlar size çalıştırmaya hazır bir çözüm sunar. + +Şunları öğreneceksiniz: + +* `SignatureOptions`'ı özel bir hash algoritmasıyla yapılandırmayı, +* imzalama metodunu doğru şekilde çağırmayı, +* imzanın uygulandığını doğrulamayı, +* imzayı yapılandırırken yaygın tuzaklardan kaçınmayı. + +Tek gereksinim, güncel bir .NET SDK (≥ .NET 6) ve `SignatureOptions` sağlayan bir imzalama kütüphanesidir (örneğin, **GroupDocs.Signature**, **Aspose.Signature** veya benzeri bir API). Harici araçlara ihtiyaç yoktur. + +--- + +## Prerequisites + +| Gereksinim | Neden Önemli | +|-------------|----------------| +| .NET 6 SDK veya daha yeni | Örneklerde kullanılan modern dil özelliklerini sağlar. | +| İmzalama kütüphanesi NuGet paketi (ör. `GroupDocs.Signature`) | `SignatureOptions` tipini ve `Sign` uzantı metodunu sağlar. | +| Özel anahtar veya sertifikaya erişim | Doğrulanabilir bir dijital imza oluşturmak için gereklidir. | + +Kütüphaneyi standart CLI ile kurun: + +```bash +dotnet add package GroupDocs.Signature +``` + +## Step 1: Create signature options + +### Adım 1: İmza seçeneklerini oluşturma + +İlk adım, `SignatureOptions` nesnesini örnekleyip imzalama sürecini kontrol eden özellikleri ayarlamaktır. Bu nesne, kütüphaneye *ne*yi imzalayacağını ve *nasıl* imzalayacağını söyler. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Neden Önemli:** `SignatureOptions`, kodunuz ile imzalama motoru arasında bir sözleşme görevi görür. Önceden yapılandırarak birden fazla belgeyi imzalarken tekrarlanan kod kalıplarından kaçınırsınız. + +## Step 2: Implement a custom hash function + +### Adım 2: Özel bir hash işlevi uygulama + +*Özel bir hash işlevi*, imza algoritmasının imzaladığı özet üzerinde tam kontrol sağlar. Bu, varsayılan hash (SHA‑256) uyumluluk gereksinimlerini karşılamadığında veya belgenin bir alt kümesini hash'lemeniz gerektiğinde faydalıdır. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Neden Önemli:** `CustomSignHash` atayarak, kütüphanenin dahili hash adımını `MyHash` ile değiştirirsiniz. İmzalama motoru artık işlevinizin döndürdüğü baytları imzalayacak, böylece özel politikaya uyumu sağlayacaktır. + +## Step 3: Load the document and apply digital signature + +### Adım 3: Belgeyi yükleyin ve dijital imzayı uygulayın + +Seçenekler hazır olduğunda, hedef dosyayı açabilir ve imzalama metodunu çağırabilirsiniz. `Sign` metodu kütüphane tarafından sağlanır ve yapılandırılmış `SignatureOptions`'ı kullanır. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Neden Önemli:** `Sign` çağrısı dahili olarak üç eylemi gerçekleştirir: + +1. **Hash calculation** – şimdi özel hash işlevinize devredilir. +2. **Signature generation** – kütüphanenin yapılandırmasına sağlanan özel anahtar kullanılarak üretilir. +3. **Embedding** – oluşturulan imza çıktı dosyasına eklenir. + +Herhangi bir adım başarısız olursa, metod `false` döndürür ve hatayı nazikçe ele almanıza olanak tanır. + +## Step 4: Verify that the document is signed + +### Adım 4: Belgenin imzalı olduğunu doğrulama + +Hızlı bir doğrulama, imzanın doğru şekilde uygulandığını teyit eder. Çoğu kütüphane, imzalı dosyanın bütünlüğünü kontrol eden bir `Verify` metodu sunar. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Neden Önemli:** Doğrulama, imzalı belgenin imzalandıktan sonra değiştirilmediğini ve özel hash'in uyumlu bir özet ürettiğini garantiler. + +## How to configure signature for different file types + +### Farklı dosya türleri için imzayı nasıl yapılandırılır + +Aynı `SignatureOptions` nesnesi PDF'ler, Word belgeleri, görüntüler veya düz ikili dosyalar için yeniden kullanılabilir. Tek gereken, belirli seçenek sınıfını (ör. `PdfSignatureOptions`, `WordSignatureOptions`) değiştirmektir. İşte bir JPEG görüntüsü için hızlı bir örnek: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Neden Önemli:** Her format için *imzayı yapılandırmayı* anlamak, aynı kod tabanını birden fazla belge türü üzerinde yeniden yazmadan genişletmenizi sağlar. + +## Common pitfalls and best practices + +### Yaygın tuzaklar ve en iyi uygulamalar + +| Tuzak | Önerilen çözüm | +|---------|-----------------| +| `SignatureOptions` oluşturduktan sonra `CustomSignHash` ayarlamayı unutmak | Seçenek nesnesini oluşturduktan hemen sonra delegeyi atayın. | +| İmzalama sertifikasının desteklemediği bir hash algoritması kullanmak | Sertifikanın anahtar kullanımının hash uzunluğuyla eşleştiğini doğrulayın (ör. RSA‑2048 ile SHA‑512). | +| `Signature` nesnelerini serbest bırakma ihtiyacını göz ardı etmek | `Signature` örneğini bir `using` bloğu içinde sararak dosya tutamaçlarını serbest bırakın. | +| İmzalı dosyayı orijinal kaynağın üzerine kaydetmek | Orijinal belgeyi korumak için her zaman yeni bir dosya yoluna (`outputPath`) yazın. | + +## Full working example + +### Tam çalışan örnek + +Aşağıda tüm parçaları bir araya getiren bağımsız bir program bulunmaktadır. Yeni bir konsol projesine kopyalayıp çalıştırın; konsol başarı ya da başarısızlığı raporlayacaktır. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Beklenen çıktı** + +``` +Signature verified successfully. +``` + +Eğer konsol “Signing failed.” veya “Signature verification failed.” mesajlarını yazdırırsa, sertifika yapılandırmasını iki kez kontrol edin ve özel hash'in beklenen boyutta bir byte dizisi döndürdüğünden emin olun. + +## Conclusion + +### Sonuç + +Artık C#'ta **imza seçeneklerini oluşturmayı**, bir **özel hash işlevi eklemeyi** ve desteklenen herhangi bir belgeye **dijital imza uygulamayı** biliyorsunuz. Öğreticide tam yaşam döngüsü ele alındı: seçeneklerin yapılandırılması, dosyanın imzalanması ve sonucun doğrulanması. Aynı `SignatureOptions` örneğini yeniden kullanarak görüntüler, Word dosyaları veya ham ikili dosyalar için **imzayı nasıl yapılandıracağınızı** da yapabilirsiniz. + +## What’s next? + +### Sonraki Adımlar + +* Görsel damgalar, zaman damgası sunucuları ve sertifika zincirleri gibi ek `SignatureOptions` özelliklerini keşfedin – bunlar **apply digital signature** anahtar kelimesiyle uyumludur. +* Diğer hash algoritmalarını (ör. Blake2b) `MyHash` içindeki uygulamayı değiştirerek deneyin. +* İmzalama akışını bir web API'ye entegre ederek anlık belge imzalamayı etkinleştirin – bu, hizmet‑yönelimli mimaride **how to sign document** ifadesinin doğal bir uzantısıdır. + +Kodu kendi güvenlik politikalarınıza göre uyarlamaktan çekinmeyin ve deneyiminizi yorumlarda paylaşın. İyi imzalar! + +## What Should You Learn Next? + +### Bir Sonraki Öğrenmeniz Gerekenler + +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ı olmak için adım adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [How to Change PDF Signature Language with Aspose.PDF for .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/programming-with-stamps-and-watermarks/_index.md b/pdf/turkish/net/programming-with-stamps-and-watermarks/_index.md index 9a130f9f7b..8a9100aa5e 100644 --- a/pdf/turkish/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/turkish/net/programming-with-stamps-and-watermarks/_index.md @@ -40,6 +40,7 @@ Aspose.PDF'nin .NET için "Pullar ve Filigranlarla Programlama" öğreticileri, | [PDF Dosyasının Altbilgisindeki Metin](./text-in-footer/) | Aspose.PDF for .NET ile PDF dosyasının alt bilgisine metin eklemeyi öğrenin. | | [PDF Dosyasının Başlığındaki Metin](./text-in-header/) | Bu adım adım eğitimle Aspose.PDF for .NET kullanarak PDF'lere metin başlıkları eklemeyi öğrenin. Belgelerinizi verimli ve etkili bir şekilde geliştirin. | | [C# ile Bates Numaralandırma PDF Ekle – Tam Kılavuz](./add-bates-numbering-pdf-in-c-complete-guide/) | Aspose.PDF for .NET kullanarak PDF dosyalarına Bates numaralandırma eklemeyi adım adım öğrenin. | +| [C# ile Bates Numaralandırma Seçeneklerini Ayarlama – Tam Kılavuz](./how-to-set-bates-numbering-options-in-c-complete-guide/) | Aspose.PDF for .NET kullanarak C# içinde Bates numaralandırma seçeneklerini nasıl ayarlayacağınızı adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/turkish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..bffcd82bfd --- /dev/null +++ b/pdf/turkish/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-08-14 +description: GroupDocs kullanarak C#'de bates numaralandırma seçeneklerini nasıl ayarlayacağınız. + Word'ü PDF'ye dönüştürürken özel ön ekler ve başlangıç numaraları eklemek için bu + adım adım öğreticiyi izleyin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: tr +lastmod: 2026-08-14 +og_description: C#'ta Bates numaralandırma seçeneklerini hızlıca nasıl ayarlayacağınız. + Bu rehber, Word'ü PDF'ye dönüştürürken özel önekler ve başlangıç numaraları eklemeyi + gösterir. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: C#'ta Bates numaralandırma seçeneklerini nasıl ayarlarsınız – adım adım + öğretici +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: C#'ta Bates numaralandırma seçeneklerini nasıl ayarlarsınız – tam rehber +url: /tr/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#'ta bates numaralandırma seçeneklerini nasıl ayarlarsınız – tam kılavuz + +C#'ta **how to set bates numbering options**'a ihtiyacınız varsa, bu kılavuz size adım adım nasıl yapılacağını gösterir. Başlangıç numarasını nasıl yapılandıracağınızı, bir önek ekleyeceğinizi ve Word belgesini PDF'ye dönüştürürken numaralandırmayı nasıl uygulayacağınızı GroupDocs API kullanarak öğreneceksiniz. + +Belge işleme, yasal veya arşiv amaçları için her sayfada benzersiz tanımlayıcılara ihtiyaç duyabilir. Bu öğreticinin sonunda, ister bir dava destek aracı ister otomatik rapor oluşturucu geliştirin, herhangi bir .NET projesine ekleyebileceğiniz yeniden kullanılabilir bir kod parçacığına sahip olacaksınız. Harici araçlara gerek yok—sadece GroupDocs.Conversion kütüphanesi ve birkaç satır C#. + +## What you’ll need + +Başlamadan önce, şunların yüklü olduğundan emin olun: + +* .NET 6.0 SDK veya daha yeni bir sürüm yüklü +* Visual Studio 2022 (veya .NET'i destekleyen herhangi bir IDE) +* Geçerli bir GroupDocs.Conversion lisansı (ücretsiz deneme sürümü test için çalışır) +* Numaralandırmak istediğiniz örnek Word belgesi (`input.docx`) + +Bu önkoşullar, kodun ek yapılandırma olmadan çalışmasını sağlar. + +## How to set bates numbering options – overview + +**how to set bates numbering options**'ın temeli üç nesnede yatar: + +1. `Document` – kaynak dosyayı yükler. +2. `BatesNumberingOptions` – başlangıç numarasını, önekini ve diğer biçimlendirme ayrıntılarını tutar. +3. `AddBatesNumbering` – numaralandırmayı her sayfaya ekleyen yöntem. + +Her parçanın neden var olduğunu anlamak, özel yazı tipleri veya çok‑dilli numaralandırma gibi daha karmaşık senaryolara uyum sağlamanıza yardımcı olur. + +## Step 1: Install the GroupDocs.Conversion NuGet package + +Çözüm klasörünüzde bir terminal açın ve çalıştırın: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API**, daha sonra öğreticide kullanılan `Document` sınıfını ve `AddBatesNumbering` uzantı metodunu sağlar. + +## Step 2: Load the source document + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Bu adım neden?* +Dosyanın yüklenmesi, dönüşüm motorunun manipüle edebileceği bellek içi bir temsil oluşturur. Bir `Document` örneği olmadan Bates numaralandırması ya da başka bir dönüşüm uygulayamazsınız. + +## Step 3: Create the Bates numbering options + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Bu adım neden?* +`BatesNumberingOptions`, **setting bates numbering options** sırasında ihtiyaç duyabileceğiniz tüm ayarları kapsar. `StartNumber` ve `Prefix` ayarları, çıktıyı dava‑yönetim sisteminizle uyumlu hâle getirmenizi sağlar. `Position` özelliği, genellikle uyumluluk gereksinimi olan görsel konumu kontrol eder. + +## Step 4: Apply Bates numbering to the document + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +`AddBatesNumbering` yöntemi, yüklü `Document`'in her sayfasını dolaşır ve yapılandırılmış dizeyi ekler. Yöntem bellek içi temsil üzerinde çalıştığı için, kaydetmeden önce ek işleme adımları (ör. filigran ekleme) zincirlenebilir. + +## Step 5: Convert and save the result as PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Bu adım neden?* +PDF olarak kaydetmek, yasal belgeler için yaygın bir son formattır. `PdfConvertOptions` nesnesi çıktıyı ince ayar yapmanıza olanak tanır, ancak temel numaralandırma için zorunlu değildir. `Save` çağrısı, tamamen numaralandırılmış PDF'i diske yazar. + +## Complete, runnable example + +Her şeyi bir araya getirerek, derleyip çalıştırabileceğiniz bağımsız bir konsol uygulaması aşağıdadır: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Beklenen çıktı** + +Programı çalıştırdığınızda, her sayfada `CASE-1000`, `CASE-1001` gibi bir etiket gösteren `output.pdf` oluşturulur ve bu etiket sağ alt kısımda konumlandırılır. Sayıyı istediğiniz gibi göründüğünden emin olmak için PDF'i herhangi bir görüntüleyicide açın. + +## Common pitfalls and best practices + +| Sorun | Neden olur | Nasıl önlenir | +|-------|------------|---------------| +| **Göreceli yollar `FileNotFoundException` hatasına neden olur** | Bir konsol uygulamasının çalışma dizini, Visual Studio'nunkinden farklı olabilir. | Mutlak yollar kullanın veya `Path.Combine(AppContext.BaseDirectory, "input.docx")` kullanın. | +| **Numaralandırma mevcut altbilgileri örtüyor** | Kaynak belgede zaten seçilen altbilgi alanında içerik varsa, yeni numara gizlenebilir. | Farklı bir `Position` (ör. `HeaderLeft`) seçin veya kaynak şablonu ayarlayın. | +| **Büyük belgeler yavaş çalışır** | Bates numaralandırma her sayfada tekrarlanır; bellek kullanımı dosya boyutuyla artar. | 500 sayfayı aşarsanız belgeyi `Document.Split` kullanarak parçalar halinde işleyin. | +| **Lisans süresi dolması** | GroupDocs ücretsiz deneme sürümü 30 gün sonra sona erer ve `AddBatesNumbering` sırasında bir istisna oluşur. | Belgeyi yüklemeden önce geçerli bir lisans anahtarı uygulayın: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tip:** Her dava için farklı bir sayı formatına (ör. `2023-CASE-001`) ihtiyacınız varsa, `BatesNumberingOptions` oluşturulmadan önce öneki dinamik olarak oluşturun. + +## Extending the solution + +Aynı **Bates numbering C#** yaklaşımı, `.txt`, `.html` veya hatta görüntüler gibi diğer kaynak formatlarıyla da çalışır. `Document` nesnesi oluşturulurken dosya uzantısını değiştirmeniz yeterlidir; dönüşüm motoru geri kalanını halleder. + +Ayrıca **document conversion C#**'ı taranmış PDF'ler için OCR ile birleştirebilirsiniz: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Conclusion + +Artık **how to set bates numbering options**'ı C#'ta baştan sona nasıl yapacağınızı biliyorsunuz. Bir `BatesNumberingOptions` nesnesi oluşturup, `AddBatesNumbering` ile uygulayarak ve sonucu PDF olarak kaydederek, yasal uyumlu ve benzersiz şekilde tanımlanmış belgelerin üretimini otomatikleştirebilirsiniz. + +Buradan **C# PDF generation**, **document conversion C#** gibi ilgili konuları veya filigran ekleme ve dijital imzalar gibi gelişmiş **GroupDocs API** özelliklerini keşfedebilirsiniz. İş akışınıza uyması için farklı önekler, konumlar ve sayı formatlarıyla deneyler yapın. + +Kodlamanın tadını çıkarın! + +## What Should You Learn Next? + +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ı olacak tam çalışan kod örnekleri ve adım adım açıklamalar içerir. + +- [C#'ta Bates Numaralandırma PDF Ekle – Tam Kılavuz](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Aspose.PDF for .NET Kullanarak PDF'lerde Sayfa Numaralarını Ekleme ve Özelleştirme – Belge Manipülasyonu Kılavuzu](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Aspose.PDF for .NET Kullanarak PDF'lere Metin Damga Altbilgisi Ekleme: Adım Adım Kılavuz](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/annotations/_index.md b/pdf/vietnamese/net/annotations/_index.md index 2bbe0dfe7a..0ff2ce7ee0 100644 --- a/pdf/vietnamese/net/annotations/_index.md +++ b/pdf/vietnamese/net/annotations/_index.md @@ -35,6 +35,7 @@ Một bộ sưu tập toàn diện các hướng dẫn giới thiệu cách làm | [Thiết lập định dạng chú thích văn bản miễn phí](./setfreetextannotationformatting/) | Tìm hiểu cách thiết lập định dạng chú thích văn bản tự do trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | | [Gạch bỏ các từ](./strikeoutwords/) | Tìm hiểu cách gạch bỏ các từ trong PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước toàn diện này. Nâng cao kỹ năng chỉnh sửa tài liệu của bạn. | | [Cập nhật chú thích PDF văn bản miễn phí](./updatefreetextannotation/) Tìm hiểu cách cập nhật chú thích văn bản tự do trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Vẽ hình chữ nhật trên PDF – hướng dẫn từng bước C#](./draw-rectangle-on-pdf-step-by-step-c-guide/) | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md b/pdf/vietnamese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md new file mode 100644 index 0000000000..dfda01a38a --- /dev/null +++ b/pdf/vietnamese/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-08-14 +description: Vẽ hình chữ nhật trên PDF nhanh chóng bằng C#. Tìm hiểu cách xác định + kích thước hình chữ nhật và thêm các hình dạng vào trang PDF chỉ trong vài dòng. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- draw rectangle on pdf +- how to define rectangle dimensions +language: vi +lastmod: 2026-08-14 +og_description: Vẽ hình chữ nhật trên PDF bằng C# trong vài giây. Hướng dẫn này chỉ + cách xác định kích thước hình chữ nhật, thêm một hình dạng và kiểm tra ranh giới + trang để có đồ họa PDF đáng tin cậy. +og_image_alt: Screenshot of a PDF page showing a black rectangle drawn with C# code +og_title: vẽ hình chữ nhật trên PDF – hướng dẫn C# đầy đủ +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: draw rectangle on pdf quickly using C#. Learn how to define rectangle + dimensions and add shapes to a PDF page in just a few lines. + headline: draw rectangle on pdf – step‑by‑step C# guide + type: TechArticle +tags: +- PDF +- C# +- Aspose.PDF +- RectangleShape +- Graphics +title: Vẽ hình chữ nhật trên PDF – hướng dẫn C# từng bước +url: /vi/net/annotations/draw-rectangle-on-pdf-step-by-step-c-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# vẽ hình chữ nhật trên pdf – hướng dẫn C# đầy đủ + +Nếu bạn cần **vẽ hình chữ nhật trên pdf** bằng C#, hướng dẫn này sẽ cho bạn một giải pháp ngắn gọn, sẵn sàng cho môi trường sản xuất. Bạn sẽ thấy **cách xác định kích thước hình chữ nhật**, kiểm tra xem hình có vừa trong trang hay không, và thêm nó vào trang chỉ bằng một lời gọi phương thức. + +Bài học bao gồm mọi thứ từ tạo tài liệu PDF đến render hình chữ nhật, vì vậy bạn có thể sao chép‑dán mã vào dự án của mình và thấy kết quả ngay lập tức. Không cần tài liệu bên ngoài — chỉ cần thực hiện 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+) +* Gói NuGet **Aspose.PDF for .NET** (`Install-Package Aspose.PDF`) +* Kiến thức cơ bản về cú pháp C# +* Một IDE như Visual Studio hoặc VS Code + +> **Mẹo chuyên nghiệp:** Sử dụng giấy phép dùng thử miễn phí của Aspose.PDF để thử nghiệm nhanh; nó sẽ thêm một watermark nhỏ nhưng cho phép bạn kiểm tra mọi tính năng. + +## Cách vẽ hình chữ nhật trên PDF bằng C# + +Cốt lõi của nhiệm vụ là tạo một `RectangleShape`, thiết lập kích thước và nét viền, rồi gắn nó vào một `Page`. Tiêu đề H2 dưới đây chứa từ khóa chính, đáp ứng yêu cầu SEO. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class Program +{ + static void Main() + { + // 1️⃣ Create a new PDF document + Document pdfDoc = new Document(); + + // 2️⃣ Add a blank page (default size: A4) + Page page = pdfDoc.Pages.Add(); + + // 3️⃣ Define the rectangle bounds (x, y, width, height) + // This demonstrates how to define rectangle dimensions. + Rectangle rectBounds = new Rectangle(0, 0, 500, 700); + + // 4️⃣ Create the rectangle shape and set its stroke color + RectangleShape rectangleShape = new RectangleShape(rectBounds) + { + StrokeColor = Color.Black // black outline + }; + + // 5️⃣ Verify that the shape fits within the page boundaries + page.CheckShapeBoundary(rectangleShape); + + // 6️⃣ Add the shape to the page + page.Add(rectangleShape); + + // 7️⃣ Save the PDF to disk + string outPath = "RectangleDemo.pdf"; + pdfDoc.Save(outPath); + Console.WriteLine($"PDF saved to {outPath}"); + } +} +``` + +### Giải thích từng bước + +| Bước | Lý do quan trọng | +|------|-------------------| +| **1️⃣ Tạo một tài liệu PDF mới** | Khởi tạo container sẽ chứa các trang và đồ họa. | +| **2️⃣ Thêm một trang trống** | Bạn cần một đối tượng `Page` vì các hình được gắn vào trang, không phải trực tiếp vào tài liệu. | +| **3️⃣ Xác định giới hạn của hình chữ nhật** | Đây là nơi bạn **cách xác định kích thước hình chữ nhật**. Hàm khởi tạo `Rectangle` nhận `x`, `y`, `width`, và `height` tính bằng point (1 pt = 1/72 in). | +| **4️⃣ Tạo hình chữ nhật** | `RectangleShape` là lớp Aspose dùng để render hình chữ nhật. Đặt `StrokeColor` để xác định viền; bạn cũng có thể đặt `FillColor` cho màu nền đặc. | +| **5️⃣ Kiểm tra giới hạn trang** | `CheckShapeBoundary` ném ngoại lệ nếu hình chữ nhật vượt quá kích thước trang, ngăn PDF bị hỏng. | +| **6️⃣ Thêm hình vào trang** | Hình trở thành một phần của luồng nội dung trang. | +| **7️⃣ Lưu PDF** | Ghi tài liệu ra file để bạn có thể mở bằng bất kỳ trình xem PDF nào. | + +File `RectangleDemo.pdf` tạo ra sẽ chứa một hình chữ nhật màu đen nằm ở góc trên‑trái của trang, rộng chính xác 500 pt và cao 700 pt. + +![ví dụ vẽ hình chữ nhật trên pdf](https://example.com/rectangle-demo.png "ví dụ vẽ hình chữ nhật trên pdf") + +*Văn bản thay thế hình ảnh: ví dụ vẽ hình chữ nhật trên pdf hiển thị một hình chữ nhật màu đen ở góc trên bên trái của trang PDF.* + +## Cách xác định kích thước hình chữ nhật cho các kích thước trang khác nhau + +Đoạn mã trên sử dụng giá trị cố định (`500 x 700`). Trong các ứng dụng thực tế, bạn thường cần hình chữ nhật thích ứng với chiều rộng và chiều cao của trang. + +```csharp +// Get page dimensions (in points) +float pageWidth = page.PageInfo.Width; +float pageHeight = page.PageInfo.Height; + +// Define a rectangle that occupies 80% of the page width and 50% of the height +float rectWidth = pageWidth * 0.8f; +float rectHeight = pageHeight * 0.5f; + +// Center the rectangle on the page +float rectX = (pageWidth - rectWidth) / 2; +float rectY = (pageHeight - rectHeight) / 2; + +Rectangle dynamicRect = new Rectangle(rectX, rectY, rectWidth, rectHeight); +RectangleShape dynamicShape = new RectangleShape(dynamicRect) +{ + StrokeColor = Color.DarkBlue, + FillColor = Color.LightGray // optional fill +}; + +page.CheckShapeBoundary(dynamicShape); +page.Add(dynamicShape); +``` + +**Các điểm chính:** + +* Sử dụng `page.PageInfo.Width` và `Height` để đọc kích thước thực tế của trang. +* Nhân với một hệ số (ví dụ, `0.8f`) cho phép bạn biểu diễn kích thước dưới dạng phần trăm của trang. +* Căn giữa được thực hiện bằng cách trừ kích thước hình chữ nhật khỏi kích thước trang và chia đôi phần còn lại. + +## Những lỗi thường gặp và cách tránh + +| Lỗi | Nguyên nhân | Cách khắc phục | +|-----|--------------|----------------| +| Hình chữ nhật vượt ra ngoài trang | Kích thước cứng mã lớn hơn kích thước trang. | Gọi `page.CheckShapeBoundary` **trước** khi thêm hình; điều chỉnh kích thước nếu có ngoại lệ. | +| Viền không hiển thị | `StrokeColor` để mặc định (`Color.Empty`). | Đặt rõ ràng `StrokeColor` (ví dụ, `Color.Black`). | +| Hình chữ nhật xuất hiện ngoài màn hình | Tọa độ bắt đầu ở góc dưới‑trái trong không gian PDF; dùng tọa độ kiểu màn hình (trên‑trái) gây lộn ngược. | Nhớ rằng gốc `(0,0)` là góc dưới‑trái. Điều chỉnh `y` cho phù hợp hoặc dùng `pageHeight - desiredY`. | +| Độ dày đường không mong muốn | Độ dày mặc định có thể quá mỏng cho việc in. | Đặt `rectangleShape.LineWidth = 2;` để tăng độ dày. | + +## Mở rộng ví dụ + +Khi bạn đã có thể **vẽ hình chữ nhật trên pdf**, bạn có thể dễ dàng thêm các hình khác: + +* **EllipseShape** – cho vòng tròn hoặc hình bầu dục. +* **PolygonShape** – cho các đa giác tùy chỉnh. +* **TextFragment** – để gắn nhãn cho các hình chữ nhật. + +Tất cả các hình đều tuân theo quy trình giống nhau: xác định giới hạn, cấu hình giao diện, kiểm tra ranh giới, rồi thêm vào trang. + +## Chương trình hoàn chỉnh, có thể chạy ngay + +Dưới đây là toàn bộ chương trình kết hợp ví dụ hình chữ nhật cơ bản và ví dụ kích thước động. Sao chép vào một dự án console mới, khôi phục gói NuGet `Aspose.PDF`, và chạy. + +```csharp +using System; +using System.Drawing; +using Aspose.Pdf; +using Aspose.Pdf.Drawing; + +class RectangleDemo +{ + static void Main() + { + // Create document and page + Document doc = new Document(); + Page page = doc.Pages.Add(); + + // ==== Fixed‑size rectangle (basic example) ==== + Rectangle fixedRect = new Rectangle(0, 0, 500, 700); + RectangleShape fixedShape = new RectangleShape(fixedRect) + { + StrokeColor = Color.Black, + LineWidth = 1 + }; + page.CheckShapeBoundary(fixedShape); + page.Add(fixedShape); + + // ==== Dynamic rectangle that adapts to page size ==== + float pageW = page.PageInfo.Width; + float pageH = page.PageInfo.Height; + + float dynWidth = pageW * 0.6f; + float dynHeight = pageH * 0.3f; + float dynX = (pageW - dynWidth) / 2; + float dynY = (pageH - dynHeight) / 2; + + Rectangle dynamicRect = new Rectangle(dynX, dynY, dynWidth, dynHeight); + RectangleShape dynamicShape = new RectangleShape(dynamicRect) + { + StrokeColor = Color.DarkBlue, + FillColor = Color.LightYellow, + LineWidth = 2 + }; + page.CheckShapeBoundary(dynamicShape); + page.Add(dynamicShape); + + // Save PDF + string outFile = "CombinedRectangles.pdf"; + doc.Save(outFile); + Console.WriteLine($"PDF created: {outFile}"); + } +} +``` + +**Kết quả mong đợi:** +Mở `CombinedRectangles.pdf`. Bạn sẽ thấy một hình chữ nhật màu đen gắn ở góc dưới‑trái và một hình chữ nhật màu xanh đậm ở giữa với nền màu vàng nhạt. Cả hai hình đều tuân theo lề trang. + +## Kết luận + +Bây giờ bạn đã biết cách **vẽ hình chữ nhật trên pdf** bằng C# và chính xác **cách xác định kích thước hình chữ nhật** cho cả bố cục cố định và đáp ứng. Phương pháp sử dụng `RectangleShape` của Aspose.PDF, kiểm tra ranh giới, và các phép tính đơn giản để thích ứng với bất kỳ kích thước trang nào. + +Tiếp theo, bạn có thể khám phá: + +* Thêm **màu nền** và **kiểu đường** (gạch đứt, chấm) – từ khóa phụ: cách xác định kích thước hình chữ nhật với kiểu dáng. +* Kết hợp nhiều hình vào một `Page` để tạo biểu đồ hoặc mẫu đơn. +* Xuất PDF ra stream cho API web thay vì lưu vào đĩa. + +Thử nghiệm với các kích thước, màu sắc và vị trí khác nhau để thành thạo đồ họa PDF trong các ứng dụng .NET của bạn. 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 đề 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 bài viết này. Mỗi tài nguyên bao gồm mã mẫu đầy đủ với giải thích từng bước để giúp bạn làm chủ 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 tùy chỉnh PDF với Aspose.PDF for .NET: Đặt lề trang và vẽ đường](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) +- [Cách thêm dấu trang (stamp) vào PDF bằng Aspose.PDF for .NET: Hướng dẫn toàn diện](/pdf/english/net/watermarks-backgrounds/add-page-stamp-aspose-pdf-dotnet-guide/) +- [Cách thêm dấu số trang vào PDF bằng Aspose.PDF for .NET | Watermarks & Backgrounds](/pdf/english/net/watermarks-backgrounds/add-page-number-stamp-using-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/conversion-export/_index.md b/pdf/vietnamese/net/conversion-export/_index.md index 67f9fe7c51..c6f96e6db5 100644 --- a/pdf/vietnamese/net/conversion-export/_index.md +++ b/pdf/vietnamese/net/conversion-export/_index.md @@ -161,7 +161,7 @@ Tìm hiểu cách chuyển đổi hình ảnh Computer Graphics Metafile (CGM) s ### [Cách chuyển đổi EPUB sang PDF bằng Aspose.PDF .NET: Hướng dẫn từng bước](./convert-epub-pdf-aspose-pdf-net-guide/) Tìm hiểu cách chuyển đổi tệp EPUB sang PDF bằng Aspose.PDF cho .NET với hướng dẫn chi tiết này. Hoàn hảo cho các nhà phát triển cần chuyển đổi tài liệu liền mạch. -### [Cách chuyển đổi HTML sang PDF bằng Aspose.PDF .NET: Hướng dẫn đầy đủ](./convert-html-pdf-aspose-dotnet-guide/) +### [Cách chuyển đổi HTML sang PDF bằng Aspose.PDF .NET: Hướng dẫn đầy đủ](./convert-html-pdf-aspose-pdf-net-guide/) Tìm hiểu cách chuyển đổi hiệu quả các tài liệu HTML thành PDF chuyên nghiệp bằng Aspose.PDF .NET. Khám phá các kỹ thuật xử lý tài nguyên bên ngoài và hiển thị nội dung phức tạp. ### [Cách chuyển đổi hình ảnh CGM lớn sang PDF bằng Aspose.PDF .NET: Hướng dẫn toàn diện](./convert-large-cgm-images-to-pdf-aspose-pdf-net/) @@ -224,6 +224,9 @@ Làm chủ chuyển đổi PDF sang HTML bằng Aspose.PDF cho .NET. Tăng cư ### [Chuyển đổi PDF sang HTML với Aspose.PDF cho .NET](./pdf-to-html-conversion-aspose-dot-net/) Hướng dẫn mã cho Aspose.PDF Net +### [Lưu PDF dưới dạng HTML và Chuyển đổi sang PDF/X‑4 với Aspose.PDF trong C#](./save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/) +Hướng dẫn lưu PDF dưới dạng HTML, sau đó chuyển đổi sang định dạng PDF/X‑4 bằng Aspose.PDF trong C#. + ### [Chuyển đổi PDF sang TIFF trong .NET bằng Aspose.PDF: Hướng dẫn từng bước](./pdf-to-tiff-conversion-aspose-pdf-net/) Tìm hiểu cách chuyển đổi tài liệu PDF sang hình ảnh TIFF bằng Aspose.PDF cho .NET. Làm chủ độ sâu màu tùy chỉnh và các kỹ thuật xử lý hình ảnh tiên tiến. diff --git a/pdf/vietnamese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md b/pdf/vietnamese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md new file mode 100644 index 0000000000..98345fbd98 --- /dev/null +++ b/pdf/vietnamese/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-14 +description: Lưu PDF dưới dạng HTML và chuyển đổi PDF sang PDF/X‑4 bằng Aspose.PDF + cho C#. Mã từng bước cho thấy xuất HTML, liệt kê chữ ký và chỉnh sửa trạng thái + đồ họa. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to pdf/x-4 +- how to save as html +- how to convert to pdfx4 +language: vi +lastmod: 2026-08-14 +og_description: Lưu PDF dưới dạng HTML và chuyển đổi PDF sang PDF/X‑4 bằng Aspose.PDF + cho C#. Tham khảo hướng dẫn đầy đủ này để xuất HTML, liệt kê chữ ký và chỉnh sửa + trạng thái đồ họa. +og_image_alt: Flow diagram of saving PDF as HTML and converting to PDF/X‑4 +og_title: Lưu PDF dưới dạng HTML và Chuyển đổi sang PDF/X‑4 với Aspose.PDF – Hướng + dẫn C# +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + headline: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + type: TechArticle +- description: Save PDF as HTML and convert PDF to PDF/X‑4 using Aspose.PDF for C#. + Step‑by‑step code shows HTML export, signature listing, and graphics‑state editing. + name: Save PDF as HTML and Convert to PDF/X‑4 with Aspose.PDF in C# + steps: + - name: Load the source PDF. + text: Load the source PDF. + - name: List every signature field name. + text: List every signature field name. + - name: '**Convert PDF to PDF/X‑4** and save the result.' + text: '**Convert PDF to PDF/X‑4** and save the result.' + - name: '**Save PDF as HTML** while skipping raster images.' + text: '**Save PDF as HTML** while skipping raster images.' + - name: Add a custom ExtGState (graphics state) to the first page. + text: Add a custom ExtGState (graphics state) to the first page. + - name: Save the modified PDF with the new graphics state. + text: Save the modified PDF with the new graphics state. + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF conversion +title: Lưu PDF dưới dạng HTML và Chuyển đổi sang PDF/X‑4 bằng Aspose.PDF trong C# +url: /vi/net/conversion-export/save-pdf-as-html-and-convert-to-pdf-x-4-with-aspose-pdf-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lưu PDF dưới dạng HTML và Chuyển đổi sang PDF/X‑4 bằng Aspose.PDF trong C# + +Nếu bạn cần **lưu PDF dưới dạng HTML**, Aspose.Pdf giúp quá trình này trở nên đơn giản. Hướng dẫn này cũng chỉ cách **chuyển PDF sang PDF/X‑4**, liệt kê các trường chữ ký, và thêm một ExtGState tùy chỉnh, cung cấp cho bạn quy trình làm việc toàn diện từ đầu đến cuối. + +Bạn sẽ học cách: + +* Xuất PDF ra HTML sạch, bỏ qua các hình raster. +* Chuyển đổi tài liệu PDF sang tiêu chuẩn PDF/X‑4 để in sẵn. +* Đếm tất cả các trường chữ ký trong PDF. +* Chèn một trạng thái đồ họa tùy chỉnh (ExtGState) vào trang đầu tiên. + +Tất cả mã chạy trên .NET 6 hoặc mới hơn và yêu cầu gói NuGet Aspose.Pdf for .NET. + +## Prerequisites + +| Requirement | Reason | +|-------------|--------| +| .NET 6 SDK hoặc mới hơn | Cung cấp môi trường chạy cho mẫu C#. | +| Visual Studio 2022 (hoặc bất kỳ IDE C# nào) | Giúp dễ dàng chỉnh sửa và gỡ lỗi. | +| Aspose.Pdf for .NET (v23.12 hoặc mới hơn) | Cung cấp các lớp `Document`, `PdfFormatConversionOptions` và `HtmlSaveOptions` được sử dụng trong hướng dẫn. | +| Một tệp PDF mẫu (`sample.pdf`) | Tài liệu nguồn sẽ được xử lý. | + +Cài đặt thư viện bằng: + +```bash +dotnet add package Aspose.Pdf +``` + +## Overview of the solution + +Chương trình thực hiện sáu bước logic: + +1. Tải PDF nguồn. +2. Liệt kê tên mọi trường chữ ký. +3. **Chuyển PDF sang PDF/X‑4** và lưu kết quả. +4. **Lưu PDF dưới dạng HTML** đồng thời bỏ qua các hình raster. +5. Thêm một ExtGState (trạng thái đồ họa) tùy chỉnh vào trang đầu tiên. +6. Lưu PDF đã chỉnh sửa với trạng thái đồ họa mới. + +Mỗi bước được giải thích dưới đây, kèm theo mã đầy đủ và lý do lựa chọn. + +## Step 1: Load the PDF document + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class Demo +{ + static void Main() + { + // Load the PDF from the file system. + Document doc = new Document("YOUR_DIRECTORY/sample.pdf"); +``` + +*Why this matters*: `Document` đại diện cho toàn bộ tệp PDF. Việc tải nó một lần cho phép bạn tái sử dụng cùng một đối tượng cho mọi thao tác tiếp theo, giảm tải I/O. + +## Step 2: List all signature field names + +```csharp + // Enumerate signature fields so you know which ones exist. + foreach (var name in doc.Signatures.GetSignatureNames()) + Console.WriteLine($"Signature field: {name}"); +``` + +*Why this matters*: Biết tên các trường chữ ký rất quan trọng khi bạn cần xác thực, xóa hoặc thay thế chữ ký số sau này. Bộ sưu tập `Signatures` cung cấp một cái nhìn nhanh, chỉ đọc về các trường. + +## Step 3: Convert PDF to PDF/X‑4 + +```csharp + // Convert the PDF to the PDF/X‑4 standard, which is required for many print workflows. + var pdfx4Options = new PdfFormatConversionOptions + { + PdfStandard = PdfStandard.PdfX4 + }; + doc.Save("YOUR_DIRECTORY/sample_pdfx4.pdf", pdfx4Options); +``` + +**Key points** + +* `PdfStandard.PdfX4` chỉ thị cho Aspose.Pdf nhúng tất cả tài nguyên cần thiết (phông chữ, hồ sơ màu) và áp dụng các ràng buộc của PDF/X‑4. +* Quá trình chuyển đổi diễn ra trong bộ nhớ; chỉ tệp cuối cùng được ghi ra đĩa, giúp thao tác nhanh hơn. + +> **Pro tip:** Kiểm tra kết quả bằng công cụ xác thực PDF/X‑4 (ví dụ: Adobe Preflight) nếu quy trình downstream của bạn yêu cầu tuân thủ nghiêm ngặt. + +## Step 4: Save PDF as HTML while skipping raster images + +```csharp + // Export the PDF to HTML. Setting SkipRasterImages removes embedded bitmap images, + // which reduces file size when you only need vector content. + var htmlOptions = new HtmlSaveOptions + { + SkipRasterImages = true + }; + doc.Save("YOUR_DIRECTORY/sample.html", htmlOptions); +``` + +**Why you might want this**: Đầu ra HTML hữu ích cho việc xem trước trên web hoặc lập chỉ mục nội dung. Bỏ qua các hình raster (`SkipRasterImages = true`) giúp HTML nhẹ hơn và cải thiện thời gian tải, đặc biệt khi PDF gốc chứa các bản quét độ phân giải cao. + +## Step 5: Add a custom ExtGState to the first page + +```csharp + // Access the first page's resource dictionary. + var page = doc.Pages[1]; + var dictEditor = new DictionaryEditor(page.Resources); + + // Retrieve or create the ExtGState dictionary. + var extGStateDict = dictEditor["ExtGState"].ToCosPdfDictionary(); + + // Create a new graphics state (ExtGState) entry. + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(1)); // Stroke alpha (fully opaque) + newGs.Add("ca", new CosPdfNumber(0.5)); // Fill alpha (50 % transparent) + newGs.Add("BM", new CosPdfName("Normal")); // Blend mode + + // Register the new graphics state under the name GS0. + extGStateDict.Add("GS0", newGs); +``` + +*Explanation*: Đối tượng **ExtGState** điều khiển độ trong suốt, chế độ hòa trộn và các tham số đồ họa khác. Bằng cách thêm `GS0`, bạn có thể tham chiếu trạng thái này trong các luồng nội dung (ví dụ: để tạo lớp phủ bán trong suốt). Mã sử dụng API COS cấp thấp vì Aspose.Pdf không cung cấp wrapper cấp cao cho việc tạo ExtGState. + +## Step 6: Save the modified PDF with the new ExtGState + +```csharp + // Persist the changes, including the new graphics state. + doc.Save("YOUR_DIRECTORY/sample_with_extgstate.pdf"); + + Console.WriteLine("All operations completed successfully."); + } +} +``` + +Tệp cuối cùng (`sample_with_extgstate.pdf`) chứa: + +* Tất cả các trang và nội dung gốc. +* Một phiên bản PDF/X‑4 tuân chuẩn (`sample_pdfx4.pdf`). +* Đại diện HTML không có hình raster (`sample.html`). +* Một ExtGState tùy chỉnh (`GS0`) được gắn vào tài nguyên của trang đầu tiên. + +### Expected console output + +``` +Signature field: Sig1 +Signature field: Sig2 +All operations completed successfully. +``` + +Nếu PDF nguồn không có chữ ký, vòng lặp sẽ không in gì nhưng vẫn tiếp tục mà không gây lỗi. + +## Common variations and edge cases + +| Situation | Adjustment | +|-----------|------------| +| **PDF contains no pages** | Kiểm tra `doc.Pages.Count` trước khi truy cập `doc.Pages[1]` để tránh `IndexOutOfRangeException`. | +| **You need PDF/A‑2b instead of PDF/X‑4** | Thay `PdfStandard.PdfX4` bằng `PdfStandard.PdfA2b` trong `PdfFormatConversionOptions`. | +| **You want to keep raster images** | Đặt `SkipRasterImages = false` (hoặc bỏ qua thuộc tính) trong `HtmlSaveOptions`. | +| **Multiple ExtGState objects** | Sử dụng các khóa duy nhất (`GS1`, `GS2`, …) khi thêm vào `extGStateDict`. | +| **Large PDFs (hundreds of MB)** | Bật `doc.OptimizeResources = true` trước khi lưu để giảm mức tiêu thụ bộ nhớ. | + +## Full source code (runnable) + + + +## 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ẽ, mở rộng các kỹ thuật được trình bày trong bài viết này. Mỗi tài nguyên đều bao gồm ví dụ mã hoàn chỉnh và 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. + +- [Comprehensive Guide: Convert PDF to HTML Using Aspose.PDF .NET with Custom Strategies](/pdf/english/net/conversion-export/convert-pdf-html-aspose-dotnet-custom-strategies/) +- [Convert PDF to HTML with Custom Image URLs Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-aspose-pdf-net/) +- [PDF to HTML Conversion Using Aspose.PDF .NET: Save Images as External PNGs](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/programming-with-forms/_index.md b/pdf/vietnamese/net/programming-with-forms/_index.md index a1bb3dc373..080ead0272 100644 --- a/pdf/vietnamese/net/programming-with-forms/_index.md +++ b/pdf/vietnamese/net/programming-with-forms/_index.md @@ -23,33 +23,34 @@ Các hướng dẫn này cũng cung cấp các ví dụ mã chi tiết, giải t | --- | --- | | [Thêm chú giải công cụ vào trường](./add-tooltip-to-field/) | Tìm hiểu cách thêm chú giải công cụ vào các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET trong hướng dẫn từng bước này. Cải thiện khả năng sử dụng và trải nghiệm của người dùng. | | [Điền văn bản tiếng Ả Rập](./arabic-text-filling/) | Tìm hiểu cách điền văn bản tiếng Ả Rập vào biểu mẫu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Nâng cao kỹ năng thao tác PDF của bạn. | -| [Hộp kết hợp](./combo-box/) Tìm hiểu cách thêm Combo Box vào PDF bằng Aspose.PDF cho .NET. Làm theo hướng dẫn từng bước của chúng tôi để tạo biểu mẫu PDF tương tác dễ dàng. | -| [Tạo Tài Liệu](./create-doc/) | Học cách tạo tài liệu PDF tương tác với các nút radio bằng Aspose.PDF cho .NET trong hướng dẫn từng bước toàn diện này. | -| [Xóa trường biểu mẫu trong tài liệu PDF](./delete-form-field/) | Tìm hiểu cách xóa các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Hoàn hảo cho các nhà phát triển và những người đam mê PDF. | -| [Xác định trường bắt buộc trong biểu mẫu PDF](./determine-required-field/) | Tìm hiểu cách xác định các trường bắt buộc trong biểu mẫu PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước của chúng tôi giúp đơn giản hóa việc quản lý biểu mẫu và nâng cao quy trình làm việc tự động hóa PDF của bạn. | -| [Chuyển đổi Dynamic XFA sang Acro Form](./dynamic-xfa-to-acro-form/) | Tìm hiểu cách chuyển đổi biểu mẫu XFA động sang AcroForms chuẩn bằng Aspose.PDF cho .NET trong hướng dẫn từng bước này. | -| [Điền vào trường mẫu PDF](./fill-form-field/) Tìm hiểu cách điền các trường biểu mẫu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tự động hóa các tác vụ PDF của bạn một cách dễ dàng. | -| [Điền XFAFields](./fill-xfafields/) | Tìm hiểu cách lập trình điền các trường XFA vào PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Khám phá các công cụ thao tác PDF đơn giản và mạnh mẽ. | -| [Làm phẳng các biểu mẫu trong tài liệu PDF](./flatten-forms/) | Tìm hiểu cách làm phẳng biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Bảo mật dữ liệu của bạn một cách dễ dàng. | -| [Phông chữ trường biểu mẫu 14](./form-field-font-14/) | Tìm hiểu cách thay đổi phông chữ của các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước với các ví dụ về mã và mẹo để có biểu mẫu PDF tốt hơn. | -| [Nhận tọa độ trường biểu mẫu PDF](./get-coordinates/) | Mở khóa thao tác PDF với Aspose.PDF cho .NET! Tìm hiểu cách lấy tọa độ trường biểu mẫu chỉ trong vài bước đơn giản. | -| [Lấy các trường từ vùng trong tệp PDF](./get-fields-from-region/) Tìm hiểu cách trích xuất các trường từ một vùng cụ thể trong tệp PDF một cách dễ dàng bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện này. | -| [Lấy giá trị từ trường trong tài liệu PDF](./get-value-from-field/) | Tìm hiểu cách trích xuất giá trị dễ dàng từ các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | -| [Lấy giá trị từ tất cả các trường trong tài liệu PDF](./get-values-from-all-fields/) | Tìm hiểu cách trích xuất giá trị từ tất cả các trường trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | -| [Nhận XFAProperties](./get-xfaproperties/) | Tìm hiểu cách lấy các thuộc tính XFA bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện này. Bao gồm hướng dẫn từng bước. | -| [Nhóm các hộp kiểm trong tài liệu PDF](./grouped-check-boxes/) | Tìm hiểu cách tạo các hộp kiểm được nhóm lại (nút radio) trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | -| [Nút radio theo chiều ngang và chiều dọc](./horizontally-and-vertically-radio-buttons/) Tìm hiểu cách tạo các nút radio căn chỉnh theo chiều ngang và chiều dọc trong PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | -| [Sửa đổi trường biểu mẫu trong tài liệu PDF](./modify-form-field/) | Tìm hiểu cách sửa đổi các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Hoàn hảo cho các nhà phát triển muốn nâng cao chức năng PDF. | -| [Di chuyển trường biểu mẫu](./move-form-field/) | Tìm hiểu cách di chuyển các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn này. Làm theo hướng dẫn chi tiết này để dễ dàng sửa đổi vị trí hộp văn bản. | -| [Bảo vệ quyền](./preserve-rights/) | Bảo vệ quyền biểu mẫu trong tài liệu PDF của bạn với Aspose.PDF cho .NET. | -| [Nút radio](./radio-button/) | Tìm hiểu cách tạo các nút radio tương tác trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | -| [Nút radio có tùy chọn](./radio-button-with-options/) Mở khóa tiềm năng của PDF tương tác bằng cách thêm các nút radio sử dụng Aspose.PDF cho .NET. Tạo biểu mẫu hấp dẫn một cách dễ dàng và cải thiện trải nghiệm người dùng. | -| [Lấy lại trường biểu mẫu theo thứ tự tab](./retrieve-form-field-in-tab-order/) | Tìm hiểu cách truy xuất và sửa đổi các trường biểu mẫu theo thứ tự tab bằng Aspose.PDF cho .NET. Hướng dẫn từng bước với các ví dụ mã để hợp lý hóa điều hướng biểu mẫu PDF. | -| [Chọn nút radio trong tài liệu PDF](./select-radio-button/) | Tìm hiểu cách chọn nút radio trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tự động hóa tương tác biểu mẫu dễ dàng. | -| [Đặt giới hạn trường](./set-field-limit/) | Tìm hiểu cách đặt giới hạn trường trong biểu mẫu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Nâng cao trải nghiệm người dùng và tính toàn vẹn của dữ liệu. | -| [Đặt Java Script](./set-java-script/) | Mở khóa sức mạnh của Aspose.PDF cho .NET. Tìm hiểu cách thiết lập JavaScript trên các trường biểu mẫu với hướng dẫn từng bước của chúng tôi. | -| [Đặt tiêu đề nút radio](./set-radio-button-caption/) Tìm hiểu cách đặt tiêu đề nút radio trong PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước này hướng dẫn bạn cách tải, sửa đổi và lưu biểu mẫu PDF. | -| [Hộp văn bản](./text-box/) | Khám phá cách dễ dàng thêm hộp văn bản vào PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tăng cường tương tác của người dùng. | +| [Hộp kết hợp](./combo-box/) Tìm hiểu cách thêm Combo Box vào PDF bằng Aspose.PDF cho .NET. Làm theo hướng dẫn từng bước của chúng tôi để tạo biểu mẫu PDF tương tác dễ dàng. | +| [Tạo Tài Liệu](./create-doc/) | Học cách tạo tài liệu PDF tương tác với các nút radio bằng Aspose.PDF cho .NET trong hướng dẫn từng bước toàn diện này. | +| [Tạo trường biểu mẫu PDF trong C# – hướng dẫn từng bước](./create-pdf-form-field-in-c-step-by-step-guide/) | Tìm hiểu cách tạo trường biểu mẫu PDF trong C# bằng Aspose.PDF cho .NET qua hướng dẫn chi tiết từng bước. | +| [Xóa trường biểu mẫu trong tài liệu PDF](./delete-form-field/) | Tìm hiểu cách xóa các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Hoàn hảo cho các nhà phát triển và những người đam mê PDF. | +| [Xác định trường bắt buộc trong biểu mẫu PDF](./determine-required-field/) | Tìm hiểu cách xác định các trường bắt buộc trong biểu mẫu PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước của chúng tôi giúp đơn giản hóa việc quản lý biểu mẫu và nâng cao quy trình làm việc tự động hóa PDF của bạn. | +| [Chuyển đổi Dynamic XFA sang Acro Form](./dynamic-xfa-to-acro-form/) | Tìm hiểu cách chuyển đổi biểu mẫu XFA động sang AcroForms chuẩn bằng Aspose.PDF cho .NET trong hướng dẫn từng bước này. | +| [Điền vào trường mẫu PDF](./fill-form-field/) Tìm hiểu cách điền các trường biểu mẫu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tự động hóa các tác vụ PDF của bạn một cách dễ dàng. | +| [Điền XFAFields](./fill-xfafields/) | Tìm hiểu cách lập trình điền các trường XFA vào PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Khám phá các công cụ thao tác PDF đơn giản và mạnh mẽ. | +| [Làm phẳng các biểu mẫu trong tài liệu PDF](./flatten-forms/) | Tìm hiểu cách làm phẳng biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Bảo mật dữ liệu của bạn một cách dễ dàng. | +| [Phông chữ trường biểu mẫu 14](./form-field-font-14/) | Tìm hiểu cách thay đổi phông chữ của các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước với các ví dụ về mã và mẹo để có biểu mẫu PDF tốt hơn. | +| [Nhận tọa độ trường biểu mẫu PDF](./get-coordinates/) | Mở khóa thao tác PDF với Aspose.PDF cho .NET! Tìm hiểu cách lấy tọa độ trường biểu mẫu chỉ trong vài bước đơn giản. | +| [Lấy các trường từ vùng trong tệp PDF](./get-fields-from-region/) Tìm hiểu cách trích xuất các trường từ một vùng cụ thể trong tệp PDF một cách dễ dàng bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện này. | +| [Lấy giá trị từ trường trong tài liệu PDF](./get-value-from-field/) | Tìm hiểu cách trích xuất giá trị dễ dàng từ các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Lấy giá trị từ tất cả các trường trong tài liệu PDF](./get-values-from-all-fields/) | Tìm hiểu cách trích xuất giá trị từ tất cả các trường trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Nhận XFAProperties](./get-xfaproperties/) | Tìm hiểu cách lấy các thuộc tính XFA bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện này. Bao gồm hướng dẫn từng bước. | +| [Nhóm các hộp kiểm trong tài liệu PDF](./grouped-check-boxes/) | Tìm hiểu cách tạo các hộp kiểm được nhóm lại (nút radio) trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Nút radio theo chiều ngang và chiều dọc](./horizontally-and-vertically-radio-buttons/) Tìm hiểu cách tạo các nút radio căn chỉnh theo chiều ngang và chiều dọc trong PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Sửa đổi trường biểu mẫu trong tài liệu PDF](./modify-form-field/) | Tìm hiểu cách sửa đổi các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Hoàn hảo cho các nhà phát triển muốn nâng cao chức năng PDF. | +| [Di chuyển trường biểu mẫu](./move-form-field/) | Tìm hiểu cách di chuyển các trường biểu mẫu trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn này. Làm theo hướng dẫn chi tiết này để dễ dàng sửa đổi vị trí hộp văn bản. | +| [Bảo vệ quyền](./preserve-rights/) | Bảo vệ quyền biểu mẫu trong tài liệu PDF của bạn với Aspose.PDF cho .NET. | +| [Nút radio](./radio-button/) | Tìm hiểu cách tạo các nút radio tương tác trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. | +| [Nút radio có tùy chọn](./radio-button-with-options/) Mở khóa tiềm năng của PDF tương tác bằng cách thêm các nút radio sử dụng Aspose.PDF cho .NET. Tạo biểu mẫu hấp dẫn một cách dễ dàng và cải thiện trải nghiệm người dùng. | +| [Lấy lại trường biểu mẫu theo thứ tự tab](./retrieve-form-field-in-tab-order/) | Tìm hiểu cách truy xuất và sửa đổi các trường biểu mẫu theo thứ tự tab bằng Aspose.PDF cho .NET. Hướng dẫn từng bước với các ví dụ mã để hợp lý hóa điều hướng biểu mẫu PDF. | +| [Chọn nút radio trong tài liệu PDF](./select-radio-button/) | Tìm hiểu cách chọn nút radio trong tài liệu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tự động hóa tương tác biểu mẫu dễ dàng. | +| [Đặt giới hạn trường](./set-field-limit/) | Tìm hiểu cách đặt giới hạn trường trong biểu mẫu PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Nâng cao trải nghiệm người dùng và tính toàn vẹn của dữ liệu. | +| [Đặt Java Script](./set-java-script/) | Mở khóa sức mạnh của Aspose.PDF cho .NET. Tìm hiểu cách thiết lập JavaScript trên các trường biểu mẫu với hướng dẫn từng bước của chúng tôi. | +| [Đặt tiêu đề nút radio](./set-radio-button-caption/) Tìm hiểu cách đặt tiêu đề nút radio trong PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước này hướng dẫn bạn cách tải, sửa đổi và lưu biểu mẫu PDF. | +| [Hộp văn bản](./text-box/) | Khám phá cách dễ dàng thêm hộp văn bản vào PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Tăng cường tương tác của người dùng. | | [Cách tạo PDF với Aspose – Thêm trường biểu mẫu và trang](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Hướng dẫn tạo PDF, thêm trường biểu mẫu và các trang bằng Aspose.PDF cho .NET trong các bước đơn giản. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md b/pdf/vietnamese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md new file mode 100644 index 0000000000..9d8b5e5722 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-14 +description: Tạo trường biểu mẫu PDF nhanh chóng với C#. Tìm hiểu cách thêm hộp văn + bản vào PDF và chỉnh sửa PDF để bao gồm hộp văn bản bằng Aspose.PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf form field +- add text box to pdf +- modify pdf to include text box +- Aspose.PDF form field +- C# PDF manipulation +language: vi +lastmod: 2026-08-14 +og_description: Tạo trường biểu mẫu PDF bằng C#. Hướng dẫn này cho thấy cách thêm + hộp văn bản vào PDF và chỉnh sửa PDF để bao gồm hộp văn bản bằng Aspose.PDF. +og_image_alt: Screenshot of a PDF page showing a newly added text box form field +og_title: Tạo trường biểu mẫu PDF trong C# – hướng dẫn lập trình đầy đủ +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + headline: Create pdf form field in C# – step‑by‑step guide + type: TechArticle +- description: Create pdf form field quickly with C#. Learn how to add text box to + pdf and modify pdf to include text box using Aspose.PDF. + name: Create pdf form field in C# – step‑by‑step guide + steps: + - name: Load the existing PDF document. + text: Load the existing PDF document. + - name: Instantiate a `TextBoxField` and configure its name and appearance. + text: Instantiate a `TextBoxField` and configure its name and appearance. + - name: Add a widget annotation that defines the visual rectangle on the target + page. + text: Add a widget annotation that defines the visual rectangle on the target + page. + - name: Insert the field into the document’s form collection. + text: Insert the field into the document’s form collection. + - name: Save the modified PDF. + text: Save the modified PDF. + - name: Open `output.pdf` in Adobe Acrobat Reader. + text: Open `output.pdf` in Adobe Acrobat Reader. + - name: Click inside the “Comments” box; the cursor should appear. + text: Click inside the “Comments” box; the cursor should appear. + - name: Type any text and press **Tab** or click elsewhere. + text: Type any text and press **Tab** or click elsewhere. + - name: Choose **File → Save As** to persist the entered value. + text: Choose **File → Save As** to persist the entered value. + - name: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + text: '(Optional) Use Aspose.PDF’s `Form` API to extract the value programmatically:' + type: HowTo +tags: +- pdf +- csharp +- form-fields +title: Tạo trường biểu mẫu PDF trong C# – hướng dẫn từng bước +url: /vi/net/programming-with-forms/create-pdf-form-field-in-c-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tạo trường biểu mẫu pdf trong C# – hướng dẫn từng bước + +Nếu bạn cần **create pdf form field** trong một tài liệu, hướng dẫn này sẽ đưa bạn qua toàn bộ quá trình. Bạn sẽ thấy chính xác cách **add text box to pdf** các trang, và cách **modify pdf to include text box** bằng thư viện Aspose.PDF cho .NET. + +Làm việc với các biểu mẫu PDF là một yêu cầu phổ biến cho hệ thống lập hoá đơn, khảo sát, hoặc bất kỳ quy trình nào thu thập đầu vào của người dùng. Khi kết thúc hướng dẫn này, bạn sẽ có một đoạn mã có thể tái sử dụng tạo ra một trường hộp văn bản hoạt động đầy đủ, đặt nó ở vị trí bạn muốn, và lưu PDF đã cập nhật — tất cả mà không rời khỏi dự án C# của bạn. + +## Yêu cầu trước + +* .NET 6.0 hoặc sau (mã cũng hoạt động với .NET Framework 4.7+) +* Visual Studio 2022 hoặc bất kỳ IDE nào hỗ trợ C# +* Giấy phép Aspose.PDF for .NET đang hoạt động (bản dùng thử miễn phí hoạt động cho phát triển) +* Tệp PDF có tên `input.pdf` được đặt trong một thư mục đã biết (hướng dẫn sử dụng `YOUR_DIRECTORY` làm chỗ giữ chỗ) + +> **Mẹo:** Nếu bạn chưa có giấy phép, bạn có thể yêu cầu một khóa tạm thời từ trang web của Aspose; thư viện hoạt động ở chế độ đánh giá mà không cần thay đổi mã. + +## Cách tạo trường biểu mẫu pdf trong C# (tổng quan) + +1. Tải tài liệu PDF hiện có. +2. Tạo một đối tượng `TextBoxField` và cấu hình tên và giao diện của nó. +3. Thêm một chú thích widget xác định hình chữ nhật hiển thị trên trang mục tiêu. +4. Chèn trường vào bộ sưu tập biểu mẫu của tài liệu. +5. Lưu PDF đã chỉnh sửa. + +Mỗi bước sẽ được giải thích chi tiết bên dưới, kèm theo các ví dụ mã đầy đủ và lý do đằng sau các lời gọi API. + +## Bước 1: Tải tài liệu PDF + +Hoạt động đầu tiên là đọc PDF nguồn. Aspose.PDF đại diện cho một tệp PDF bằng lớp `Document`. Việc tải tài liệu cho phép bạn truy cập vào các trang, bộ sưu tập biểu mẫu và các cấu trúc khác. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; + +// Adjust the path to match your environment +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + +// Load the PDF you want to modify +Document pdfDocument = new Document(inputPath); +``` + +**Tại sao điều này quan trọng:** +Việc tải tệp tạo ra một mô hình PDF trong bộ nhớ, cho phép bạn thêm, xóa hoặc chỉnh sửa các đối tượng mà không làm hỏng tệp gốc. Đối tượng `Document` cũng cung cấp thuộc tính `Form`, nơi bạn sẽ sau này **add text box to pdf**. + +## Bước 2: Tạo trường hộp văn bản + +Trường hộp văn bản là một loại trường biểu mẫu cho phép người dùng nhập văn bản tự do. Trong Aspose.PDF, bạn tạo nó bằng cách khởi tạo `TextBoxField`, truyền trang mục tiêu và một hình chữ nhật xác định kích thước ban đầu của widget. + +```csharp +// Choose the page index (0‑based). Here we use page 2 (index 1). +Page targetPage = pdfDocument.Pages[1]; + +// Define the rectangle for the field’s *initial* size. +// Rectangle(left, bottom, right, top) – values are in points (1/72 inch). +Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + +// Create the TextBoxField with a partial name that will be used in form data. +TextBoxField textBox = new TextBoxField(targetPage, fieldRect) +{ + PartialName = "Comments", // This identifier appears in the PDF form data. + // Optional: set default appearance (font, size, color) + DefaultAppearance = new DefaultAppearance(FontRepository.FindFont("Helvetica"), 12, Color.Black) +}; +``` + +**Tại sao điều này quan trọng:** +* `PartialName` là khóa mà các công cụ xử lý biểu mẫu (ví dụ: Adobe Acrobat, các bộ phân tích phía máy chủ) sử dụng để lấy giá trị đã nhập. +* Hình chữ nhật bạn truyền ở đây chỉ xác định kích thước *ban đầu* của widget; bạn có thể sau này điều chỉnh vị trí hiển thị của nó bằng một chú thích widget (bước tiếp theo). +* Đặt `DefaultAppearance` đảm bảo văn bản bên trong hộp được hiển thị nhất quán trên các trình xem. + +## Bước 3: Xác định chú thích widget trực quan + +Một trường biểu mẫu có thể có một hoặc nhiều **widget annotations** kiểm soát vị trí xuất hiện của trường trên mỗi trang. Bằng cách thêm một widget, bạn có thể đặt cùng một trường logic ở vị trí khác hoặc thậm chí trên nhiều trang. + +```csharp +// Define where the field will actually be displayed on the page. +// This rectangle can differ from the one used in the constructor. +Rectangle widgetRect = new Rectangle(100, 300, 200, 330); +textBox.AddWidgetAnnotation(widgetRect); +``` + +**Tại sao điều này quan trọng:** +Hình chữ nhật widget xác định tọa độ trên màn hình mà người dùng nhìn thấy. Nếu bạn bỏ qua bước này, trường có thể tồn tại trong cấu trúc dữ liệu của PDF nhưng sẽ không hiển thị cho người dùng cuối. Thêm widget là bước thực sự **adds text box to pdf**. + +## Bước 4: Thêm trường đã cấu hình vào biểu mẫu của tài liệu + +Bây giờ `TextBoxField` đã được cấu hình đầy đủ, bạn cần đăng ký nó vào bộ sưu tập biểu mẫu của PDF. Điều này làm cho trường trở thành một phần của biểu mẫu tương tác và đảm bảo nó được lưu. + +```csharp +pdfDocument.Form.Add(textBox); +``` + +**Tại sao điều này quan trọng:** +Nếu không thêm trường vào `pdfDocument.Form`, trình xem PDF sẽ bỏ qua chú thích widget, và dữ liệu trường sẽ không bao giờ được gửi. Dòng này hoàn thiện thao tác **modify pdf to include text box**. + +## Bước 5: Lưu PDF đã cập nhật + +Cuối cùng, ghi các thay đổi trở lại đĩa. Bạn có thể ghi đè lên tệp gốc hoặc tạo một tệp mới; ví dụ lưu vào `output.pdf`. + +```csharp +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document with the new form field +pdfDocument.Save(outputPath); +``` + +Khi bạn mở `output.pdf` trong Adobe Acrobat Reader, bạn sẽ thấy một hộp văn bản hình chữ nhật có nhãn “Comments” trên trang 2. Người dùng có thể nhấp vào bên trong, nhập văn bản, và văn bản đã nhập sẽ là một phần của dữ liệu biểu mẫu PDF. + +## Ví dụ hoạt động đầy đủ + +Kết hợp tất cả các phần lại, đây là một chương trình hoàn chỉnh, sẵn sàng chạy. Sao chép nó vào một dự án console mới, thay thế `YOUR_DIRECTORY` bằng đường dẫn thư mục thực tế, và chạy. + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Annotations; +using Aspose.Pdf.Text; +using System.Drawing; // For Color + +namespace PdfFormFieldDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Load the existing PDF + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.pdf"); + Document pdfDocument = new Document(inputPath); + + // 2️⃣ Create a TextBoxField on page 2 (index 1) + Page targetPage = pdfDocument.Pages[1]; + Rectangle fieldRect = new Rectangle(100, 500, 200, 530); + TextBoxField textBox = new TextBoxField(targetPage, fieldRect) + { + PartialName = "Comments", + DefaultAppearance = new DefaultAppearance( + FontRepository.FindFont("Helvetica"), 12, Color.Black) + }; + + // 3️⃣ Add a widget annotation to control visual placement + Rectangle widgetRect = new Rectangle(100, 300, 200, 330); + textBox.AddWidgetAnnotation(widgetRect); + + // 4️⃣ Register the field with the document's form collection + pdfDocument.Form.Add(textBox); + + // 5️⃣ Save the modified PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine("PDF form field created successfully."); + Console.WriteLine($"Output saved to: {outputPath}"); + } + } +} +``` + +**Kết quả mong đợi:** +Chạy chương trình sẽ in hai dòng xác nhận lên console. Mở `output.pdf` hiển thị một hộp văn bản trên trang 2 nơi người dùng có thể nhập bình luận. Khi biểu mẫu được gửi (ví dụ: qua nút “Submit” của Adobe Acrobat), tên trường `Comments` xuất hiện trong dữ liệu FDF hoặc XFDF đã xuất. + +## Các biến thể phổ biến và trường hợp đặc biệt + +| Situation | How to adapt the code | +|-----------|-----------------------| +| **Thêm trường vào một trang khác** | Thay đổi `pdfDocument.Pages[1]` thành chỉ số trang mong muốn (`0`‑based). | +| **Tạo hộp văn bản đa dòng** | Đặt `textBox.Multiline = true;` trước khi thêm widget. | +| **Đặt giá trị mặc định** | Gán `textBox.Value = "Enter your comments here";`. | +| **Đánh dấu trường là bắt buộc** | Đặt `textBox.Required = true;`. | +| **Đặt trường trên nhiều trang** | Gọi `textBox.AddWidgetAnnotation` cho mỗi hình chữ nhật bổ sung trên các trang mục tiêu. | +| **Sử dụng phông chữ tùy chỉnh** | Tải phông chữ bằng `FontRepository.AddFont("path/to/font.ttf")` và tham chiếu nó trong `DefaultAppearance`. | + +**Mẹo:** Luôn kiểm tra tọa độ hình chữ nhật so với kích thước trang (`pdfDocument.Pages[1].Rect`). Nếu widget nằm ngoài giới hạn trang, trình xem có thể cắt hoặc ẩn trường. + +## Kiểm tra trường biểu mẫu + +1. Mở `output.pdf` trong Adobe Acrobat Reader. +2. Nhấp vào bên trong hộp “Comments”; con trỏ sẽ xuất hiện. +3. Nhập bất kỳ văn bản nào và nhấn **Tab** hoặc nhấp vào nơi khác. +4. Chọn **File → Save As** để lưu giá trị đã nhập. +5. (Tùy chọn) Sử dụng API `Form` của Aspose.PDF để trích xuất giá trị bằng mã: + +```csharp +string commentValue = pdfDocument.Form["Comments"].Value; +Console.WriteLine($"Submitted comment: {commentValue}"); +``` + +Đoạn mã này cho thấy trường không chỉ hiển thị mà còn có thể truy xuất qua mã — điều cần thiết cho xử lý phía máy chủ. + +## Kết luận + +Bây giờ bạn đã biết cách **create pdf form field** trong C# từ đầu đến cuối. Hướng dẫn đã bao gồm việc tải PDF, cấu hình `TextBoxField`, thêm chú thích widget, đăng ký trường, và lưu kết quả. Với những khối xây dựng này, bạn có thể **add text box to pdf** tài liệu, **modify pdf to include text box**, và mở rộng phương pháp sang các loại trường khác như hộp kiểm, nút radio, hoặc danh sách thả xuống. + +Tiếp theo, khám phá các chủ đề liên quan như **extracting form data**, **flattening PDF forms**, hoặc **styling fields with borders and colors**. Mỗi khái niệm này dựa trên cùng một API cốt lõi mà bạn vừa nắm vững, cho phép bạn tạo các PDF tương tác tinh vi hoàn toàn bằng C#. + +Chúc lập trình vui vẻ, và hãy tự do thử nghiệm với các hình chữ nhật, phông chữ và quy tắc xác thực khác nhau để phù hợp với nhu cầu của ứng dụng của bạn! + +## 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 bao gồm các ví dụ mã hoạt động đầy đủ 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. + +- [Tạo tài liệu PDF với Aspose – Thêm trang, hộp văn bản và biểu mẫu](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Cách tạo PDF với Aspose – Thêm trường biểu mẫu và các trang](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Cách thêm dấu văn bản vào PDF bằng Aspose.PDF .NET: Hướng dẫn toàn diện](/pdf/english/net/watermarks-backgrounds/add-text-stamp-pdf-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/programming-with-operators/_index.md b/pdf/vietnamese/net/programming-with-operators/_index.md index bae1c8435c..17832371ae 100644 --- a/pdf/vietnamese/net/programming-with-operators/_index.md +++ b/pdf/vietnamese/net/programming-with-operators/_index.md @@ -23,6 +23,7 @@ Hướng dẫn "Lập trình với Toán tử" của Aspose.PDF cho .NET hướn | [Vẽ XForm Trên Trang](./draw-xform-on-page/) | hướng dẫn cách vẽ XForms trong PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước toàn diện này. | | [Toán tử PDF](./pdf-operators/) | Hướng dẫn từng bước sử dụng toán tử PDF với Aspose.PDF cho .NET. Thêm hình ảnh vào trang PDF và chỉ định vị trí của hình ảnh đó. | | [Xóa Đối Tượng Đồ Họa Trong Tệp PDF](./remove-graphics-objects/) Tìm hiểu cách xóa các đối tượng đồ họa khỏi tệp PDF bằng Aspose.PDF cho .NET trong hướng dẫn từng bước này. Đơn giản hóa các tác vụ thao tác PDF của bạn. | +| [Tạo từ điển PDF trống trong C# với Aspose.Pdf](./create-empty-pdf-dictionary-in-c-with-aspose-pdf/) | Hướng dẫn tạo một từ điển PDF rỗng trong C# bằng Aspose.Pdf cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md b/pdf/vietnamese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..30e8316342 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-14 +description: Tạo từ điển PDF trống trong C# bằng Aspose.Pdf – tìm hiểu cách thêm trạng + thái đồ họa vào bộ sưu tập ExtGState và chỉnh sửa PDF một cách lập trình. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create empty PDF dictionary +- Aspose.Pdf Document +- PDF graphics state +- ExtGState dictionary +- CosPdfDictionary usage +language: vi +lastmod: 2026-08-14 +og_description: Tạo từ điển PDF trống trong C# với Aspose.Pdf. Theo hướng dẫn đầy + đủ này để thêm trạng thái đồ họa tùy chỉnh vào bộ sưu tập ExtGState của PDF. +og_image_alt: Screenshot showing C# code that creates an empty PDF dictionary with + Aspose.Pdf +og_title: Tạo từ điển PDF rỗng trong C# – Hướng dẫn từng bước Aspose.Pdf +schemas: +- author: Aspose + dateModified: '2026-08-14' + description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + headline: Create empty PDF dictionary in C# with Aspose.Pdf + type: TechArticle +- description: Create empty PDF dictionary in C# using Aspose.Pdf – learn how to add + a graphics state to the ExtGState collection and modify PDFs programmatically. + name: Create empty PDF dictionary in C# with Aspose.Pdf + steps: + - name: Create a new **Console App** project in Visual Studio. + text: Create a new **Console App** project in Visual Studio. + - name: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + text: 'Open the **NuGet Package Manager** and install `Aspose.Pdf`:' + - name: 'Add the following `using` directives at the top of `Program.cs`:' + text: 'Add the following `using` directives at the top of `Program.cs`:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF manipulation +title: Tạo từ điển PDF trống trong C# với Aspose.Pdf +url: /vi/net/programming-with-operators/create-empty-pdf-dictionary-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tạo từ điển PDF trống trong C# với Aspose.Pdf + +Nếu bạn cần **tạo các đối tượng từ điển PDF trống** khi làm việc với các tệp PDF, hướng dẫn này sẽ chỉ cho bạn cách thực hiện trong C# bằng thư viện Aspose.Pdf. Dù bạn đang xây dựng một trạng thái đồ họa tùy chỉnh, thêm một tài nguyên mới, hay chuẩn bị một mẫu để sử dụng sau, các bước dưới đây cung cấp giải pháp hoàn chỉnh, có thể chạy ngay. + +Bạn sẽ học cách tải một PDF, truy cập từ điển tài nguyên của trang đầu tiên, xây dựng một `CosPdfDictionary` mới hoàn toàn, và chèn nó vào bộ sưu tập `ExtGState`. Khi kết thúc tutorial, bạn sẽ có một tệp `output.pdf` chứa từ điển mới được tạo. + +## 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 (mã cũng hoạt động với .NET Framework 4.6+) +- Visual Studio 2022 hoặc bất kỳ IDE C# nào bạn thích +- Giấy phép Aspose.Pdf cho .NET (hoặc khóa đánh giá tạm thời) +- Một tệp PDF mẫu có tên **input.pdf** đặt trong thư mục bạn kiểm soát (đường dẫn thư mục sẽ được dùng làm `dataDir`) + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.Pdf`. + +## Bước 1: Thiết lập dự án và tham chiếu Aspose.Pdf + +1. Tạo một dự án **Console App** mới trong Visual Studio. +2. Mở **NuGet Package Manager** và cài đặt `Aspose.Pdf`: + + ```bash + dotnet add package Aspose.Pdf + ``` + +3. Thêm các chỉ thị `using` sau vào đầu file `Program.cs`: + + ```csharp + using Aspose.Pdf; + using Aspose.Pdf.Text; + using Aspose.Pdf.Operators; + using Aspose.Pdf.Facades; + using Aspose.Pdf.InteractiveFeatures; + using Aspose.Pdf.Xmp; + using Aspose.Pdf.Operators.Filters; + using Aspose.Pdf.Operators.Gfx; + ``` + + *Tại sao cần những namespace này?* `Aspose.Pdf` chứa lớp cốt lõi `Document`, trong khi `Aspose.Pdf.Operators.Gfx` cung cấp `CosPdfDictionary`, `CosPdfNumber`, và các đối tượng PDF cấp thấp cần thiết để **tạo các cấu trúc từ điển PDF trống**. + +## Bước 2: Tải PDF nguồn + +Hoạt động đầu tiên là tải tệp PDF hiện có vào một thể hiện `Document`. Điều này cho phép bạn truy cập tất cả các trang, tài nguyên và từ điển cấp thấp. + +```csharp +// Step 2: Load the PDF document +string dataDir = @"C:\MyPdfFolder\"; // Change to your folder +using var pdfDocument = new Document(dataDir + "input.pdf"); +``` + +*Giải thích*: `Document` đọc tệp vào bộ nhớ và chuẩn bị các cấu trúc nội bộ. Câu lệnh `using` đảm bảo tay cầm tệp được giải phóng sau khi xử lý xong. + +## Bước 3: Truy cập từ điển tài nguyên của trang đầu tiên + +Mỗi trang PDF có một từ điển **Resources** chứa các phông chữ, hình ảnh, đối tượng ExtGState và các tài nguyên chia sẻ khác. Để chèn một trạng thái đồ họa mới, chúng ta cần chỉnh sửa từ điển này. + +```csharp +// Step 3: Get the first page and its Resources dictionary +Page firstPage = pdfDocument.Pages[1]; // PDF pages are 1‑based +DictionaryEditor resourcesEditor = new DictionaryEditor(firstPage.Resources); +``` + +`DictionaryEditor` là một lớp trợ giúp cho phép bạn xử lý từ điển PDF như một `Dictionary` trong C#. + +## Bước 4: Lấy (hoặc tạo) bộ sưu tập ExtGState + +`ExtGState` chứa các đối tượng trạng thái đồ họa như độ trong suốt, chế độ hòa trộn và độ rộng đường nét. Nếu PDF nguồn đã có mục `ExtGState`, chúng ta sẽ tái sử dụng; nếu không, chúng ta tạo một từ điển trống mới. + +```csharp +// Step 4: Ensure an ExtGState dictionary exists +CosPdfDictionary extGStateDict; +if (resourcesEditor.ContainsKey("ExtGState")) +{ + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); +} +else +{ + // Create a brand‑new ExtGState dictionary and add it to Resources + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; +} +``` + +*Tại sao cần kiểm tra này?* Một số PDF không có mục `ExtGState` nào. Bằng cách xử lý cả hai trường hợp, tutorial sẽ hoạt động ổn định với bất kỳ tệp đầu vào nào. + +## Bước 5: **Tạo từ điển PDF trống** cho một trạng thái đồ họa mới + +Bây giờ chúng ta thực sự **tạo các đối tượng từ điển PDF trống** định nghĩa các tham số trạng thái đồ họa. Từ điển bắt đầu rỗng và chúng ta sẽ thêm các khóa cần thiết: + +```csharp +// Step 5: Build a new graphics state dictionary (empty PDF dictionary + entries) +CosPdfDictionary newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + +// Stroke opacity (CA) – 1 means fully opaque strokes +newGraphicsState.Add("CA", new CosPdfNumber(1)); + +// Fill opacity (ca) – 0.5 makes semi‑transparent fills +newGraphicsState.Add("ca", new CosPdfNumber(0.5)); + +// Blend mode (BM) – "Normal" is the default compositing mode +newGraphicsState.Add("BM", new CosPdfName("Normal")); +``` + +### Ý nghĩa của từng mục + +| Khóa | Kiểu | Ý nghĩa | +|-----|------|---------| +| **CA** | `CosPdfNumber` | Độ trong suốt đường viền (giá trị 0‑1). | +| **ca** | `CosPdfNumber` | Độ trong suốt phần tô (giá trị 0‑1). | +| **BM** | `CosPdfName` | Chế độ hòa trộn; `"Normal"` là phổ biến nhất. | + +Vì chúng ta bắt đầu với một **từ điển PDF trống**, bạn có toàn quyền quyết định những mục nào sẽ được thêm. Bạn có thể mở rộng từ điển này với các tham số trạng thái đồ họa khác như `LW` (độ rộng đường) hoặc `LC` (đầu mút đường) khi cần. + +## Bước 6: Chèn trạng thái đồ họa mới vào ExtGState + +Từ điển `ExtGState` hoạt động như một bản đồ, mỗi mục được xác định bằng một tên (ví dụ: `GS0`, `GS1`). Chúng ta thêm từ điển vừa tạo dưới một khóa duy nhất. + +```csharp +// Step 6: Add the graphics state to the ExtGState collection +extGStateDict.Add("GS0", newGraphicsState); +``` + +Nếu bạn dự định thêm nhiều trạng thái, hãy tăng hậu tố (`GS1`, `GS2`, …) để tránh trùng tên. + +## Bước 7: Lưu PDF đã chỉnh sửa + +Cuối cùng, ghi các thay đổi ra đĩa. Phương thức `Save` tự động tuần tự hoá các từ điển đã cập nhật. + +```csharp +// Step 7: Persist the changes +pdfDocument.Save(dataDir + "output.pdf"); +``` + +Mở `output.pdf` bằng bất kỳ trình xem PDF nào và kiểm tra mục **Resources → ExtGState** (hầu hết các trình xem sẽ ẩn mục này, nhưng các công cụ như Adobe Acrobat Preflight hoặc PDF‑Tron có thể hiển thị). Bạn sẽ thấy một mục `GS0` chứa các giá trị độ trong suốt và chế độ hòa trộn mà bạn đã định nghĩa. + +## Ví dụ hoàn chỉnh hoạt động + +Kết hợp tất cả các phần lại, dưới đây là chương trình đầy đủ mà bạn có thể sao chép‑dán vào `Program.cs` và chạy: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Text; +using Aspose.Pdf.Operators.Gfx; + +class Program +{ + static void Main() + { + // ----------------------------------------------------------------- + // 1️⃣ Load the PDF document + // ----------------------------------------------------------------- + string dataDir = @"C:\MyPdfFolder\"; // <-- change to your folder + using var pdfDocument = new Document(dataDir + "input.pdf"); + + // ----------------------------------------------------------------- + // 2️⃣ Access the first page’s Resources dictionary + // ----------------------------------------------------------------- + Page firstPage = pdfDocument.Pages[1]; + var resourcesEditor = new DictionaryEditor(firstPage.Resources); + + // ----------------------------------------------------------------- + // 3️⃣ Retrieve or create the ExtGState dictionary + // ----------------------------------------------------------------- + CosPdfDictionary extGStateDict; + if (resourcesEditor.ContainsKey("ExtGState")) + { + extGStateDict = resourcesEditor["ExtGState"].ToCosPdfDictionary(); + } + else + { + extGStateDict = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + resourcesEditor["ExtGState"] = extGStateDict; + } + + // ----------------------------------------------------------------- + // 4️⃣ **Create empty PDF dictionary** for a new graphics state + // ----------------------------------------------------------------- + var newGraphicsState = CosPdfDictionary.CreateEmptyDictionary(pdfDocument); + newGraphicsState.Add("CA", new CosPdfNumber(1)); // Stroke opacity + newGraphicsState.Add("ca", new CosPdfNumber(0.5)); // Fill opacity + newGraphicsState.Add("BM", new CosPdfName("Normal")); // Blend mode + + // ----------------------------------------------------------------- + // 5️⃣ Add the graphics state to ExtGState + // ----------------------------------------------------------------- + extGStateDict.Add("GS0", newGraphicsState); + + // ----------------------------------------------------------------- + // 6️⃣ Save the modified PDF + // ----------------------------------------------------------------- + pdfDocument.Save(dataDir + "output.pdf"); + + Console.WriteLine("PDF saved with new empty dictionary at: " + dataDir + "output.pdf"); + } +} +``` + +**Kết quả mong đợi** – Console sẽ in ra một dòng xác nhận, và `output.pdf` chứa mục `GS0` mới trong `ExtGState`. Khi bạn render một trang tham chiếu `GS0` (ví dụ qua toán tử nội dung `gs`), các đường viền sẽ hoàn toàn không trong suốt trong khi phần tô có độ trong suốt 50 %. + +## Câu hỏi thường gặp và xử lý các trường hợp đặc biệt + +| Câu hỏi | Trả lời | +|----------|--------| +| *PDF có nhiều trang thì sao?* | Ví dụ chỉ hướng tới trang đầu tiên (`Pages[1]`). Để áp dụng cho tất cả các trang, hãy lặp qua `pdfDocument.Pages` và lặp lại các bước 3‑5 cho mỗi tài nguyên của trang. | +| *Có thể thêm từ điển vào trang đã có mục ExtGState tên “GS0” không?* | Có, nhưng bạn phải dùng một khóa khác (`GS1`, `GS2`, …) để tránh ghi đè mục hiện có. | +| *Có an toàn khi sửa đổi từ điển sau khi đã lưu không?* | Khi gọi `Save`, biểu diễn trong bộ nhớ sẽ tách rời khỏi tệp. Bạn vẫn có thể tiếp tục chỉnh sửa đối tượng `Document` và gọi `Save` lại nếu cần. | +| *Có cần giấy phép Aspose.Pdf để sử dụng ` | | + +## 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 được trình bày trong hướng dẫn này. Mỗi tài nguyên đều bao gồm các ví dụ mã hoàn chỉnh cùng giải thích chi tiết 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 Tạo Đường Gạch Đứt trong PDF bằng Aspose.PDF cho .NET: Hướng Dẫn Từng Bước](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Cách Xóa Đồ Họa khỏi PDF bằng Aspose.PDF .NET: Hướng Dẫn Toàn Diện](/pdf/english/net/images-graphics/remove-graphics-aspose-pdf-net/) +- [Cách Tạo PDF Đa Lớp bằng Aspose.PDF cho .NET: Hướng Dẫn Toàn Diện](/pdf/english/net/advanced-features/create-multi-layer-pdfs-aspose-pdf-dotnet/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md b/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md index b805b04779..87d908535f 100644 --- a/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,7 @@ Hướng dẫn cung cấp cho bạn tổng quan chi tiết về các phương ph | [Ký bằng thẻ thông minh sử dụng trường chữ ký](./sign-with-smart-card-using-signature-field/) | Tìm hiểu cách ký PDF an toàn bằng thẻ thông minh với Aspose.PDF cho .NET. Làm theo hướng dẫn từng bước của chúng tôi để triển khai dễ dàng. | | [Cách sửa tệp PDF – Hướng dẫn C# đầy đủ với Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Học cách sửa chữa các tệp PDF bị hỏng bằng Aspose.PDF cho .NET trong hướng dẫn chi tiết bằng C#. | | [Xác minh chữ ký PDF trong C# – Hướng dẫn lập trình đầy đủ](./verify-pdf-signature-in-c-complete-programming-guide/) | Học cách xác minh chữ ký PDF bằng C# với Aspose.PDF cho .NET trong hướng dẫn lập trình chi tiết và toàn diện. | +| [Tạo các tùy chọn chữ ký trong C# – hướng dẫn đầy đủ về ký số](./create-signature-options-in-c-full-guide-to-digital-signing/) | Học cách tạo các tùy chọn chữ ký số trong C# với hướng dẫn chi tiết và toàn diện. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md b/pdf/vietnamese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md new file mode 100644 index 0000000000..c0f9fd3329 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/_index.md @@ -0,0 +1,310 @@ +--- +category: general +date: 2026-08-14 +description: Tạo các tùy chọn chữ ký trong C# để áp dụng chữ ký số. Tìm hiểu cách + cấu hình chữ ký, triển khai hàm băm tùy chỉnh và ký tài liệu một cách lập trình. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create signature options +- custom hash function +- apply digital signature +- how to sign document +- how to configure signature +language: vi +lastmod: 2026-08-14 +og_description: Tạo các tùy chọn chữ ký trong C# và áp dụng chữ ký số. Hướng dẫn này + sẽ chỉ cho bạn cách cấu hình chữ ký, thêm hàm băm tùy chỉnh và ký một tài liệu. +og_image_alt: Code editor view showing C# creation of signature options and document + signing +og_title: Tạo các tùy chọn chữ ký trong C# – hướng dẫn ký số từng bước +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + headline: Create signature options in C# – full guide to digital signing + type: TechArticle +- description: Create signature options in C# to apply digital signature. Learn how + to configure signature, implement a custom hash function, and sign documents programmatically. + name: Create signature options in C# – full guide to digital signing + steps: + - name: '**Hash calculation** – now delegated to your custom hash function.' + text: '**Hash calculation** – now delegated to your custom hash function.' + - name: '**Signature generation** – using the private key supplied to the library’s + configuration.' + text: '**Signature generation** – using the private key supplied to the library’s + configuration.' + - name: '**Embedding** – the generated signature is attached to the output file.' + text: '**Embedding** – the generated signature is attached to the output file.' + type: HowTo +tags: +- digital signature +- C# +- security +title: Tạo các tùy chọn chữ ký trong C# – hướng dẫn đầy đủ về ký số +url: /vi/net/programming-with-security-and-signatures/create-signature-options-in-c-full-guide-to-digital-signing/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tạo tùy chọn chữ ký trong C# – hướng dẫn đầy đủ về ký số + +Tạo tùy chọn chữ ký trong C# để cấu hình quy trình ký số. Hướng dẫn này cho thấy cách áp dụng chữ ký số, triển khai hàm băm tùy chỉnh, và ký một tài liệu bằng lớp `SignatureOptions`. Nếu bạn từng cần ký một tệp PDF, XML, hoặc bất kỳ tải trọng nhị phân nào từ ứng dụng .NET, các bước dưới đây sẽ cung cấp cho bạn một giải pháp sẵn sàng chạy. + +Bạn sẽ học cách: + +* cấu hình `SignatureOptions` với thuật toán băm tùy chỉnh, +* gọi phương thức ký một cách chính xác, +* xác minh rằng chữ ký đã được áp dụng, +* tránh các lỗi thường gặp khi cấu hình chữ ký. + +Các yêu cầu tiên quyết duy nhất là một .NET SDK mới (≥ .NET 6) và một thư viện ký mà cung cấp `SignatureOptions` (ví dụ, **GroupDocs.Signature**, **Aspose.Signature**, hoặc một API tương tự). Không cần công cụ bên ngoài. + +--- + +## Prerequisites + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6 SDK hoặc phiên bản mới hơn | Cung cấp các tính năng ngôn ngữ hiện đại được sử dụng trong các ví dụ. | +| Gói NuGet của thư viện ký (ví dụ, `GroupDocs.Signature`) | Cung cấp kiểu `SignatureOptions` và phương thức mở rộng `Sign`. | +| Truy cập vào khóa riêng hoặc chứng chỉ | Cần thiết để tạo chữ ký số có thể xác thực được. | + +Cài đặt thư viện bằng CLI tiêu chuẩn: + +```bash +dotnet add package GroupDocs.Signature +``` + +--- + +## Step 1: Create signature options + +Bước đầu tiên là khởi tạo `SignatureOptions` và đặt các thuộc tính kiểm soát quá trình ký. Đối tượng này cho thư viện biết *cái gì* cần ký và *cách* ký nó. + +```csharp +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +// Create a new SignatureOptions instance +var signatureOptions = new SignatureOptions +{ + // The signing algorithm (e.g., RSA‑SHA256) is defined by the library. + // You can also set visual appearance, page number, etc., here. + // For this tutorial we focus on the custom hash function. +}; +``` + +**Why this matters:** `SignatureOptions` hoạt động như một hợp đồng giữa mã của bạn và engine ký. Bằng cách cấu hình trước, bạn tránh việc lặp lại mã boilerplate khi ký nhiều tài liệu. + +--- + +## Step 2: Implement a custom hash function + +Một *custom hash function* cho phép bạn kiểm soát hoàn toàn digest mà thuật toán chữ ký sẽ ký. Điều này hữu ích khi hàm băm mặc định (SHA‑256) không đáp ứng yêu cầu tuân thủ hoặc khi bạn cần băm một phần của tài liệu. + +```csharp +using System.Security.Cryptography; +using System.Text; + +// Define a delegate that matches the library’s expected signature +Func MyHash = data => +{ + // Example: compute SHA‑512 and then truncate to 256 bits + using var sha512 = SHA512.Create(); + var fullHash = sha512.ComputeHash(data); + + // Truncate to the first 32 bytes (256 bits) + var truncated = new byte[32]; + Buffer.BlockCopy(fullHash, 0, truncated, 0, truncated.Length); + return truncated; +}; + +// Attach the custom hash to the options +signatureOptions.CustomSignHash = hash => MyHash(hash); +``` + +**Why this matters:** Bằng cách gán `CustomSignHash`, bạn thay thế bước băm nội bộ của thư viện bằng `MyHash`. Engine ký sẽ ký các byte do hàm của bạn trả về, đảm bảo tuân thủ bất kỳ chính sách tùy chỉnh nào. + +--- + +## Step 3: Load the document and apply digital signature + +Với các tùy chọn đã chuẩn bị, bạn có thể mở tệp mục tiêu và gọi phương thức ký. Phương thức `Sign` được cung cấp bởi thư viện và sử dụng `SignatureOptions` đã cấu hình. + +```csharp +using System.IO; + +// Path to the file you want to sign +string inputPath = @"C:\Docs\contract.pdf"; +string outputPath = @"C:\Docs\contract.signed.pdf"; + +// Load the document into the Signature object +using var signature = new Signature(inputPath); + +// Sign the document using the previously created options +bool result = signature.Sign(outputPath, signatureOptions); + +if (!result) +{ + throw new InvalidOperationException("The document could not be signed."); +} +``` + +**Why this matters:** Lệnh gọi `Sign` thực hiện ba hành động nội bộ: + +1. **Hash calculation** – hiện được giao cho hàm băm tùy chỉnh của bạn. +2. **Signature generation** – sử dụng khóa riêng được cung cấp trong cấu hình của thư viện. +3. **Embedding** – chữ ký đã tạo được gắn vào tệp đầu ra. + +Nếu bất kỳ bước nào thất bại, phương thức sẽ trả về `false`, cho phép bạn xử lý lỗi một cách nhẹ nhàng. + +--- + +## Step 4: Verify that the document is signed + +Một bước xác minh nhanh giúp chắc chắn rằng chữ ký đã được áp dụng đúng cách. Hầu hết các thư viện cung cấp phương thức `Verify` để kiểm tra tính toàn vẹn của tệp đã ký. + +```csharp +using var verifier = new Signature(outputPath); +var verificationResult = verifier.Verify(); + +Console.WriteLine(verificationResult + ? "Signature verified successfully." + : "Signature verification failed."); +``` + +**Why this matters:** Việc xác minh đảm bảo tài liệu đã ký không bị thay đổi sau khi ký và hàm băm tùy chỉnh đã tạo ra một digest tương thích. + +--- + +## How to configure signature for different file types + +Cùng một đối tượng `SignatureOptions` có thể được tái sử dụng cho PDF, tài liệu Word, hình ảnh, hoặc các tệp nhị phân thuần. Thay đổi duy nhất cần thiết là lớp tùy chọn cụ thể (ví dụ, `PdfSignatureOptions`, `WordSignatureOptions`). Dưới đây là một ví dụ nhanh cho ảnh JPEG: + +```csharp +using GroupDocs.Signature.Options; + +var imageOptions = new ImageSignatureOptions +{ + // Position the signature on the image + Left = 100, + Top = 50, + Width = 150, + Height = 50, + CustomSignHash = hash => MyHash(hash) // reuse the same custom hash +}; + +using var imgSignature = new Signature(@"C:\Images\photo.jpg"); +imgSignature.Sign(@"C:\Images\photo.signed.jpg", imageOptions); +``` + +**Why this matters:** Hiểu cách *configure signature* cho mỗi định dạng cho phép bạn mở rộng cùng một codebase sang nhiều loại tài liệu mà không phải viết lại logic băm. + +--- + +## Common pitfalls and best practices + +| Pitfall | Recommended fix | +|---------|-----------------| +| Quên đặt `CustomSignHash` sau khi tạo `SignatureOptions` | Gán delegate ngay sau khi khởi tạo đối tượng tùy chọn. | +| Sử dụng thuật toán băm mà chứng chỉ ký không hỗ trợ | Kiểm tra rằng mục đích sử dụng khóa của chứng chỉ phù hợp với độ dài băm (ví dụ, RSA‑2048 với SHA‑512). | +| Bỏ qua việc giải phóng các đối tượng `Signature` | Đặt thể hiện `Signature` trong khối `using` để giải phóng các handle tệp. | +| Ghi đè tệp đã ký lên nguồn gốc | Luôn ghi vào một đường dẫn tệp mới (`outputPath`) để bảo toàn tài liệu gốc. | + +--- + +## Full working example + +Dưới đây là một chương trình tự chứa, kết hợp tất cả các phần lại với nhau. Sao chép nó vào một dự án console mới và chạy; console sẽ báo thành công hoặc thất bại. + +```csharp +using System; +using System.IO; +using System.Security.Cryptography; +using GroupDocs.Signature; +using GroupDocs.Signature.Options; + +class Program +{ + // Custom hash implementation (SHA‑512 truncated to 256 bits) + private static byte[] MyHash(byte[] data) + { + using var sha512 = SHA512.Create(); + var full = sha512.ComputeHash(data); + var truncated = new byte[32]; + Buffer.BlockCopy(full, 0, truncated, 0, truncated.Length); + return truncated; + } + + static void Main() + { + // Paths + string input = @"C:\Docs\contract.pdf"; + string output = @"C:\Docs\contract.signed.pdf"; + + // Step 1: create signature options + var signatureOptions = new SignatureOptions + { + CustomSignHash = hash => MyHash(hash) + }; + + // Step 2: sign the document + using var signer = new Signature(input); + bool signed = signer.Sign(output, signatureOptions); + if (!signed) + { + Console.WriteLine("Signing failed."); + return; + } + + // Step 3: verify the signature + using var verifier = new Signature(output); + bool verified = verifier.Verify(); + Console.WriteLine(verified + ? "Signature verified successfully." + : "Signature verification failed."); + } +} +``` + +**Expected output** + +``` +Signature verified successfully. +``` + +Nếu console in ra “Signing failed.” hoặc “Signature verification failed.”, hãy kiểm tra lại cấu hình chứng chỉ và đảm bảo hàm băm tùy chỉnh trả về một mảng byte có kích thước mong đợi. + +--- + +## Conclusion + +Bạn giờ đã biết cách **create signature options** trong C#, đính kèm **custom hash function**, và **apply digital signature** cho bất kỳ tài liệu nào được hỗ trợ. Hướng dẫn đã bao quát toàn bộ vòng đời: cấu hình tùy chọn, ký tệp, và xác minh kết quả. Bằng cách tái sử dụng cùng một thể hiện `SignatureOptions`, bạn cũng có thể **how to configure signature** cho hình ảnh, tệp Word, hoặc các binary thô. + +--- + +## What’s next? + +* Khám phá các thuộc tính bổ sung của `SignatureOptions` như dấu ấn trực quan, máy chủ timestamp, và chuỗi chứng chỉ – những yếu tố này phù hợp với từ khóa **apply digital signature**. +* Thử nghiệm các thuật toán băm khác (ví dụ, Blake2b) bằng cách thay đổi triển khai trong `MyHash`. +* Tích hợp quy trình ký vào một Web API để cho phép ký tài liệu ngay tại thời điểm yêu cầu – một mở rộng tự nhiên của **how to sign document** trong kiến trúc dịch vụ. + +Hãy tự do điều chỉnh mã cho các chính sách bảo mật của bạn, và chia sẻ trải nghiệm trong phần bình luận. Chúc bạn ký thành công! + +## 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 đã 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 làm chủ 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 thay đổi ngôn ngữ chữ ký PDF với Aspose.PDF cho .NET](/pdf/english/net/digital-signatures/change-pdf-signature-language-aspose-net/) +- [Hướng dẫn chữ ký số Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Hướng dẫn chữ ký số Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/programming-with-stamps-and-watermarks/_index.md b/pdf/vietnamese/net/programming-with-stamps-and-watermarks/_index.md index ab6ead9138..1e31b7f917 100644 --- a/pdf/vietnamese/net/programming-with-stamps-and-watermarks/_index.md +++ b/pdf/vietnamese/net/programming-with-stamps-and-watermarks/_index.md @@ -21,6 +21,7 @@ Hướng dẫn "Lập trình với tem và hình mờ" của Aspose.PDF dành ch | Tiêu đề | Mô tả | | --- | --- | | [Thêm Số Bates vào PDF bằng C# – Hướng Dẫn Đầy Đủ](./add-bates-numbering-pdf-in-c-complete-guide/) | Tìm hiểu cách thêm số Bates vào tệp PDF bằng Aspose.PDF cho .NET với hướng dẫn chi tiết bằng C#. | +| [Cách thiết lập tùy chọn đánh số Bates trong C# – hướng dẫn đầy đủ](./how-to-set-bates-numbering-options-in-c-complete-guide/) | | | [Thêm Ngày Giờ Vào Tệp PDF](./add-date-time-stamp/) Tìm hiểu cách thêm dấu ngày tháng và thời gian vào tệp PDF của bạn bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Hoàn hảo để tăng cường tính xác thực của tài liệu. | | | [Thêm hình ảnh đóng dấu vào tệp PDF](./add-image-stamp/) | Tìm hiểu cách thêm dấu hình ảnh vào tệp PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước và mã ví dụ. | | [Thêm các tiêu đề khác nhau vào tệp PDF](./adding-different-headers/) | Tìm hiểu cách thêm các tiêu đề khác nhau vào tệp PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước để tùy chỉnh tệp PDF của bạn. | diff --git a/pdf/vietnamese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md b/pdf/vietnamese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md new file mode 100644 index 0000000000..e43058774d --- /dev/null +++ b/pdf/vietnamese/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-08-14 +description: Cách thiết lập tùy chọn đánh số Bates trong C# bằng GroupDocs. Hãy làm + theo hướng dẫn từng bước này để thêm tiền tố tùy chỉnh và số bắt đầu khi chuyển + đổi Word sang PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to set bates numbering options +- Bates numbering C# +- GroupDocs API +- document conversion C# +- AddBatesNumbering method +- C# PDF generation +language: vi +lastmod: 2026-08-14 +og_description: Cách thiết lập tùy chọn đánh số Bates trong C# nhanh chóng. Hướng + dẫn này chỉ cho bạn cách thêm tiền tố tùy chỉnh và số bắt đầu khi chuyển đổi Word + sang PDF. +og_image_alt: Screenshot of C# code applying Bates numbering to a PDF +og_title: Cách thiết lập tùy chọn đánh số Bates trong C# – hướng dẫn từng bước +schemas: +- author: GroupDocs + dateModified: '2026-08-14' + description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + headline: How to set bates numbering options in C# – complete guide + type: TechArticle +- description: How to set bates numbering options in C# using GroupDocs. Follow this + step‑by‑step tutorial to add custom prefixes and start numbers when converting + Word to PDF. + name: How to set bates numbering options in C# – complete guide + steps: + - name: '`Document` – loads the source file.' + text: '`Document` – loads the source file.' + - name: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + text: '`BatesNumberingOptions` – holds the start number, prefix, and other formatting + details.' + - name: '`AddBatesNumbering` – the method that injects the numbering into each page.' + text: '`AddBatesNumbering` – the method that injects the numbering into each page.' + type: HowTo +tags: +- Bates numbering +- C# +- .NET +- GroupDocs +- PDF conversion +title: Cách thiết lập tùy chọn đánh số Bates trong C# – hướng dẫn đầy đủ +url: /vi/net/programming-with-stamps-and-watermarks/how-to-set-bates-numbering-options-in-c-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách thiết lập tùy chọn đánh số Bates trong C# – hướng dẫn đầy đủ + +Nếu bạn cần **cách thiết lập tùy chọn đánh số Bates** trong C#, hướng dẫn này sẽ đưa bạn qua các bước chính xác. Bạn sẽ học cách cấu hình số bắt đầu, thêm tiền tố và áp dụng việc đánh số khi chuyển đổi tài liệu Word sang PDF bằng GroupDocs API. + +Quá trình xử lý tài liệu thường yêu cầu định danh duy nhất trên mỗi trang cho mục đích pháp lý hoặc lưu trữ. Khi kết thúc tutorial này, bạn sẽ có một đoạn mã có thể tái sử dụng, có thể chèn vào bất kỳ dự án .NET nào, dù bạn đang xây dựng công cụ hỗ trợ kiện tụng hay một trình tạo báo cáo tự động. Không cần công cụ bên ngoài—chỉ cần thư viện GroupDocs.Conversion và một vài dòng C#. + +## Những gì bạn cần + +* .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) +* Giấy phép GroupDocs.Conversion hợp lệ (bản dùng thử miễn phí hoạt động cho việc thử nghiệm) +* Một tài liệu Word mẫu (`input.docx`) mà bạn muốn đánh số + +Những yêu cầu này đảm bảo mã chạy mà không cần cấu hình bổ sung. + +## Cách thiết lập tùy chọn đánh số Bates – tổng quan + +Cốt lõi của **cách thiết lập tùy chọn đánh số Bates** nằm trong ba đối tượng: + +1. `Document` – tải tệp nguồn. +2. `BatesNumberingOptions` – chứa số bắt đầu, tiền tố và các chi tiết định dạng khác. +3. `AddBatesNumbering` – phương thức chèn số vào mỗi trang. + +Hiểu vì sao mỗi thành phần tồn tại sẽ giúp bạn điều chỉnh giải pháp cho các kịch bản phức tạp hơn, chẳng hạn như phông chữ tùy chỉnh hoặc đánh số đa ngôn ngữ. + +## Bước 1: Cài đặt gói NuGet GroupDocs.Conversion + +Mở terminal trong thư mục solution của bạn và chạy: + +```bash +dotnet add package GroupDocs.Conversion +``` + +**GroupDocs API** cung cấp lớp `Document` và phương thức mở rộng `AddBatesNumbering` được sử dụng sau này trong tutorial. + +## Bước 2: Tải tài liệu nguồn + +```csharp +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; + +// Step 2: Load the source Word document +Document document = new Document(@"C:\Docs\input.docx"); +``` + +*Why this step?* → *Tại sao bước này?* + +Tải tệp tạo ra một biểu diễn trong bộ nhớ mà engine chuyển đổi có thể thao tác. Nếu không có một thể hiện `Document` bạn sẽ không thể áp dụng đánh số Bates hay bất kỳ chuyển đổi nào khác. + +## Bước 3: Tạo tùy chọn đánh số Bates + +```csharp +// Step 3: Configure Bates numbering +BatesNumberingOptions batesOptions = new BatesNumberingOptions +{ + // The first page will be numbered 1000 + StartNumber = 1000, + // Each page will be prefixed with "CASE-" + Prefix = "CASE-", + // Optional: set the number format (e.g., 4 digits) + NumberFormat = "#0000", + // Optional: choose where the number appears (header/footer) + Position = BatesNumberingPosition.FooterRight +}; +``` + +*Why this step?* → *Tại sao bước này?* + +`BatesNumberingOptions` bao hàm tất cả các cài đặt bạn có thể cần khi **cài đặt tùy chọn đánh số Bates**. Điều chỉnh `StartNumber` và `Prefix` cho phép bạn đồng bộ đầu ra với hệ thống quản lý vụ việc. Thuộc tính `Position` kiểm soát vị trí hiển thị, thường là yêu cầu tuân thủ. + +## Bước 4: Áp dụng đánh số Bates vào tài liệu + +```csharp +// Step 4: Apply the numbering to every page +document.AddBatesNumbering(batesOptions); +``` + +Phương thức `AddBatesNumbering` duyệt qua từng trang của `Document` đã tải và chèn chuỗi đã cấu hình. Vì phương thức hoạt động trên biểu diễn trong bộ nhớ, bạn có thể xâu chuỗi các bước xử lý bổ sung (ví dụ: thêm watermark) trước khi lưu. + +## Bước 5: Chuyển đổi và lưu kết quả dưới dạng PDF + +```csharp +// Step 5: Define PDF conversion options (optional) +PdfConvertOptions pdfOptions = new PdfConvertOptions +{ + // Preserve original layout + EmbedStandardFonts = true +}; + +// Save the numbered document as PDF +document.Save(@"C:\Docs\output.pdf", pdfOptions); +``` + +*Why this step?* → *Tại sao bước này?* + +Lưu dưới dạng PDF là định dạng cuối cùng phổ biến cho tài liệu pháp lý. Đối tượng `PdfConvertOptions` cho phép tinh chỉnh đầu ra, nhưng không bắt buộc đối với việc đánh số cơ bản. Lệnh `Save` ghi PDF đã được đánh số đầy đủ ra đĩa. + +## Ví dụ hoàn chỉnh, có thể chạy được + +Kết hợp mọi thứ lại, đây là một ứng dụng console tự chứa mà bạn có thể biên dịch và chạy: + +```csharp +using System; +using GroupDocs.Conversion; +using GroupDocs.Conversion.Options.Convert; +using GroupDocs.Conversion.Options.Convert.Pdf; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main(string[] args) + { + // Load the source Word document + Document document = new Document(@"C:\Docs\input.docx"); + + // Configure Bates numbering options + BatesNumberingOptions batesOptions = new BatesNumberingOptions + { + StartNumber = 1000, + Prefix = "CASE-", + NumberFormat = "#0000", + Position = BatesNumberingPosition.FooterRight + }; + + // Apply numbering to each page + document.AddBatesNumbering(batesOptions); + + // Optional: set PDF conversion preferences + PdfConvertOptions pdfOptions = new PdfConvertOptions + { + EmbedStandardFonts = true + }; + + // Save the numbered PDF + document.Save(@"C:\Docs\output.pdf", pdfOptions); + + Console.WriteLine("Bates numbering applied successfully. Output saved to output.pdf"); + } + } +} +``` + +**Kết quả mong đợi** + +Chạy chương trình sẽ tạo `output.pdf` trong đó mỗi trang hiển thị một nhãn như `CASE-1000`, `CASE-1001`, v.v., được đặt ở chân trang phải. Mở PDF bằng bất kỳ trình xem nào để xác nhận các số xuất hiện như mong muốn. + +## Các lỗi thường gặp và thực hành tốt nhất + +| Vấn đề | Nguyên nhân | Cách tránh | +|--------|-------------|------------| +| **Relative paths cause `FileNotFoundException`** | Thư mục làm việc của ứng dụng console có thể khác với của Visual Studio. | Sử dụng đường dẫn tuyệt đối hoặc `Path.Combine(AppContext.BaseDirectory, "input.docx")`. | +| **Numbering overlaps existing footers** | Nếu tài liệu nguồn đã có nội dung trong khu vực chân trang được chọn, số mới có thể bị ẩn. | Chọn một `Position` khác (ví dụ: `HeaderLeft`) hoặc điều chỉnh mẫu nguồn. | +| **Large documents are slow** | Đánh số Bates lặp lại qua mỗi trang; việc sử dụng bộ nhớ tăng theo kích thước tệp. | Xử lý tài liệu theo từng khối bằng `Document.Split` nếu vượt quá 500 trang. | +| **License expiration** | Bản dùng thử của GroupDocs hết hạn sau 30 ngày, gây ra ngoại lệ khi gọi `AddBatesNumbering`. | Áp dụng khóa giấy phép hợp lệ trước khi tải tài liệu: `License license = new License(); license.SetLicense("license.lic");`. | + +**Pro tip:** Nếu bạn cần định dạng số khác cho mỗi vụ việc (ví dụ: `2023-CASE-001`), hãy xây dựng tiền tố một cách động trước khi tạo `BatesNumberingOptions`. + +## Mở rộng giải pháp + +Cùng một cách tiếp cận **Bates numbering C#** cũng hoạt động với các định dạng nguồn khác như `.txt`, `.html` hoặc thậm chí hình ảnh. Chỉ cần thay đổi phần mở rộng tệp khi khởi tạo đối tượng `Document`, engine chuyển đổi sẽ tự xử lý phần còn lại. + +Bạn cũng có thể kết hợp **document conversion C#** với OCR cho PDF đã quét: + +```csharp +// Example: add OCR before numbering (requires GroupDocs.Viewer) +using GroupDocs.Viewer; +using GroupDocs.Viewer.Options; + +Document scannedPdf = new Document(@"C:\Docs\scanned.pdf"); +var viewer = new Viewer(scannedPdf); +var viewOptions = new HtmlViewOptions(); +viewer.View(viewOptions); // OCR step +// Then apply Bates numbering as shown earlier +``` + +## Kết luận + +Bây giờ bạn đã biết **cách thiết lập tùy chọn đánh số Bates** trong C# từ đầu đến cuối. Bằng cách tạo một đối tượng `BatesNumberingOptions`, áp dụng nó với `AddBatesNumbering`, và lưu kết quả dưới dạng PDF, bạn có thể tự động hoá việc tạo ra các tài liệu tuân thủ pháp lý, được định danh duy nhất. + +Từ đây bạn có thể khám phá các chủ đề liên quan như **C# PDF generation**, **document conversion C#**, hoặc các tính năng nâng cao của **GroupDocs API** như watermarking và chữ ký số. Thử nghiệm với các tiền tố, vị trí và định dạng số khác nhau để phù hợp với quy trình làm việc của bạn. + +Happy coding! + +## 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 đã đượ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 làm chủ 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. + +- [Thêm đánh số Bates PDF trong C# – Hướng dẫn đầy đủ](/pdf/english/net/programming-with-stamps-and-watermarks/add-bates-numbering-pdf-in-c-complete-guide/) +- [Cách thêm và tùy chỉnh số trang trong PDF bằng Aspose.PDF cho .NET | Hướng dẫn thao tác tài liệu](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Cách thêm chú thích văn bản vào chân trang trong PDF bằng Aspose.PDF cho .NET: Hướng dẫn từng bước](/pdf/english/net/document-manipulation/add-text-stamp-footer-aspose-pdf-net/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file

$Vny^y)D$AX+rX0&~{Y|h9{)`*`9@5FaxefKgS@Dgwc z3}k(y`}b4;`JWSHK^^do^6%XTl2R3O3*vaxWUG70%>UdMT0udxa7Lvd+AUsd zrzrYg8ghUV{E4)Li9VDWT$q&bpL>gWX%?dYb8oglLGtz+`){Xh_(}o)G>P|B^1rS8 zzv;)`MmptCDEI%5M+p3vZXh7o+t`OGnsgHWefXE;XLA1z`2QHq|M7@aq%<;M7YGPn zIw0$9Bi|x5(Ekn^WftAje|q_gmVU_5lguzPFtX0I8{1^e4&p6aTB{Ubh6Qd*#TE5( zvvn5z`gc-hBl8wf{+VL|#_#``(|>0DMCBXr$jX>18Z~&q zURa#|qV)dpB&~W=JZ_(N=#$lq`hDN#Utzw%fArfMIkdFr{;~!p5@A;4A1GM(x*hkX z>7p<2!vs^{s5~_WN#qC0-=8%8>uCSiSx>D_Cqsq3Px5>{RB;N8xv)#Xk1QwoqLdFM zkcGJR-t8ZJB&KB%y7jc;m+kInB=a`OWik#%!-9!(v*KGUu6*zgCBuC~pl)79@MqU- zWS|EN>E84Oo_rQWMmWMwiu^8p-}(&(7x)XoB%(4_wxDT0ex7XD^ig@Up7(BFRWa^r# z!f9v4x4nN?YJpIUJVL0>_jExrZ>6zOy57jh%B#$|W@xJire)XBCij>XLUt(G!*FE`UO?A=zqC(z_YzT&p{|UL zvi7n)Yz=Nalbv73A7rfo#c^S7HGb#QuTW;6nFl?*N_`rPmZ4|x0RwMfgIlSsH#%GY zS5c9;Gfes|R& zt?SG_{VHtL%RkkNs6!Hhi`G}NDs}Q6#l7v?8yu~S&A=H%6w8a98BtQ=%&P4RTUW<* zeC`-Q{@pvfxQ&o06D0fXzYqP67&Ur^7H!V6@=PW=vi)G{W2m25b*ut;&CVp})%bB>b7`IkJ=Hn(Z0ma3qQi{vF zefj8j4FVz~9BJpovilr`rttNh1To=u2OM+_9pVhrt$H;{O*v&vxv}|(z2ThOnM>?C zlCCXsIW7Io>c9g$MkD?F5je)g8Ct=ev+2x%Lb!Bjao=hc?5i5Y&pm1U}_Nwv{$w%wazHtw+O ztPVnEMT=>Iz|yWFQ~8~3-|64P`Mn35I|1BN9O!nEw&Ku&+$h`bBh6$js9$X#HRGS3 z2}*%7bZ$mzS@}-^bQ8*2wbhd{nkY`bCpyynj2ak7n(x zh_kCOV_TDDNgP#ktV_=QRxCf5&#ZjGYWno0AyrBKWk1eK7H(Pf2ipfF^eE@Gg`zJN zHDOk<`IY5?9ZmzA9zF9eEqQG+eeN}BFvH8egl$+BT&&9UPXAf5==oDq4||CX z1y){tLFDa?t8rtddL0crMRF8Qa`mJYKMt`()9JhA0B7bG_#WE%HysY~U-8IHq>tw! z!j0o6*_f{|R4dO{B3IbmxKn06_Q1<1ZnbYhq$)fce?3cS<~l)b6A~01eDxBF3tD)i zT3#DP!Fa~YAC#2x_V~~+Y4SJM=|lj%Ut=5BdC67cxpH6;c+d26*Y#C;AEA70(!f+E zu>9v(Nk%8eepWO0bu$)0O(c65u(|o$s4~D1APo9FAmvhWh|CuwA@z1&e#fYB!T9d| zIV0#jm;}&V{z(!r0J|}C5aqQ$n5={h&IpBQQW9_UY7VqMWYWZMfsRdf zP}*9y0aKU{jgL{$^_QSoFzQ z^huh?IL|(J$bi(7&j2rxs2EFeAoZ5i+sK4L`Mx`SzkM*%*>}+@^PniC-lDEp2=#<( z!Xg7TQA?9}nvFmDRvg_p6aCXwy%wJcBIgvQ-Ym(SdSeP2J1&Hm6cjBQK+ouMYRdc| zACCx?A0P-+2Rw21>?z~*{}(7=VRkchMl9t$+-)O6E*7@4n!r)Xk%#0JM(W+G6&zI5q5XDnhcDr3`Kk&&V#afw?A6&f_8aJEmlMT_SbhV{u z-7=6$Op&Sotd@VjGGA(68dGuC+YmjjBKX5MLOGRjY$nHJ z&oR!Kf)G8XbuoP!1XstQRJWOozi_f&2Jb-{U7x+B6bmT`3uAjuFBJ*8UM%u3s!#~G z4d=O&q!r1Hu#tOPC&!4p|KdSJAuU`cNU$P?!t3&*BFF=($$3pATm+Cw^YiVStb@jy zOz7anY^Q#?z7YyVvf;m#>4-E~UTAkIpo$50dhTyZM3`bjS5&aE1mhju+Ztgy(YEs1 z;>hx4=j0fS{_$d19n~F!<4R6t<>GxbTRc_2r^pG$I?e0$At)tEczNxiKlZK>wvUJzk1gIOKB=$5Z=%!2z$#mGXTQlqEi zqdCG+#akO>>tlYhiJUG&v}F-6oP8+*dI=2fNYjVVm4?`kS6l(v*`!jnKN^npSWZM5 zdvZdTXS^<8GkN*`CAz~u{T);4=k|0&4C&2`@0<9@`)LO?Bf0mxR^!1@HXStNc+HV? zY2zYZ2|`d z>;o)PV4?Ye93kynIu7SKriIrM(_<3h?=kd$37^&y=f8@7!6h^{q5HDiCwn-YsLiqfU7avBKkhPfCir4W(W0_Vc$bhHUKS zZc@iy7Wu{Qm5p3il7*l5vEl8yc#M`Yt=XhpSo z!$$Gs&=n=@ad*BTPJ<`=8Q)kP=w%%^tLsZC&SdRYoXgbvsJrs+44&JK3cCCfe~F6J zvTECNq^Y-GTC$@!d$@bWq>J&z1QX#4>|ZY!MjasdPj=b2dbOwQxf(PqNHHI^xhF@K zI3EA_b?4LX;b*x>RYw{SW(n+*alW*x1;E9Sak!ePi9-!?Uwmno^1oNJCau7A(6827_g0 zvXU}Uv-6R1aj~<}6Sdus#68$^w1UC7?2P+jnGN*>ni^?n1e3#tH|-r999R@zsN$}F z)lI7>W??SxPpk5sxZ0iGbozRlPuibe z$wa;ec5T8MU-kEhdU<$YP4JxW2X6fw%-!jH9&w#f+sx83Y{Fkj`TmHL_5l}`g@p~K zGI3Iz4zEJRf>XpLBwB}ny<+C$HVD;N-zLU(oU4{-y%l1eR51}B91?O}fSf;(44K6U zHMc57NL6z@q_PpeNQKPY1=qOKze`PFp4i@8yzPfoV(iV=xE%I&E(+PuSwCIIeuA)( z^&l-edi-|o&hmO07Xl%2&dN*6`#Ow>K*9+|S883><8V`q695oH_^LZXh ze)yo9Q+U&QKAxAK?*YFVc#lcswAsz({(@kK4xyWzgk;B`@A6>oPbz}MT46~^lk@i8 z*fvLo{!%wB4NW)g=;&DBGqj+fAke3lC*IGH(U{nnL~R}*grdsG^f_1+dfa6Ua6u8l z{0CiMe}lN5EvtbBJ#0ztn(48dODJgTZ#UxDpKLgf(cw_y@ti+%!byNADkelF9bZU{ zo+Y`OvQGah9n1>A4JPK+*vLVBfZ!6vvd%!~<}Na$qokx{Z(or_NaXYEb%p(*AS$Ze z7Pe7e?9~*mPWj|caG{2Xh=`n=s*c>ix>mB<|E=R0fq)ZaQ zaiC3KzLXYR9M;|W1P7xUO6NPO8J&vt(FsJH7m&E3^^;x4+5_ zYi$q2U)*2U*S9Fj%IeZ9d-^os_Ph@Rmq9zs;4t*hufab8{5r(k+ytn0b~5xbZ@q>_ zN0rpoqY`3>V?tlyU2bfhCY+w05>3fUNul!VSP?VIX=)M>Kxv^+S|TDM88inpG&FSI z9z8bRl0q5=hOW-eKso8)nmZB(K7j5Whn|-dN^eVOZhx}k(4Ssu_G;0BB%Pj~BqU5x zWEt8VqJWlg+U@D->u2OX25#W3%qtGF-|vWt85LjX$NNhjg_x9JJ7KUkQX+wj9YD!v(k%_j;Ye|a6{bQq}j(zk_ z_N5raJc9!hGks%i!^15CIyw+YQqSu6*qE}4au$D&xRfi-<-t(HkIw07n5BClc z#aj8QkW$p4I))y(BPAV!Y^1V2Gpa10PBdyr}Zh|ky=y)uM^M*WU zmI=mgs2s_bo^5m}pZsQKrgwdM$CtqA?w>nD3oJ#)6TW=wCH6=&-KtpqbZt7y#RZl= zZhNz~E5`@dF`H&7)1+NA%_=T#-0K^Is?v{)kK?e}85)iaG+9hu?e~w5tE^&6L7@ec zlvw%s`GV`5&R09zQmRt1e}J36+dmEwkx8nv_H!d(9SYf(cgy^+)5_$)R*8hgv9oJ# z_}-4Y#%zAN>F%tjEdb}oTwfG)A^Vkm#j@tG`dVMyZbdqGrIT5`V8ZvPh1m%=TVVKIByq@uRm*zIVsPDLde zTVyo^E#YqVTJA-_n8-ASzljs1#=eq!e2h7!OO}pw@bPKydZ?)rOao-fOYm6z&4rNTe)74UC!TKdE1S zaH|>*B#IuE&h?HO9Jepr&eu2Yij20jTyM3pqv+Ye81JK4PZ%`rD#yrruuKu=$U=vrkpe?cI^+F4*W zuU>t&*C(Z&{5oj?M_yjN*4$<%0>0pW^WA$05HYejz8J4-9D3RfrL?z2kve|~c=n_; zEz~(UH`h-+7X^)DlnYt#yu3a1n$Z^x37v?Jjf+p@fq8;{QcYjgryp&0?5Dhk=}1Wx zBvcWTn>w9N!!#}_9${kAc=`CWtJ#dLMtfE*1pL@3q`!tPTaBINnyaD4#MCr!sj@`eB#WzVXT7GL z#dqJ&tCNcQPNj^mZ`{ZOJwjg3&Q*u#AXQg|H0`e*Q&L!op(CR;TA#%}3wk+aKG!HU zO8z#2$#tAn;(1wlWm@N0Mu#jrN40(B^hI+<$0*Ayd^{R^#M^n8dq;7@=y6S59k_pw zNmanYVt1qiBbbOqq2&@pH-;o`EW%fVelzA~dTzHTL&QyY-GhUv9o4X_)65g*89Oa9@i?PUUXfx@3|p$_HW$|1W?v7&``K+KgHPk$cMVZKeRZimJ}7# zK~Ns7KK8D#gj-F9e!$1a$Ar!--@vbQYOSZc zhSJD7W+pn|-QN{eqH&03vAXCrkESV!8w)lnf6$ak_E(_aDz1$y*f}^(S3?s3UR~Kv z;&yEhG>tetwU;BDvobX$z5KSdwUxkr-EA;vIIls81lRXH$A7gU6(wKH(C>S;ucXf$ z`H^maK1f_f2A6H1#o3OW`nBTQpd7WKuU=wNS_u-iak6hkPiiGckq+r5-F*k zT*U-d-NGg24{>)&CKZso+p#7c;ylSb;1t5V>Ud}83}*V!*Fqw^Zorxl`i8iwc1OF{ zJ=~mxMvU#aHyReaP_9|EQrW;=&AjnbHQ}s^-B|8*71m)*;F8Mp5k&w@9R2}ow|GxY zwMXkMcbWGe9o*{)#N~_7KO|dtvPpcjRqm-I^V-QNZWqZHw4uLV2qL-Gks+Obbov!> zeY;d9cYMxfxK_sSl zb}%wJS^>hv=<&0dk@vbumP62E!x;crlYm>J^7QKKm6l6+FFZ$3)NychGTF4Qvqdl- zPQY!nvfp$|a=cV-EE7Y|aC1F^VNkjT}U#@kVrk0)5F z6*l@}62mV`Ap)JB2A!_!zNedx&CdRW4&0(d7<0j{V%0gX&QWjvEDuOYN{aODFD{<7 zI^9LMl|!N1AP2eVbK;jv;ADJf|06+F$Bvc~e2h7oureqc?}m&qsJVUea&z6NuXfEI zZ=OhRH*3=RM@6k(*kl-Lo>ihh@+La$hjGl3@0mcRZlgbAX zwhoQ$;CuOUAgUA(j!yWT%?I<|bD5uG!?00Nk4qXaGPx`Hm6WQi=FBZD#t85=fkkrP z-AFZBsnN%BxL#FsNzP*dua*}<>6mfmRk2$3vCvXV-Bm?H*q z45NEex(78iH4&TR@XWr4J>#370R8k?_ILHoob4Bfer=^{%q_FNC6w5ML7Hr!hr?qG zuWwOxbZ+5S{8qE|5y`iO6%~PPMgXz;uMec~1l>Bp_lB0U8ygK?N}X&d=pqX8@XkiX z`6k7h@_ImDHh0YQw6+#``LVLI-&ifOdPWNHVYl=bqH8eD;ZtLtWa#7CuwN)G~NfCYB&s!PC#@LdS1+_Kb zsfJf`lxWu-uEEX`g<5u#8hQ%}dEF63gOZMR&-rOL>e!wh0dT><(2vamP-FufLnfAI zq-}0tcDh#X?!kWjT~~Ra^p-&rd`)Ugw*p&tEif;*?Z_| zYGQVMn$w9@ogKc5ClTk!aJz5cYFM&9dnrQL1IYE!kPoVc`J*<>T%{C$XaSZ1V3^|ZCk z?@iE9QsOb)+NmO*{~;$HC@0SI`C@WPQLMLDT7>?+*~&X9seqQ2HzK$_p4I!>jVBIi zwK;itobFpINpP*%w#ov`VV8C^ zAgtg;Vg#5$x3l|WXV_a66^0cQhS32$y82COOescTRf->RIpn+V-yq2VDLXq{&e`oh zNl#xA3rV>?>qr40m;bZpTq&tnl$~K%9Pq0NP*sKA!NI|I(7p63{W-(+mA%=@^FL`B zcji;?Y_8ShQRCxZF>1m#LQWG5=GocnoM+A;9de1?oxNrjtDjw+8_SH^YRWRGa5g6< zQe<iChU#5l;(U1yKGjN3d zBzKv9A^1X{NvJC(I?Cbu?)CP*#aGhBZ4UF`pa9R?`tUwW1}Z8y{Fmjf`(H%@R4o_E zeEHW4@f4{=djNQ4NK1PtCn2$!O|K~;L-d?4G#%^RU1e6dm=_Q5Dm{HYxNHukzY&!k zw2c1(uO8K6G$N+k3%`-9EJJfgJ0q1d)rIR)=N@*6=$ows;51;56@q+o&IXhfMi}}4VeIP#~psr06!zZAhSd#z?bFql#$s*q^6BSpJk*< zPj2q*4YW6AF_uo-3$C&4(-dsoZ)r(ax6{_AzS-6t$(ChiW6I{!5eX^pHk83tWJ>5ON&xqk5rxxq@ z4f3(^i3xtUlZzR)9*q6j4=;NQ@@f_McCp7i{#4t{+!Q6Ad9Ca+td5Rh*OH30_o4?K zfti~e#9vP4xwIA$llq}#D5M?sQehABAT2vO_A4tG0d99P4$CX}$Usx{!9yOypPkha zwOV@%nr&`t+nqx%uoWp~Ur~14EZNpN?a$$|jm`8#$f^#%*tCo^g*ZY30;HmgKMR#c z?oHN;?fhJ4)WRWb_iEF#xUfTQQyA9fpPu$SKo&`$rr|mRQ->W8LdYb|Nnw|;!PE!8 zfM0!fmCzKFl$0!4s2QU^js0ZRwVqYWi6=2pk_Znxa@}zA4IzvO1hdF1q*t5jg{4Wvi>{O zHWUMJ5u=-cW~8Nlfo)fMr4XE5b^eRghO)C6-J&Y8CqJ(M?HOtoY`|eh*iA2;S@P$S z@8!hs_|s<_Vr9RJdEt2zpVzg8ja1l0o(lOs3)fXV-{HPsCMDQGNymSO-5GMRIO&s;sAZPXT<2hM8ZdKz-NN{yNzr{L^zYJ$bZ0y1Kf>-h_JqtFcu_w=O1fxyz1@@(dBVB9r<7cb{h} zNEsC!JvK2Bpz%>vwO!6KQdNm3C^#*7-D5?_KlDp;Dja@ElV)xEK5>^@n9o0s$-@5+ zJw20qD7wQ0)Al`M^!V|2NzJ6<;@}#n*o)1oL_(rmo#ZCRo3{>6O-%==;+t&O_t&L( z50--=uHtflauOQKifCQbs&y1He-p!?7!)jf<59RFJuk(?MoH$Sm;a`bHnrx=3mDAk z7^KSki{NR+2Sa=Uf;{8FiIMHz&ryAR?q~HY$BO)Ro;Q`3B~9#2WHT8>MHXgef`_LM zZ_S%OJOIw7wiY%$triy_zqP%YS5Uz6%0BNKnh+u)g@G+@SA}ImCFni&2P0?a$8A5c z=RA-}0TxJ~&l(zyEE~{PPi`T|snn<`yOk;Sx*nouYel+9?@Yc5o zU`>=VubfsUY2Ck21~jf-v(or15p+YQz${a{7*KzkWPCHu!RokxnnJeP!5`r7PvP9g zKuz7&KQ78iup`O&>a&bY(WJa?9o80ZEg)T}EF%u(J?r}=uAJJAk5QjLkMLHybs*Hf zt1#qk4(gjKoZe>>W3y_a{gp`+`)yK#Ndwr#;2y0TnKG~pLFu3uGE5xMn9w>*J5 z8wW?8t#GWZVU^ZP!=}Vnf;oX1j&45FD5XS3#!BAVHT3n)flreFDxcJ>MmO%Km{X^E zlXy#~-~IOidGf$-*kfm+-Oo3^5@*ZFd5ZE1S$`5Rwn(VZPt2!IJ*E3higi8IGqQY@ zRen^|heCSfu2WWEs3A8!eRcK3Kd&f~7&kvJ&AcYJ$I~+bp8^J#noCK94ZYPlMDfF( zQ=ADll^sIby#C&kbRl7rXI(q1>9oh7UFGuY&tlSZG?4JRI{RPlx#{WII-zssYEPJ& zhqt1n_iAW_GepiIpZ2qNZEn1a8&)o2W79JWQIRb$htG^nV-Nw|MfKQNH#O-Xzz1Ir zOqHIUJ_9t#MxjN-8COoAl@N;3Pk`2u&h|d`BfRq;q>dYJtx}oZ@2VP`?NvF#Qk@9R zr493WGRE!S?ZzXBJVkSb1_KD-paU;`!)w&gmkQV=BORTjgiM{o`ks%BrnU~OyNBPp z`=pjqE+xuQ3(48pqM2t4y$df+U9Y2mw>!7vj>Z?9y z35FDEJs%w%)v9yhJmr}vUQn=2iz+ee?l_vBo(?xBKh+n#Or99MK?Y@m)%XI|@4GR= z1sRP~nFVA+;7Hpt=+P^m+QHd$@*XeyMsMKL59RMHnj1UbGW)J<=?@hVn0Sg@S3pp` z$I8YgKkJ~+jAvD-eRz4-xO)W`yx|(ZN07-!QVYzV-fh?!52PlqFJ%>U$R_#+Nm0=- zn3|iLbN^a)-LJpg6x%wE6$S1Zqmm?wva^^VBHf&#sKLl$eK^yUZ(eph{rP*flz=Ghvr zi<3}yp{MK3^CevcwL#GG9QnpAP<2>d-=5Qdx_F;DzSjz8_&LhhZ1k~M(9}f${=k6^ z)UV`0)~eWRS&(Z!^HY9}ApJ#qkUB`9D0al9&E22{ofD3&PrN(bgDfo>uocgVd2H8a zAN%9c(Hq|VczEgx1?U{YJ_4H{-E$5M3jFO6!%6-=G+j)~&Q40&yk0OMD|LAIXZf4{ zw=Z8th46nC8z>mYd?z4A?slCG;O6G%+CEMKA)-~U+ zVoE?r5F>EoGrS~%x>Cu|medlidW1dj1Jt!d(TU%%hYe-;C`t$U2k$;zEqyVA@$@?k zA5?l(F^G9=K_w&0U`Q~X+r~T>PZxc%p1|*f(>D4$(?A}Pzq3H? zsR)zSgSIEc@9nY062HMvfnmEml}c}HydBcdZ+5_Ch?Pnbocw~h<VNdDfsqpIo6z7_$eUM{oK%I~~#rMkCZ9I= zJ&SOsqtn&=uafsRuDi#! zC8?snz2{ADSmsnT-mXpCUAvKiF>gk>tL%OQ;hVc{GX7by89Cd_exL^JGCpO+n4YM74K zdUqlf)da!wGh*@isLXdZ!m!m3cU4mq>9p0>HAtdhxAq@Zf_U(%_5wvqWC!i<3j4Mm|C9VXBhcRJAHk&oH@yXK2qn zZWj}RcT6p{`PxQPf88c<+>V3dZg6nbByM|T;y)H)&vi4{NF>++v39iODK+M9i<<$p zHRC%{3T&ygD!;}Jp<30uf1R34d?D^6In$qsnp$^En~aMO}RS^g;s1$0qq& z_lbE1W^)P3D&k0lziYp^5x$6v!vC!h6gG8dV}m@e-PYUNR%$vZF7aydBtSU|Fyw0? zI-ZGq7PgcgN;$w*LBWUG=;EqJuIc((|82yFq~P!0FSnwki0A8UjwT=YbByF7QL6nk z`8pW$2;d+&BK}YM7Gq(&eck1wULH!S4odYIMH_LJw9}R!{+60JWFf-2w&% z+3tl;I0>L!)}%O~4@v{8EnQ?tj(sWIJ#AAGs;a(S2C;E*XNTvIaOi$mC4~y?oVqs=|$INVRbgR82}qK8q#g483N@TtaCKl!y2u4Y1^4PX%*FS>^Q1Yu(9c_>1IoGfnONZHkrsBH~TCBsn*GKSnQ^mIm zN^Q@cxUU|yfnx058-jYk9^s9=MRjK$AOEo^)Q0Xq;+IqE&3;{LIKASBT~_Vy-+f`x(6{+Z%-s|s-fYZ?g<21AnLYOdjeKkC$%9xzJ z@zl`L@~qi)oA0v~1Ze`?YqvJr1{m8P@%MAwGr)IsR33so!uOu4q^F9RrKsA%Lhh%> z^4dzIQr1hb7WXI19mi}XU>U?b_7%qU2jhMq^2~eeN04>Mp43BVsi>~EW>P#Z4-@u& zHWQ*7A0DwyFeb^L9EAJxeWw7jgo@9X@lxx-Qb%DZD7$l>8?RRNbt$%I&%BO|##SlD&91$03Z_g%*s(); z+d^|Di;&yH-=)`GUQcfs6q)5HaHT%fI$x?%i9K2bAnzhm8ELMO0E^2+I3)0i4y&5e zUYNzNF5qNjsUdA`6cO2d)HF0I8yeW|Po=0xnM~(fvVg<3mDp{`q6K`hgevXVq)CsD z4@bvU^u4oIatbn)yfBaG$n3`JMd;WyFWVGCC*^XU z3+{>W_4aqQEk^gXipgd7CGtB@CnnC;zphWvVsIJ?j~ZgKQJ`1W(cw34URqfhm7Q8M z#)}gY4UReZe#c;IxY&@2C9niA2;Ui;T;xGkG%fs9G&MPFw#>V@+g4WAf)ZHCmTtXdXV=2RhnZevd!DUw z_;0^S+fY=ql}k?-LJE2R`6AXF^7Qx!b&X!@Y7Z#|=(8OAp8v-$AS1heJM#Ar;ky~0 z%ekXW@jP8Ija1?&v$Z|Gz1~g%RmG5`_cvRW1WA>sbU539yE@$F|1+_`q3|q-N)if% z+DdK#H4sQd%vucc8L^0Y9c?>14=1eVamsnk&wvy1LBl&`r4bEAi{}_`*xx0-XztJ< zlZszCZ+0@Pgp^Q&^_SMzZ z(o#4elE0;=8xJtQhzO4eSIh#kKu})s*vWm6){K7U2;>;go@6vOrj_PWaZ>DR|GpV9 zX6QV-QW@y4(5|a|%51h$Dg+mH9KGC(;rF;+#klnZ@(qP}NmzYS=k zp`!_w6NkC%ws(!Jb7i4WMFSJEoh6gc*d=;zZx6_UCI80?y3BaX9l@`8ZEKoRO0u$Q zeSAa}6%}>mZGeUJX*$UzaZ*}{L9=XZ9PwGLzci(U6aV15p0d;wSf_*Ex`7G~U07UVO6I1doO&G(wqL6*J*7R6DdB&YqU5IK$i<9AN3$tFPe3sM5= zbZ6QXLH*I+Cw{o!2>V4gt+?0{3gvY(xtOsk8X6nJ;u_d%Kzhl61EkgeK01{Lb$wv! z0512uUrSy6v}d0n)D$6AdT*L_o|xKURy*P6^DVO#76lcL?)20iDg*)C(>B!whbat1 zuzff9$;{0hx1x#`B*;y)8?0qU-i-T}-hBI6F6#`zvUxwF~0N;Jq-508%zkL)?vnTLml#z#l7 z6X|KWb94qt4EXM4l-k{som5n%O-)T9bqNJgS-{ZaqNAf>FbydwDH$0H2L~A&Q&T}b z1vfW6C3|y?D;8{AAe>&(f+Tugob?24em`6+^g7XUrC3$(9^XYSEJEPmHV<$7|xBg%z zNJy|-27mpTtDXS#Me$%V%P641=Uw#2G_49@#Fy4LDV~rzj{+|O7Twv6Iqq9icuz)$ z9KgZTmh4ZwlA~}I9KC9_iUY(_0L-FlByj>tl5ik%3RP#xxw$yr?_}D*`ztR7J|#Me z;?UX&m6#_~bqZ*|tj-&~fK<}b(sJ|4mC5XP>1opqkOTT7f*thX+ag}wbg>-VTSIfo zw9(y|XjL!qpWCne+H;!Mm}%a{1H)3MW4RE7nF#d5o^@!!0dm5ulVN%X_2gosO^=U_ z&X2C+SfDU(yZ(5lmqf#<9b$fqUPybhXA=zxst>Qucb7B^+6``xMyh{20psu>4HHmz zu1*$nVBG?TbtI`Mq}bp^{p|It@x2)CmWM6PUeg1P@P1xwt&idksp-siSJ)`VRppf^ zDCol3AFTc?E!iLL91iebrqV7visQ5RSs6uvjss-<0qH#^7`5kCW@ff4zZi6g8J#Jm zx5aVP)nd81xj~(&tnBb`nW~w!_3^_NO{X_5y+fMuK0N*mI1_$nd6x@zmX zviceU!JxkVbZ3rbaDv~#yy;%T2QT4OKzw9)d~!sBuRaoRDhwpo7hX=^ zydILrm4lpdZPyj>hW>s*v?ZUl<+anYi;WCSObiS*wwGVx;Pa5MP70q?sziTzM^`b& z`1va)*F+|YK1kOxA!cAKk&)9>0SI^74pJs|yB1NMp?T{?YG&r_%!y7Y-VcF`FfK)M zG5lvgzGTQQGf+1ijuX%V@wBDot?`WP-7O++W24?cqnFL0-}mnTvesp1v(s{~ca3ZS zm`ShQI6g=D>8PUCcmR|O-V-gbCJ|lrs3+#@^$*)V853M_%S^VKyI1jdOoKGX}ny> zY4!c?WH9pt^#r%UiBaL*C@TktosEqdTnZG?&9!(KROccAUkGH^q9OQe>)ZOqP*AB- zR#nx})($(PTkaks0J24D+7dv2mskCKhKh#6RtXd$qa7MxtAMd|Lj7h*5p&7(WT*A- z15%*QvMgqBbY$lO0$+fQ@bQ5;oSvd7D~~x}J_fl7i1K>NOUp|ywzsxc>-ND~e9;l| zn#-UxCZ{gz`}gSRzc__1SWX&dd)mHPj>|PKp$Q!ACpGbppFDM}7&SGaEQ*R~GH6ed zKq*}b0#Q^`N{mj%B6{I^JU$2fXKU}eL5c8_EX zl^rZCwcP|2R$4oNQRSDE>@Tgq^=-{7F7^xd3kvp|tI|Iorza2%dL_!#R9q};ZJkPf z!v>VplS~<+A%tr{l5S|4mzFjUl+;>U;rB}F@wpM>0YJ~CTY4Acp&faK^{_nscZbU? z0bVeGvz!-rquy_CJO^h9dQ@Jvs(z}`t)?)K62H9O>sV;KI6(vmH%$@9 zVreu5-hck{#lflw9oWOwDl3>}aJ+c2TvaXdo>10I;|f6TYAZ2eVLr^41LA6eqhn(W zF8ZtSQ9TuvmD5GjQ&U4zQ#Re1hYOzYwvr}`S+ETSNSvR+H#Qd=Z7;VKDdjNn<&V#X zT3YILbnZCIv#|u9M<_S~p!VmFJWj%#2(w~nL(=Y%VSv#IWL~dS4vaP_iG_E4r@YvfTe!U%sn#=2cxPEL7y$FUE1j)( zb6%YX>l3UUI(r2ZYs|K9Y3WUpxFGIb^*X0TNCyT9i+H6AuI{ysj;^Hic_KHW(@X~5 zu4Fj1B4H%5?K`aU%g3<^tz4w{_0a!D)TG-+1RjQ z%N&1yf8V+U-@2J@!vKuee2r^;PKNV_z(4VF-#Xekq$T$W{6Dn4WmFt!v@IBe;1D3e zHMj;RXmAZK!GpV7@B|O;1b26L2oMPFUbtJ~uJ5D!-I+IY?|tjdkEvCwdv&j(4PqTiPO6l$GX zrvpeSKqHNeq4H#}qA|6?FJAM;^`i0dabAzR??}%>@ByCR;&4zuV-jKg$zhvOnz}d`w@&!a-ZiaHYbcBds2voCN7;ymj#xxi1s#s)bzfKoOm=_S&+z zBwO9=lSxDrzXN-c9cMyx-tZei2CW8}(IU&62?=OxxZnz;jPG#maQf%puF>{~o^~zR zn;QlC4Un+dETIJbz`uq?#kaXw&j=Ialfq)0Z&|b64N+D%x`3`ZU*ExluN+3Uy0_-I zGjH3k$}Qvk8Nj0xEcxbek1r@gMIjZA_CT8o`l-dlZjT;Pv`*hkj3ns`Ue^jo{_E>w zcZdKdB>WniCr>7=lNJN>}xGeHBPrR5*)PD>BIu#B?p6f30 z=^e!DG`k~D^44%?F3n?{%=>3VQnvd`&MqTsffVG&-{YJ6@6Ev)oXlXeh4C zaq)g%P10S3XuezMP~?8m+wnXZbT-$|mX-@dcn<*3@Gmmfu{Xy;)Zk!zTrNKvl~Qd! z-rDpcJ>a)6HQhNAI=yIQ!zB1TIXUTUu>inz^1p0DY24;uo>P7$0NnI;>a#yA>C0?D zOD?#fN+&ZzdIy2dGe`FKZ&d#4%Is{Vi95mrD*#=KVDZ29>2h2y{-#ZRl?9OYN4`gF zRbcnCtu5>MKmn$rY%*8> z(%+(K>#3=!pRNucUC-cnJr;I%ad#(wx_$%b@dv&A_3ATYOD{UmeMQ3{BPsFG_J)o` zSXS0~B2X9P1q5t*pirPuu87~Sf70T%SZ?i9Z2>G1o&>-mKyj;6<6Z$I@cAOYkh-_h zJU@7iGG{0*X*PK`KCIYqzD6P7wc9t4G*h?KYVm8B1)8j)ct%IN%-x{th3Pb%M%T|a zm~tBio0U1ipyNQ;QUfRz0gs)fzjoEOzP@1zskjBbMt@PD?Ssl}$ z0vnTsD?8L@&k#`HnkYf{+3wI+kQ4wYHfS;A=EhaX-mQH}l|kd~o}+9Ym*3@PKI*MG zWYEac5a;sDv*}%GOHtWaYQ%htb6Wof0`erFF}+{h=rq|DY1Q6dKLs@yFMKpoJK+R? ziblDUsJq*^ZD~XFE50u7Be(s$EB~W$=vnRjNYb!H+0<~o1Z@gW4c)##3c2$Ai3q0SYdfWXALkrA7XIj;p_HH!;BDOKT6vBGWxnN&_s&^9_@ zUR_o5=H~V~SalBOgLh$(c^E#o%leE2tyD1RHX7L}B$&Mf0#}LgEx!J%Lk&0pje+ND zR3dJ-)rfq?GBiPuXPKGm%70OsIB+H)fO4oX=6%r@66)N)4u+r@$EHL#*vNKI5}rUFE~plY)Y*+)@fTtQ(R z2zH%rW}fdRy%3yjdQjcl-Ptk9>He7r4r}i5Ejr;~P@(wlnrex5p}hQ}uD$p(iSo)* zf89r{Loe?_7LqF5MOD?N>C$xy_=C|5t=mDw{Uz1?-#&bc+TL0_f+B67zBT2YVbRl; zVRPAa7(d>!bFr7^=GKBj2h>l9+By%HwFH<_05NN5PuDAotAPYT0o_pm_}pzw^Y=8bJt-aEF__{Z*S26VUDg<465WA3U5nGJ zwtOK?WV7|Vf!1Q{zZgsVQPpNAC90s~Lsw`tPl+5RsDRx{7ZSoWK;Q?S~ zQk?|`8yjeG!4V{e$@o_#dw0L6Rd>;zV&3VGlAGF=n|smT`PbWpy!2T!{aJ>IuKZ~6 zb(wSDYjIF+yMFydK@_m#qYnCNK!a03)GS8}XD;j(a6sbACk0XT4p zm?DFUus?l)ML=L_EsKi7o{nbwaAB`@YMs-->}+p`vFYum>?-*z*fB3+?R^f!hcv7=Ty4 zcIn*)3d3?bOCxHK&DH&hgXcy7HL{aTj0lt>ZgnL-$og`E3MUeNG@BQmmYApx(Rr1I zqut=T=3;m&fHj9Kj)9L&yvt&akFurB@%Vydc=0|UD^p*j>)D$aqRyE9^f1hMO|3f- z=d+U1(uN1Kzh4E#0Y7++7+*j-fTQ%r2vkq@RY$KE0NyptkebS-Uud!BC21aBAJz_t zjND(l8!Mv+m?L9j{|G>PN_k)ZS@d3M>7(k4Xnz@-oB)bAOdpZ1KV66yNtSu(<$-$Q zTSuyw`AsG!CNuRr*6m9Le_65^CM?M;0 zZ*_OqZmtSS^W(RFQK9z-dyMbslkwi+(p{oeG_N+~Q{A_{xLb}~CT4I)f^Avgqp-i~AL2u}H4aUdPHUjz5!4L$EkHf~AUiL*3%jxfI|G(J!7LuL`aZ`qlJ%pixUA6-yF`VsI2G6$flis*l2@L11VrZWf&AZ*;0DPjDt9KkIUSS=krlF>;p@stgcz7%i4h#V9SuZp=Z_FVF9pZ>nQGfL7e|u_~20}H6 z$e6?K$@u$3wJuhN>+9l?>MBk$9xYdjoJ>CptKmE`wMP>q7EE0LQ62nl2-@>wWNM0; zjcw=ZxpFSZMl2u|8b{7zuib)jK0((Olp=+42A`U9no#(L2f>DlZlP}px6?F zIWy!43l8QcnC2cvkT6JBYpzw43VR!T3vx1YG11y3ZZ-;*rfte>UxpSCEp%2mC{zg9{~(oA)6=3&LrXeU)jELfC#+8< zzkYG*+GZ^WGRtz2vm6EyPLZd3>3Hfex64lQyWeF4%`O9p{82l_qh%*JxH7xzEUc{F z-0W9F-t4PRp=fBL8h2$7zBwD14aUrx3v&I|!(!UO8FYBX`|avW)KGLL$cj*ia6NCX z+Pxkh6!+m2GQ~OJjI{_REpA-PUOfZ4Is%>d=N16_jc%7SG6LuxO(VXO9+77OPk#?S zi|x(y(mmPkY$c(g_Tt%dA3e7 zrbXHq0TOz(*+F7+zQK}(BnfgqGdE|ZmopTxAb-Ua~W-Vzjn#Emnq z8*J%jdeF?UGeY8{jqI$$BZE(TBXl8~m5Il7IGTVzIT2_I6XYtTcwAyra;z^VKVY+p zsmv7Seg(RZgeSg+fZjczImpJ&v7elCW=P{6ZI?xnPT>&{6LUN0$YEaB)mMxrt72nS z7@T5wkxe)x*})bBJswihuXU?X%t)Yi3MmcKFJx*up&r<DkD2aJ(?`%4sE! zoa2#IRP{5~CyUJ-#T}O>GN<}LrY!%p-%{RPdc3Zrb|3JxO}5rHs5vhr*8BNNy*>1< zb?CrPK=kEZ^TF_qFw*s@tQI-0;Py*o^$Y<_T^AB)YP8~D@Pc@4_$5pToerl8oL?Qg z7;gOfIX)yGrb6@cO{YJd&PgH?qFJEl_u05y*hvd$Dv<)JG5HE^0V)EC@1Pzn3yWHi zm-j*rY;3`kR+Q#RE9$Ye*gfdg)@l*zyc9vrvISfN!nknBeC66UOBhU_%Ta<~AxU`x zPZB!PxWgdA=iY4Ag&u^HE1i1OX6>1cjnvX4*TK|if7zO^8Up+3^?l8TPCM57q{KwM z%(ZV2iYwdz6+$=Sie?L?C(Mm#-caIl6-qb9T`E|Aw-4=a8)S#A8S zy2TTYnUo-p^bW`yujf`{Uv>(rGPrrH2WDWd*(+#VcJC5!U&4p^OQx7}adAZ%&^a=W z0DFMipA(ARFTu=470auN1?<8iCoRm+ll}@@Wv(i%m4T1_byCI#pj6FjhZ^@HwcP`- zqS49 z+u7;q55O|SMmQl)p6QO=P|2bAYu-38jsO5~A%{AsE~E2CdtACI0I>OXK}VJ0Ur4ih zr_6GqYM})ef3-C*?uW#z>IVC1PkN){n@72bK>63`C@zt7k*1`!>5iEDe zLtT1#gr1R@o14UxIIn`Cu0UiIOY{wk4{!h&ht*A6+e?{?ef{Ib*Xd(YkV1a{E~fx$ z04zqGBxX~dE*>DXX>i}*dhCQJmUNKT1gXym>MG9mUQ<)UE0`Lh7h9f5dERvFx26sj zP3cTzWD)HKf$D2d*#4@kx}ewq=4HXBhF@&@i8J3Lw!nG=l7*)dESQX79}1wolob5r zlw?rnG`H~N*RgYQ%FTTr86Wo%&64+W5d;A3WEY4nPDGKzJw2JfW)~M#q@=1^wFiOdZ+xny!^xT^mtKWX|Bwlg@v~t;h#P0%Nu)t zX$HAi&~wrd*+^@f>UZaMx~m`UH*j?+fPjoH$HbCRopX35|Gw@Qq=kcO#+(%#HRL0}YPHsasR14?RPI-tORX8kRBd*; z0@v(Wa^0f-9(NuETkt3d>DUz64GrWJ?5$8nCfj37Yv02B{19w*;eG#5LWy%%dk2T) zC>9n9h97zZseoY*qU8sfY$??c`uX9lb?dfSp0be<`}wo!_x{1u&w#52u#5oc6rheY zdEC#0_k~^pRVYyNfW8y)*vg{d({>Mtv-Ogm8R@#4KM3ifn<(Co0GU~|8me2m{bEzg zvGh>BV39YJjFp%k+2B(UTV=-_y}E`08WPZv>InH=ayqx}UqgvH!8tAGpr&*d$m|%i z^qK=b(Aw=6=wEWM5ti&7j1pT{`=ZqBKAAL|$-idwHJwqY61+ohs_sK_0;VER4ye(o zKy-HZ@CbRsGQSwC+_Tiiw4V!}0v_Ve7;E$nQ@U-XNub)L8}9d$_D0 zWhhww1ia8P&B5XV#0kPe zN@5~zP(i0Z(!ng{9bFC&;d%m}BYFx$0A(qtmPeULiNb0S2gq2RFOaMmQRNly-92(; zlY}d-Vv7V@ADnjwJ_d=vqT+rqI)jr}1UtS?$3v2!zjtFn-IV2Y!n82u2Czm3kPzU- zq``ha+9^|7q-w2jc#{8yw2S~uWB)rw;U}aK4Xsa6(|t9UepN?Tj~N?i(865otS>L< zPq&6njxPX3qR)&C&L{9EPfdY9@C~%EvVmbd&Nn^4R>T0iy)3-Vy2<&-?)1cOF&k@N zoSM~2sWN+g;v{GbeTeSrYi&jb2?L+NSl1!H(pfw7H^-BDcn9!lRY2y2p zUAw`DTxr6x>PZ|tJb2g{9k1)&+rw5FB}GF~v8agF&ix77 zN4%%$99_#(DRpVmNPCkdip()Go%c(3ci_72P}~*{;2e5sqF>YlkvWHQO9HlN%U$cy!)`dU;%5i)FsM-VF{94MFm{+i~8l zNC$Z#r7V7(&4a~mhHGOD02%Zthv*7lONY9u{yGCP1E|3OXSKQc4y2Bt;lD(y zMOsG|br2*Zpp5bYo5CK8j@N5be2ZP6<25|2uVCseG9j7#{0#NMd}st2@w#0DDj|Z) z8r4aAXH8MOL@lWw|C^1jI{m*P`+mmU=QhlKB3;ghB9gJh0i7RRfpWxLH7HT{EPn-n zqTb=Zz%Uufr199_7`zKUUtWo>2O{F^^_U4`Af;skC5q#@1J}aDpPBxCeL&U#lN-$Q z>e_~ejmqDMjZx!30cyN3=R8#sTc~n<5uhXdd7*wM4Ja$?Il1M1N1hHi_v^U1JRNtT z;{|&WVt8!&$n;wrq?FAR zM|wuS&WzXu;e_Gyk_dS%bc)Hyz4A4a-i(o0bB2EW^kx8wkoD7%RiLj-Dwot~hWs0# zPbL3I{&`{osJU`z7wc^{f5pY+Hc!;^bRW~;Ffr~9cG3eJ45CTk%|@;tEO zs*^rn{bsp5aE{~|=qIDWVt);XEc8eec&;vN$H zL!JlZ%)7l5T=a7~@FqX>JbD6en#U|mETRn9;dO{H@xM`gBrhp0Zr)p8(Spyc5g$#v z35;1DUm3eljll`%RBLtBQc*$K`D`?tjW7TLQ#OBp1pNjOf+|QOgWlA8Hker@73D## za^aJeusJ^tmMyx%;=(Aif{>8n+0*#)8H?jO_5)GrMD{x1T+o@()jAzlocUmvJI2gH z!4A+I>OL3$r4k^%n~pEBx=fI)0KpQdDHD^Uf{=Vm(U1}D@&3X77ZeYm&q;;>5_0nz zb@Ap9fOENF*%;SH$3S)cI8&|`mGD~X9hxLIhZCtpZNMrd9LP2L4Bwt8fVneRzq)@N zE*I`QYR_;~%HY|mls3QLll60rQbzGLJxFSz4-a@kgK$_pUB&o1(Fia&jP4wIJCk0c zriG-iW>r^9pU@*A5_xR**fPY^c5ZHLU=8S0-`$7vEkMUPF(FK?UO1vAL9zQ)l2I2tV{4-MYu*`4`)1g``How+1Fklh1dE#L! z3s+?iq8Vb$youW>6xHL#*ZrzDUMwtCT2cncAfr`f+e(ct=n5l37UtbgCK|$$Re*>z z_ZP66puT%9vUqz`)qoghac%4-s8?A%3Jh`gz;L}|)L^mO$4p2wJ^^N902WkM>t=^3kd z8dZKNKJ>gRkzGz-dYB<|$XBkQ{VXE^X*EAwH8iLAoHFiH#s&_y({~J7mj`0xF=-;Y z6<@sW?+=%C^~oRE0Y3kIe)Jy;%4M6DE&h*8?Cc0A2-|C0Yn!`zhK8oPR=EJ1EiIh_ z5;`Eg0#8l##F!ZLvE6gYWAM~%f z5`+LC%6+n9vtAnP>De_)kN_ShEEb;v%fjoTvs!?vEj6_iVk9nNra)K6qOw1x;NCKm^Um1am4wQ z;ma2+Ub6Pjbraw=3n0-;caEeX2AP*URQ}`t#TYXCElwI@g4Ft%uqosw####VpY7K` zt+>6iMDmn#KbxKV*CRSLrjqLEdWNURh!n}wTY<;_G!^|Xl!Rx}nPNCOB=*nJ-7GP&y;}NH;5&?GX9Iy~=Xl`1eFTV1BdXscH2YC#Wo~N%0mLwtae|z1?_VG5akt}n7Q<8^m^Qdm%`>a^@hP<|m6vp!f`6_{XyS|Ni83j-8K(Xk3dXT`T_%X9WKL`Hd@|P)S{5%^6e~@lIdrtE2-~6W``0w9j`<26J^#8`<_LH@s7*OSr{8<=x zn@y~PCrR>rWTJha^61v~JEEbCp4|8D?A$nqTm(VA$!=FZ3strej*=u&oo^+B^UcsvNWJWS{5 z*Sb2A$H*NZ^L0O7(KvT>q)N~_4T(5Z0F^%3+qZ9t9$T#l7oAXKxVRd3ad9o)6*U$z zQ*yuOW9K4gO6}jseD!@jS#w^c>^6NNoPKZ+8Ts4~=K81Ys4SsqO{(YSa6MV`vx3oKf^UeCH^j`!Y;~LE4+QGD zxeYnWa@*-aCzULeD3pIho!diE39$JrFJ1`tIP17yHD}^?Rnr<{rnHYtj!#dHJ71om z5b?QgO??)DxyC#lH(>=Po8am3Qb@xsAfmh-*!~22-fZvpzURFXr3i9hEE6Y4)`TNb z8y;Y=+}UCxL}`6vp@iOVuFw1tGm|NNP#vwr-Z{#>-1qKr}J zcBL^E3@z1b;#l+eAuS%as7sFM-s@&?0Sq@45CHKX)J%nsKD;d(7j zKa8}`#yU*?^;yVg9oso;ectXH(Kv@|NuZ_bEc;TZvu|tIwvwt*GCnT2iIRkj{v*@o z&U*vSXAW$TYL^qg0dF*TmEmAXA75@Vv#OH5D~^<2%K#Oh3@He;j z2i(M(3r}3k6jq^l@i4c$BPOi0<{BKb*2b#NFNNM~Y4Iv^wX~MjmJ>5F-0T3$Ky?lE zISR-H!KG~5LxH6Ncb%2lWog)Y5(#{-qIr^PC^B;UOW4=`NFSKkwrn{4uE7AL$;y7- z9PBkH^g}^9#KQ*N=6&Szck{_f(+oLe-HK#06EoQ8?3~1$12Ypbq9!>xU0}a2HhBmY zhDd&vyjyM3VXLW*Lf5Oao~3f|3Jv+p_ppQt&ZzF#VBmnf_jQ)G$7^(ElH)^^(=2dF zK1YUQ`oMa2a?Vj#O~XJZH~%p+r-aww4>lu_*GnOxcfra^5k$7PqV5(k`PW@xa$DQ` zxL{E)j;g83$|@_@jPyT>h zPKlwnwjZHTTq22SbxuK1^>Jg^66$%kd}>X-%aLKk_ytU}x|Z_wdEOzs%=yLM>CH)v zZ^SvjM|6DBf>TuM58W?UA5=MH-(z4M%}d7zxglHBl$+nIK%!pzFy|>%h(j>;XgbxCR%v zHtKw!I5u8U07tZ?7b{!U2ev9W6g-Eo(`~j)vJjcd+6s-!l`Sax=s3s7ILFb^2?3|U zRqdcx&xc~~>ZFYHiEW4OC}r!KmLI$On=9+Po(7MlVv&~)4i51pE|9+Ni?)K&gQ3!c zzbFSko1HaGyrn7ZS5{+(tO)OPEG(dw7SNa8uy?0h)_}Z1KajU)xgGU!Tj>;a`F0)T zT0lW&@gY=n4S*4(2M$)F8#bK4MJqh@gWvQo70pj3`sQsGgAnz(xx37R)yPrC7Vd|gEB2&ciS%0MaTNu#UaD{CEnkZn zzZTmP5E9*=Z=|NARon);f1Zxn|NC^$NolsrN65E<$p3ed_- z+A)T%!A|qh6E^8w+(#@B@W7MS9P)knIUtBzye{KbPiChUZD)5Kn_E+wU#x*4+TVNw zwuypZ@c{Q*Os)vgEYPFAO^FImg0oWq4rYp6Be2yGkl_sbUzzS1n96=Jt&?n>Zj~t$ z;f`m9uuRa?ew_MBAR$*cmJ}DYy|HGjYg&?3q^fbcqMrC4kt$i&Q7{jCrBLxL=b{XnaookKRLQ7x?~<@Q)w zQXuh@j=g`h*RXqj8YwgcwCP7DW9yLbTLv8~8qLjcr}8;bQS90Zd8B~(O(*H}5qz!o zMU7GWx;w4y{`ZOv*+BlSvlTKSSCnWL3@SDqCw?$Z3LzT0D4c}s=Ta(0=(ppl%G#BC zd1W<{&egkPcKj4gYptf@Kn!6qRqNTgIxwgjiAiOeJQ(L!0^rPwjI{0fee`3cv&PXO zyNDY*WW#)^qQ;rnH=BZTvB8#{gEDwfZ)XP&JL%WW&84}eWo)y!;=F+7`P8lJ4J-&> z7w7$`2TLXH+8J3{5DsFK^_ia_A)%dWy}gyyL4=NTI;}czpq45AMd=pd2YqmC%*=#r zR#9GUpYXT?BG)KVcx|(x0}3g5=u_B|3_r#WDpzU7VzPamr|DJ>H!s_)GFh;_9&UKO z2D0n;Z#w3>54PKRQHAHRqZlcoKU$C4fio|+aknF3ZKr_Rv4+jeY`5{|CQgOj)8l1g z4!*i{q5IV2_?C!|1^aE^_4ueP5da6Uv2kGnP>_iD)TR1POD$Un(0IP1p`V_SJd*tO z350-j_3Y#rxPMu3m{klU5bLJULEvejD!rF;ltQr#mh^o@>DvMP4|>d#q*hCuwgz5U zrp(lhyzgE5C0p5k4ZurkxLymS6g3$`bn`VAc;QJ(=;;d`8jAvqA>Si7es-?#NJ(WZ z+QBoX5HtuQM6F!)O_fGin`irwV*qiGiGfAOZB~7L`TL!#^PRSxOQNewrK=VqcoLt0 z(ACM*ODipYm$Oevcp?(BZI5T0w`pI#s1N_Tonu^jaLyv-XEg3)T&nrp_T-*j$^g;@ zmiN%}4ReANEhs@sPUCm5Xb~g_A!WliX{`*@o})!HwC_Fs@_Tt+bvYM0-1KoQfdudF zKA`MMYiLX%>f)}+a3LUV94F*^x?D!u(COZ|SHHgw^O&LzeqV?8`&(y@iD^_ErtYal zrVkG3>-0S!)Jj1L16&RHf9K(qc<5FQo3MTZ-5>CJr-=&nZ8*(CjV- zXABAih0P{M7w5D9w6}_e8ou2yEa?4d*E=KCML?Ugr9@l+W$w>If? zZo?8AZ$Jk#h*?@TvwZh2*dH!D1hg5vWG|ufW?xM#wwAH+xwbnJFf4B)9M*Z>D(h1< zypn9{4=NScnTM^d$YQ|;a1Q8^xx@ZF*5{8F6`hcgEaj6`Ma%eSq0XMR&C1lYps1{j zmZm3O_mh0ViOc?hc_W8>ONOAxU7N{q%6-C{|knX^JYY`bol4Gl$3@%)KN)_EKY4T-pQ z$qtNjvL4TZja_l>*;!7wSYPqTkeyLhQtAi@CG%C{^YYv@xaC&1U=Mb#>z(fy8=X~- zdQ1LC^z>k#tD#=fc3`~`hd`Qs^}-R{H