From 9d763ffeb5165d535f8c92ec215f934120b403ae Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Sat, 8 Aug 2026 10:59:00 +0000 Subject: [PATCH] Add 10 pdf net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: conversion-export, digital-signatures, document-conversion, document-creation, images-graphics, programming-with-forms, programming-with-pdf-pages, programming-with-security-and-signatures, text-operations Source: AI Search API Tutorials: - Set PDF opacity in C# with Aspose.PDF – complete guide - Verify PDF signature in C# with Aspose.PDF – complete guide - Add bates numbering pdf with Aspose – step‑by‑step guide - Create pdf document in C# with Aspose.Pdf - pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose - Save PDF document with Aspose.PDF – complete guide - Save PDF as HTML with Aspose.PDF – step‑by‑step guide - How to validate PDF with Aspose.PDF – check pdf signature validity in C# - pdf signature tutorial: validate a PDF digital signature with Aspose.PDF - How to summarize PDF with Aspose.Pdf.AI – guide Auto-generated by Professionalize.Tutorials Agent --- pdf/arabic/net/conversion-export/_index.md | 6 +- .../_index.md | 277 +++++++++++++++++ pdf/arabic/net/digital-signatures/_index.md | 3 + .../_index.md | 264 ++++++++++++++++ pdf/arabic/net/document-conversion/_index.md | 1 + .../_index.md | 227 ++++++++++++++ pdf/arabic/net/document-creation/_index.md | 4 + .../_index.md | 233 ++++++++++++++ pdf/arabic/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 234 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 272 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 218 ++++++++++++++ .../_index.md | 266 ++++++++++++++++ pdf/arabic/net/text-operations/_index.md | 81 ++--- .../_index.md | 270 +++++++++++++++++ pdf/chinese/net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/chinese/net/digital-signatures/_index.md | 4 + .../_index.md | 262 ++++++++++++++++ pdf/chinese/net/document-conversion/_index.md | 1 + .../_index.md | 225 ++++++++++++++ pdf/chinese/net/document-creation/_index.md | 3 + .../_index.md | 232 ++++++++++++++ pdf/chinese/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 233 ++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 271 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 214 +++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/chinese/net/text-operations/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ pdf/czech/net/conversion-export/_index.md | 3 + .../_index.md | 279 +++++++++++++++++ pdf/czech/net/digital-signatures/_index.md | 3 + .../_index.md | 265 ++++++++++++++++ pdf/czech/net/document-conversion/_index.md | 3 +- .../_index.md | 226 ++++++++++++++ pdf/czech/net/document-creation/_index.md | 3 + .../_index.md | 233 ++++++++++++++ pdf/czech/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 216 +++++++++++++ .../_index.md | 262 ++++++++++++++++ pdf/czech/net/text-operations/_index.md | 3 + .../_index.md | 270 +++++++++++++++++ pdf/dutch/net/conversion-export/_index.md | 3 + .../_index.md | 276 +++++++++++++++++ pdf/dutch/net/digital-signatures/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/dutch/net/document-conversion/_index.md | 3 +- .../_index.md | 226 ++++++++++++++ pdf/dutch/net/document-creation/_index.md | 3 + .../_index.md | 235 +++++++++++++++ pdf/dutch/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 235 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 274 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 218 ++++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/dutch/net/text-operations/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/english/net/conversion-export/_index.md | 12 +- .../_index.md | 281 +++++++++++++++++ .../og-image.png | Bin 0 -> 48326 bytes pdf/english/net/digital-signatures/_index.md | 3 + .../_index.md | 265 ++++++++++++++++ .../og-image.png | Bin 0 -> 46925 bytes pdf/english/net/document-conversion/_index.md | 1 + .../_index.md | 229 ++++++++++++++ .../og-image.png | Bin 0 -> 48401 bytes pdf/english/net/document-creation/_index.md | 3 + .../_index.md | 235 +++++++++++++++ .../og-image.png | Bin 0 -> 46087 bytes pdf/english/net/images-graphics/_index.md | 5 +- .../_index.md | 252 ++++++++++++++++ .../og-image.png | Bin 0 -> 50728 bytes .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../og-image.png | Bin 0 -> 49962 bytes .../net/programming-with-pdf-pages/_index.md | 3 +- .../_index.md | 274 +++++++++++++++++ .../og-image.png | Bin 0 -> 47905 bytes .../_index.md | 2 + .../_index.md | 221 ++++++++++++++ .../og-image.png | Bin 0 -> 46481 bytes .../_index.md | 268 +++++++++++++++++ .../og-image.png | Bin 0 -> 51833 bytes pdf/english/net/text-operations/_index.md | 4 +- .../_index.md | 273 +++++++++++++++++ .../og-image.png | Bin 0 -> 46243 bytes pdf/french/net/conversion-export/_index.md | 4 +- .../_index.md | 278 +++++++++++++++++ pdf/french/net/digital-signatures/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ pdf/french/net/document-conversion/_index.md | 1 + .../_index.md | 227 ++++++++++++++ pdf/french/net/document-creation/_index.md | 3 + .../_index.md | 235 +++++++++++++++ pdf/french/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 274 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 218 ++++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/french/net/text-operations/_index.md | 10 +- .../_index.md | 271 +++++++++++++++++ pdf/german/net/conversion-export/_index.md | 2 + .../_index.md | 278 +++++++++++++++++ pdf/german/net/digital-signatures/_index.md | 6 +- .../_index.md | 264 ++++++++++++++++ pdf/german/net/document-conversion/_index.md | 1 + .../_index.md | 229 ++++++++++++++ pdf/german/net/document-creation/_index.md | 4 + .../_index.md | 237 +++++++++++++++ pdf/german/net/images-graphics/_index.md | 3 + .../_index.md | 253 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 33 +- .../_index.md | 275 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 221 ++++++++++++++ .../_index.md | 266 ++++++++++++++++ pdf/german/net/text-operations/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/greek/net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/greek/net/digital-signatures/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ pdf/greek/net/document-conversion/_index.md | 3 +- .../_index.md | 230 ++++++++++++++ pdf/greek/net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/greek/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 274 +++++++++++++++++ .../_index.md | 6 +- .../_index.md | 220 ++++++++++++++ .../_index.md | 267 +++++++++++++++++ pdf/greek/net/text-operations/_index.md | 13 +- .../_index.md | 271 +++++++++++++++++ pdf/hindi/net/conversion-export/_index.md | 3 + .../_index.md | 279 +++++++++++++++++ pdf/hindi/net/digital-signatures/_index.md | 3 +- .../_index.md | 265 ++++++++++++++++ pdf/hindi/net/document-conversion/_index.md | 3 +- .../_index.md | 229 ++++++++++++++ pdf/hindi/net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/hindi/net/images-graphics/_index.md | 60 ++-- .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 235 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 222 ++++++++++++++ .../_index.md | 267 +++++++++++++++++ pdf/hindi/net/text-operations/_index.md | 14 +- .../_index.md | 271 +++++++++++++++++ pdf/hongkong/net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/hongkong/net/digital-signatures/_index.md | 3 + .../_index.md | 262 ++++++++++++++++ .../net/document-conversion/_index.md | 1 + .../_index.md | 225 ++++++++++++++ pdf/hongkong/net/document-creation/_index.md | 4 + .../_index.md | 231 ++++++++++++++ pdf/hongkong/net/images-graphics/_index.md | 5 +- .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 234 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 270 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 216 +++++++++++++ .../_index.md | 259 ++++++++++++++++ pdf/hongkong/net/text-operations/_index.md | 3 +- .../_index.md | 268 +++++++++++++++++ pdf/hungarian/net/conversion-export/_index.md | 3 + .../_index.md | 279 +++++++++++++++++ .../net/digital-signatures/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ .../net/document-conversion/_index.md | 1 + .../_index.md | 229 ++++++++++++++ pdf/hungarian/net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/hungarian/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 274 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 220 ++++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/hungarian/net/text-operations/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ .../net/conversion-export/_index.md | 5 +- .../_index.md | 278 +++++++++++++++++ .../net/digital-signatures/_index.md | 3 + .../_index.md | 269 +++++++++++++++++ .../net/document-conversion/_index.md | 1 + .../_index.md | 228 ++++++++++++++ .../net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/indonesian/net/images-graphics/_index.md | 5 +- .../_index.md | 250 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 274 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 218 ++++++++++++++ .../_index.md | 269 +++++++++++++++++ pdf/indonesian/net/text-operations/_index.md | 4 +- .../_index.md | 271 +++++++++++++++++ pdf/italian/net/conversion-export/_index.md | 4 +- .../_index.md | 277 +++++++++++++++++ pdf/italian/net/digital-signatures/_index.md | 3 + .../_index.md | 268 +++++++++++++++++ pdf/italian/net/document-conversion/_index.md | 1 + .../_index.md | 227 ++++++++++++++ pdf/italian/net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/italian/net/images-graphics/_index.md | 3 + .../_index.md | 249 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 235 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 218 ++++++++++++++ .../_index.md | 266 ++++++++++++++++ pdf/italian/net/text-operations/_index.md | 3 + .../_index.md | 272 +++++++++++++++++ pdf/japanese/net/conversion-export/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ pdf/japanese/net/digital-signatures/_index.md | 3 + .../_index.md | 262 ++++++++++++++++ .../net/document-conversion/_index.md | 3 +- .../_index.md | 226 ++++++++++++++ pdf/japanese/net/document-creation/_index.md | 4 + .../_index.md | 231 ++++++++++++++ pdf/japanese/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 233 ++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 271 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 216 +++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/japanese/net/text-operations/_index.md | 2 + .../_index.md | 268 +++++++++++++++++ pdf/korean/net/conversion-export/_index.md | 8 +- .../_index.md | 279 +++++++++++++++++ pdf/korean/net/digital-signatures/_index.md | 3 + .../_index.md | 265 ++++++++++++++++ pdf/korean/net/document-conversion/_index.md | 1 + .../_index.md | 225 ++++++++++++++ pdf/korean/net/document-creation/_index.md | 3 + .../_index.md | 233 ++++++++++++++ pdf/korean/net/images-graphics/_index.md | 3 + .../_index.md | 248 +++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 234 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 3 +- .../_index.md | 272 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 218 ++++++++++++++ .../_index.md | 283 ++++++++++++++++++ pdf/korean/net/text-operations/_index.md | 2 + .../_index.md | 269 +++++++++++++++++ pdf/polish/net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/polish/net/digital-signatures/_index.md | 4 + .../_index.md | 264 ++++++++++++++++ pdf/polish/net/document-conversion/_index.md | 1 + .../_index.md | 228 ++++++++++++++ pdf/polish/net/document-creation/_index.md | 4 + .../_index.md | 236 +++++++++++++++ pdf/polish/net/images-graphics/_index.md | 7 +- .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 220 ++++++++++++++ .../_index.md | 262 ++++++++++++++++ pdf/polish/net/text-operations/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ .../net/conversion-export/_index.md | 5 +- .../_index.md | 275 +++++++++++++++++ .../net/digital-signatures/_index.md | 3 + .../_index.md | 266 ++++++++++++++++ .../net/document-conversion/_index.md | 1 + .../_index.md | 228 ++++++++++++++ .../net/document-creation/_index.md | 4 + .../_index.md | 235 +++++++++++++++ pdf/portuguese/net/images-graphics/_index.md | 7 +- .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 57 ++-- .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 220 ++++++++++++++ .../_index.md | 263 ++++++++++++++++ pdf/portuguese/net/text-operations/_index.md | 8 +- .../_index.md | 270 +++++++++++++++++ pdf/russian/net/conversion-export/_index.md | 5 +- .../_index.md | 276 +++++++++++++++++ pdf/russian/net/digital-signatures/_index.md | 3 + .../_index.md | 267 +++++++++++++++++ pdf/russian/net/document-conversion/_index.md | 65 ++-- .../_index.md | 229 ++++++++++++++ pdf/russian/net/document-creation/_index.md | 3 + .../_index.md | 234 +++++++++++++++ pdf/russian/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 235 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 8 +- .../_index.md | 217 ++++++++++++++ .../_index.md | 268 +++++++++++++++++ pdf/russian/net/text-operations/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ pdf/spanish/net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ pdf/spanish/net/digital-signatures/_index.md | 3 + .../_index.md | 266 ++++++++++++++++ pdf/spanish/net/document-conversion/_index.md | 1 + .../_index.md | 229 ++++++++++++++ pdf/spanish/net/document-creation/_index.md | 3 + .../_index.md | 235 +++++++++++++++ pdf/spanish/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 15 +- .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 217 ++++++++++++++ .../_index.md | 268 +++++++++++++++++ pdf/spanish/net/text-operations/_index.md | 2 + .../_index.md | 270 +++++++++++++++++ pdf/swedish/net/conversion-export/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ pdf/swedish/net/digital-signatures/_index.md | 2 + .../_index.md | 267 +++++++++++++++++ pdf/swedish/net/document-conversion/_index.md | 2 +- .../_index.md | 228 ++++++++++++++ pdf/swedish/net/document-creation/_index.md | 4 + .../_index.md | 233 ++++++++++++++ pdf/swedish/net/images-graphics/_index.md | 3 + .../_index.md | 250 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 234 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 219 ++++++++++++++ .../_index.md | 266 ++++++++++++++++ pdf/swedish/net/text-operations/_index.md | 7 +- .../_index.md | 271 +++++++++++++++++ pdf/thai/net/conversion-export/_index.md | 9 +- .../_index.md | 277 +++++++++++++++++ pdf/thai/net/digital-signatures/_index.md | 4 + .../_index.md | 266 ++++++++++++++++ pdf/thai/net/document-conversion/_index.md | 1 + .../_index.md | 227 ++++++++++++++ pdf/thai/net/document-creation/_index.md | 4 + .../_index.md | 233 ++++++++++++++ pdf/thai/net/images-graphics/_index.md | 3 + .../_index.md | 249 +++++++++++++++ pdf/thai/net/programming-with-forms/_index.md | 3 +- .../_index.md | 234 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 3 +- .../_index.md | 272 +++++++++++++++++ .../_index.md | 4 +- .../_index.md | 218 ++++++++++++++ .../_index.md | 265 ++++++++++++++++ pdf/thai/net/text-operations/_index.md | 5 +- .../_index.md | 269 +++++++++++++++++ pdf/turkish/net/conversion-export/_index.md | 3 + .../_index.md | 279 +++++++++++++++++ pdf/turkish/net/digital-signatures/_index.md | 4 + .../_index.md | 266 ++++++++++++++++ pdf/turkish/net/document-conversion/_index.md | 63 ++-- .../_index.md | 231 ++++++++++++++ pdf/turkish/net/document-creation/_index.md | 3 + .../_index.md | 235 +++++++++++++++ pdf/turkish/net/images-graphics/_index.md | 3 + .../_index.md | 251 ++++++++++++++++ .../net/programming-with-forms/_index.md | 1 + .../_index.md | 236 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 275 +++++++++++++++++ .../_index.md | 2 + .../_index.md | 217 ++++++++++++++ .../_index.md | 265 ++++++++++++++++ pdf/turkish/net/text-operations/_index.md | 2 + .../_index.md | 271 +++++++++++++++++ .../net/conversion-export/_index.md | 3 + .../_index.md | 277 +++++++++++++++++ .../net/digital-signatures/_index.md | 4 + .../_index.md | 266 ++++++++++++++++ .../net/document-conversion/_index.md | 1 + .../_index.md | 229 ++++++++++++++ .../net/document-creation/_index.md | 3 + .../_index.md | 233 ++++++++++++++ pdf/vietnamese/net/images-graphics/_index.md | 3 + .../_index.md | 252 ++++++++++++++++ .../net/programming-with-forms/_index.md | 3 +- .../_index.md | 235 +++++++++++++++ .../net/programming-with-pdf-pages/_index.md | 1 + .../_index.md | 273 +++++++++++++++++ .../_index.md | 6 +- .../_index.md | 217 ++++++++++++++ .../_index.md | 266 ++++++++++++++++ pdf/vietnamese/net/text-operations/_index.md | 3 + .../_index.md | 271 +++++++++++++++++ 447 files changed, 58615 insertions(+), 266 deletions(-) create mode 100644 pdf/arabic/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/arabic/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/arabic/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/arabic/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/arabic/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/arabic/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/arabic/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/arabic/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/arabic/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/arabic/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/chinese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/chinese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/chinese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/chinese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/chinese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/chinese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/chinese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/chinese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/chinese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/chinese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/czech/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/czech/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/czech/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/czech/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/czech/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/czech/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/czech/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/czech/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/czech/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/czech/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/dutch/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/dutch/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/dutch/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/dutch/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/dutch/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/dutch/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/dutch/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/dutch/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/dutch/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/dutch/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/english/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/english/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/og-image.png create mode 100644 pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/og-image.png create mode 100644 pdf/english/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/english/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/og-image.png create mode 100644 pdf/english/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/english/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/og-image.png create mode 100644 pdf/english/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/english/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/og-image.png create mode 100644 pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/og-image.png create mode 100644 pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/og-image.png create mode 100644 pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/og-image.png create mode 100644 pdf/english/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/english/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/og-image.png create mode 100644 pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/og-image.png create mode 100644 pdf/french/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/french/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/french/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/french/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/french/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/french/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/french/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/french/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/french/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/french/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/german/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/german/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/german/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/german/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/german/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/german/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/german/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/german/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/german/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/german/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/greek/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/greek/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/greek/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/greek/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/greek/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/greek/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/greek/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/greek/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/greek/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/greek/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/hindi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/hindi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/hindi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/hindi/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hindi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hindi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hindi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/hindi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/hindi/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hindi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/hongkong/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/hongkong/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/hongkong/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/hongkong/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hongkong/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hongkong/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hongkong/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/hongkong/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/hongkong/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hongkong/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/hungarian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/hungarian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/hungarian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/hungarian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/hungarian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hungarian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hungarian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/hungarian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/hungarian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/hungarian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/indonesian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/indonesian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/indonesian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/indonesian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/indonesian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/indonesian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/indonesian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/indonesian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/indonesian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/indonesian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/italian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/italian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/italian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/italian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/italian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/italian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/italian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/italian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/italian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/italian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/japanese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/japanese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/japanese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/japanese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/japanese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/japanese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/japanese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/japanese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/japanese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/japanese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/korean/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/korean/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/korean/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/korean/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/korean/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/korean/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/korean/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/korean/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/korean/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/korean/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/polish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/polish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/polish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/polish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/polish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/polish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/polish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/polish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/polish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/polish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/portuguese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/portuguese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/portuguese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/portuguese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/portuguese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/portuguese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/portuguese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/portuguese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/portuguese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/portuguese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/russian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/russian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/russian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/russian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/russian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/russian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/russian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/russian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/russian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/russian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/spanish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/spanish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/spanish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/spanish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/spanish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/spanish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/spanish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/spanish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/spanish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/spanish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/swedish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/swedish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/swedish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/swedish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/swedish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/swedish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/swedish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/swedish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/swedish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/swedish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/thai/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/thai/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/thai/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/thai/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/thai/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/thai/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/thai/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/thai/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/thai/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/thai/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/turkish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/turkish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/turkish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/turkish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/turkish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/turkish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/turkish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/turkish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/turkish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/turkish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md create mode 100644 pdf/vietnamese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md create mode 100644 pdf/vietnamese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md create mode 100644 pdf/vietnamese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md create mode 100644 pdf/vietnamese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md create mode 100644 pdf/vietnamese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/vietnamese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/vietnamese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md create mode 100644 pdf/vietnamese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md create mode 100644 pdf/vietnamese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md create mode 100644 pdf/vietnamese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md diff --git a/pdf/arabic/net/conversion-export/_index.md b/pdf/arabic/net/conversion-export/_index.md index 3a917f9923..3b9c76b885 100644 --- a/pdf/arabic/net/conversion-export/_index.md +++ b/pdf/arabic/net/conversion-export/_index.md @@ -123,7 +123,7 @@ تعلّم كيفية تحويل ملفات XML بكفاءة إلى ملفات PDF احترافية باستخدام Aspose.PDF وC#. اتبع هذا الدليل المفصل، المُصمّم لمطوّري .NET. ### [تحويل XML إلى PDF باستخدام Aspose.PDF لـ .NET: دليل خطوة بخطوة](./convert-xml-pdf-aspose-dotnet/) -تعرّف على كيفية تحويل بيانات XML إلى ملفات PDF مُصمّمة باستخدام Aspose.PDF وXSLT في .NET. يغطي هذا الدليل خطوات الإعداد والتحويل والتطبيقات العملية. +تعرّف على كيفية تحويل بيانات XML إلى ملفات PDF مُصمّرة باستخدام Aspose.PDF وXSLT في .NET. يغطي هذا الدليل خطوات الإعداد والتحويل والتطبيقات العملية. ### [تحويل XML إلى PDF مع الصور الديناميكية باستخدام Aspose.PDF لـ .NET](./convert-xml-to-pdf-dynamic-images-aspose-net/) تعرف على كيفية تحويل بيانات XML إلى مستند PDF ذو مظهر احترافي باستخدام Aspose.PDF لـ .NET، بما في ذلك إدراج الصور الديناميكية. @@ -221,7 +221,9 @@ ### [تحويل PDF إلى HTML باستخدام Aspose.PDF .NET: دليل شامل](./aspose-pdf-net-pdf-to-html-conversion/) أتقن تحويل PDF إلى HTML باستخدام Aspose.PDF لـ .NET. حسّن إمكانية الوصول إلى المستندات وتفاعلها مع المستخدمين من خلال خيارات قابلة للتخصيص. -### [تحويل PDF إلى HTML باستخدام Aspose.PDF لـ .NET](./pdf-to-html-conversion-aspose-dot-net/) +### [حفظ PDF كـ HTML باستخدام Aspose.PDF – دليل خطوة بخطوة](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + +### [تحويل PDF إلى HTML باستخدام Aspose.PDF .NET](./pdf-to-html-conversion-aspose-dot-net/) برنامج تعليمي لبرمجة Aspose.PDF Net ### [تحويل PDF إلى TIFF في .NET باستخدام Aspose.PDF: دليل خطوة بخطوة](./pdf-to-tiff-conversion-aspose-pdf-net/) diff --git a/pdf/arabic/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/arabic/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..caf867bcbc --- /dev/null +++ b/pdf/arabic/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: احفظ ملف PDF كـ HTML باستخدام Aspose.PDF في C#. تعلم كيفية تحويل PDF + إلى HTML، وتجاوز الصور النقطية، ومعالجة الحالات الخاصة الشائعة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: ar +lastmod: 2026-08-08 +og_description: احفظ ملف PDF كـ HTML باستخدام Aspose.PDF. يوضح لك هذا الدليل كيفية + تحويل PDF إلى HTML، وتجاوز الصور النقطية، وتجنب الأخطاء الشائعة. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: حفظ PDF كـ HTML باستخدام Aspose.PDF – دليل C# كامل +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: حفظ ملف PDF كـ HTML باستخدام Aspose.PDF – دليل خطوة بخطوة +url: /ar/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# حفظ PDF كـ HTML باستخدام Aspose.PDF – دليل خطوة بخطوة + +إذا كنت بحاجة إلى **حفظ PDF كـ HTML** بسرعة، يوضح لك هذا الدليل بالضبط كيفية القيام بذلك باستخدام Aspose.PDF لـ .NET. سواءً كنت تبني تطبيق ويب لعرض المستندات أو تصدر تقارير لتكون صديقة لتحسين محركات البحث (SEO)، سترى حلاً كاملاً قابلاً للتنفيذ يحول PDF إلى HTML مع منحك تحكمًا دقيقًا في الصور النقطية. + +بالإضافة إلى المهمة الأساسية، سنغطي أيضًا خيارات **aspose pdf html conversion** التي تسمح لك بتخطي الصور النقطية، وضبط معالجة CSS، وإدارة المستندات الكبيرة بكفاءة. بنهاية هذا الدليل ستحصل على برنامج مستقل يمكنك إدراجه في أي مشروع .NET. + +## المتطلبات المسبقة + +* .NET 6.0 SDK أو أحدث (الكود يعمل مع .NET Core و .NET Framework أيضًا) +* Visual Studio 2022 أو أي بيئة تطوير تدعم C# +* رخصة Aspose.PDF لـ .NET (الإصدار التجريبي المجاني يعمل للتقييم) +* ملف PDF باسم `report.pdf` موجود في مجلد يمكنك الإشارة إليه من الكود + +لا توجد حزم NuGet إضافية مطلوبة بخلاف `Aspose.Pdf`. + +## الخطوة 1: تثبيت حزمة NuGet الخاصة بـ Aspose.PDF + +افتح الطرفية في مجلد المشروع الخاص بك وشغّل: + +```bash +dotnet add package Aspose.Pdf +``` + +تضيف الحزمة مساحة الاسم `Aspose.Pdf`، التي تحتوي على الفئة `Document` والنوع `HtmlSaveOptions` المستخدم في عمليات **convert pdf to html**. + +## الخطوة 2: إنشاء مشروع وحدة تحكم وإضافة توجيهات using + +أنشئ تطبيق وحدة تحكم جديد إذا لم يكن لديك واحد بالفعل: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +ثم افتح `Program.cs` وأضف مساحات الأسماء المطلوبة: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +تمنحك هذه التوجيهات الوصول إلى API الأساسي لـ PDF وخيارات حفظ HTML التي تتحكم في عملية **aspose convert pdf html**. + +## الخطوة 3: تحميل مستند PDF + +السطر التشغيلي الأول يقرأ ملف PDF المصدر إلى كائن `Aspose.Pdf.Document`. هذا الكائن يمثل ملف PDF بالكامل في الذاكرة ويوفر طرقًا للحفظ، والتحرير، واستخراج المحتوى. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*لماذا هذا مهم*: تحميل المستند مرة واحدة يحافظ على استهلاك الذاكرة بشكل متوقع، خاصةً مع ملفات PDF الكبيرة. إذا لم يتم العثور على الملف، تُطلق Aspose استثناء `FileNotFoundException`، لذا تأكد من صحة المسار. + +## الخطوة 4: تكوين خيارات حفظ HTML + +`HtmlSaveOptions` يتيح لك ضبط كيفية تحويل PDF بدقة. في هذا الدليل نتخطى الصور النقطية لجعل الناتج خفيفًا، لكن يمكنك تغيير الوضع إلى `EmbedAll` إذا كنت بحاجة إليها. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**نقاط رئيسية**: + +* `RasterImagesSavingMode.Skip` يخبر Aspose بتجاهل الصور النقطية (JPEG, PNG) أثناء التحويل. هذا مثالي عندما يحتوي PDF المصدر على صفحات ممسوحة لا تحتاجها في عرض HTML. +* يمكنك التحويل إلى `EmbedAll` أو `External` إذا أردت حفظ الصور كملفات منفصلة. +* خاصية `ResourcesFolder` تصبح ذات صلة فقط عندما تُحفظ الصور خارجيًا. + +## الخطوة 5: حفظ المستند كـ HTML + +الآن تقوم بكتابة ملف HTML إلى القرص باستخدام الخيارات المكوَّنة. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +بعد انتهاء هذا الاستدعاء، يحتوي `report.html` على المحتوى النصي، والرسومات المتجهية، والتخطيط المحفوظ من PDF الأصلي، ولكن دون أي صور نقطية. يمكنك فتح الملف في المتصفح للتحقق من النتيجة. + +## النتيجة المتوقعة + +عند فتح `report.html` في Chrome أو Edge، يجب أن ترى: + +* جميع العناوين والفقرات والأشكال المتجهية تُعرض بشكل صحيح. +* لا توجد وسوم `` للصور النقطية (تم حذفها بسبب وضع `Skip`). +* CSS نظيف ومحدود إما مضمّن داخل النص أو في ملف نمط منفصل، حسب الخيار الذي اخترته. + +إذا كنت بحاجة لتأكيد حذف الصور، افتح مصدر الصفحة (`Ctrl+U`). لن تجد أي وسوم ``. + +## الخطوة 6: معالجة الحالات الخاصة الشائعة + +### 6.1 ملفات PDF الكبيرة (> 100 MB) + +للملفات الكبيرة جدًا، فعّل البث لتقليل الضغط على الذاكرة: + +```csharp +htmlOpts.Streaming = true; +``` + +البث يكتب أجزاء HTML مباشرة إلى القرص، مما يمنع احتفاظ الذاكرة بالمستند بالكامل. + +### 6.2 ملفات PDF محمية بكلمة مرور + +إذا كان PDF المصدر مشفرًا، قدم كلمة المرور قبل الحفظ: + +```csharp +doc.Decrypt("yourPassword"); +``` + +محاولة الحفظ دون فك التشفير تُطلق استثناء `InvalidPasswordException`. + +### 6.3 أحرف Unicode + +Aspose.PDF يدمج خطوط Unicode تلقائيًا، لكن يمكنك فرض خط معين لضمان عرض ثابت: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 تسمية ملفات مخصصة لصفحات متعددة + +إذا أردت كل صفحة PDF كملف HTML منفصل، اضبط: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +هذا ينشئ `report_page_1.html`، `report_page_2.html`، إلخ، وهو مفيد للتقسيم إلى صفحات في تطبيقات الويب. + +## مثال كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل الذي يدمج جميع الخطوات التي نوقشت. انسخه إلى `Program.cs`، عدّل المسارات، وشغّل `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**التحقق**: بعد التشغيل، يطبع الطرفية رسالة النجاح. افتح ملف HTML المُنشأ في المتصفح لتأكيد أن النص والرسومات المتجهية تظهر بشكل صحيح وأن الصور النقطية تم حذفها. + +## نصائح احترافية ومخاطر + +* **نصيحة احترافية**: إذا احتجت لاحقًا إلى الصور النقطية، غيّر `RasterImagesSavingMode` إلى `External` واضبط `ResourcesFolder`. سيُنشئ ذلك مجلدًا فرعيًا `images` يحتوي على البت ماب المستخرجة. +* **احذر من**: استخدام وضع `Skip` الافتراضي على ملفات PDF التي تعتمد بشكل كبير على الصور الممسوحة سيؤدي إلى مساحات فارغة حيث توجد تلك الصور. اختبر دائمًا على عينة ممثلة من مستنداتك. +* **نصيحة أداء**: إعادة استخدام نسخة واحدة من `HtmlSaveOptions` لعدة مستندات يقلل من عبء إنشاء الكائنات في التحويلات الدفعية. +* **تحقق من الإصدار**: الـ API المعروضة تعمل مع Aspose.PDF لـ .NET الإصدار 23.9 وما بعده. الإصدارات الأقدم قد تستخدم `HtmlSaveOptions.RasterImagesSavingMode` باسم تعداد مختلف قليلاً. + +## الخلاصة + +أنت الآن تعرف كيفية **حفظ PDF كـ HTML** باستخدام Aspose.PDF، وكيفية التحكم في معالجة الصور النقطية، وكيفية معالجة التحديات الشائعة مثل الملفات الكبيرة، الحماية بكلمة مرور، وإنتاج HTML لكل صفحة. هذا الحل الكامل يتيح لك دمج تحويل PDF إلى HTML في أي تطبيق C# بثقة. + +### ما التالي؟ + +* استكشف **aspose pdf html conversion** لتضمين الخطوط وتخصيص CSS. +* اجمع هذا التحويل مع واجهة برمجة تطبيقات ويب لتقديم HTML عند الطلب. +* جرّب الاتجاه المعاكس—**convert pdf to html** ثم عودة إلى PDF—للتحقق من دقة التحويل ذهابًا وإيابًا. + +لا تتردد في تجربة الخيارات، وشارك نتائجك في التعليقات أو على منتديات Aspose. برمجة سعيدة! + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة شاملة من الكود مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [تحويل PDF إلى HTML في .NET باستخدام Aspose.PDF دون حفظ الصور](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [تحويل PDF إلى HTML باستخدام Aspose.PDF .NET: حفظ الصور كملفات PNG خارجية](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [تحويل PDF إلى HTML مع عناوين URL مخصصة للصور باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/arabic/net/digital-signatures/_index.md index 49e8b487d7..b18709a875 100644 --- a/pdf/arabic/net/digital-signatures/_index.md +++ b/pdf/arabic/net/digital-signatures/_index.md @@ -59,6 +59,9 @@ ### [التحقق من توقيع PDF باستخدام Aspose – تحويل PDF إلى HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) تعرّف على كيفية التحقق من توقيع PDF وتحويله إلى HTML باستخدام Aspose. +### [كيفية التحقق من صحة ملف PDF باستخدام Aspose.PDF – فحص صلاحية توقيع PDF في C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +دليل شامل للتحقق من صحة توقيع PDF باستخدام C# و Aspose.PDF. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/arabic/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..3323947373 --- /dev/null +++ b/pdf/arabic/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-08-08 +description: كيفية التحقق من صحة PDF باستخدام Aspose.PDF والتحقق من التوقيع الرقمي + للـ PDF. اتبع هذا الدليل خطوة بخطوة للتحقق بسرعة من توقيع PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: ar +lastmod: 2026-08-08 +og_description: كيفية التحقق من صحة PDF باستخدام Aspose.PDF. تعلم كيفية التحقق من + صحة التوقيع الرقمي للملف PDF والتحقق من صلاحية توقيع PDF في بضع أسطر من كود C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: كيفية التحقق من صحة PDF – فحص صلاحية توقيع PDF باستخدام Aspose.PDF في C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: كيفية التحقق من صحة ملف PDF باستخدام Aspose.PDF – فحص صلاحية توقيع PDF في C# +url: /ar/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية التحقق من صحة PDF باستخدام Aspose.PDF – فحص صلاحية توقيع PDF في C# + +إذا كنت تحتاج إلى **كيفية التحقق من صحة PDF** الذي يحتوي على توقيعات رقمية، فإن هذا الدرس يوضح لك حلاً كاملاً. ستتعلم كيفية تحميل ملف PDF، إنشاء مُحقق الشهادة، وفحص صلاحية توقيع PDF باستخدام Aspose.PDF for .NET. + +يُعد التحقق من صحة التوقيع الرقمي للـ PDF مطلبًا شائعًا للامتثال، الفوترة، وتبادل المستندات الآمن. بنهاية هذا الدليل، ستكون قادرًا على التحقق بثقة مما إذا كان ملف PDF الموقع موثوقًا، وستفهم كيفية التعامل مع الحالات الخاصة مثل الشهادات المفقودة أو التوقيعات المتعددة. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من وجود ما يلي: + +- .NET 6.0 أو أحدث مثبت +- بيئة تطوير متكاملة مثل Visual Studio 2022 (أي محرر يدعم C# يعمل) +- نسخة مرخصة من **Aspose.PDF for .NET** (الإصدار التجريبي المجاني يكفي للتقييم) +- ملف PDF موقع (`signed.pdf`)، وإذا كان التوقيع يعتمد على CA خاص، الشهادة الموثوقة المقابلة (`trustedCertificate.pfx`) + +لا توجد حزم NuGet إضافية مطلوبة بخلاف `Aspose.PDF`. + +## الخطوة 1: تثبيت Aspose.PDF + +افتح الطرفية في مجلد المشروع وشغّل الأمر التالي: + +```bash +dotnet add package Aspose.PDF +``` + +يضيف هذا الأمر أحدث مكتبة Aspose.PDF، التي تحتوي على الفئات `Document` و `CertificateValidator` المستخدمة لاحقًا. + +## الخطوة 2: تحميل مستند PDF + +يُعد تحميل PDF هو العملية الأولى التي تقوم بها عندما تريد **كيفية تحميل pdf** برمجيًا. يقبل مُنشئ `Document` مسار ملف، أو تدفق، أو مصفوفة بايت. استخدام مسار كامل يبقي المثال واضحًا. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**لماذا هذا مهم:** كائن `Document` يمثل ملف PDF بالكامل في الذاكرة. بدون تحميل الملف، لا يمكنك الوصول إلى مجموعة `Signatures` الخاصة به، والتي تُعد ضرورية لـ **فحص توقيع pdf**. + +## الخطوة 3: إعداد مُحقق الشهادة + +يُعتبر التوقيع الرقمي موثوقًا فقط إذا كانت شهادة التوقيع تتسلسل إلى جذر تثق به. يتيح لك `CertificateValidator` توجيه Aspose.PDF إلى مخزن شهادات موثوق أو ملف PFX محدد. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +إذا كان ملف PDF الخاص بك يستخدم CA عام يثق به Windows بالفعل، يمكنك حذف `certPath` وإنشاء `CertificateValidator` باستخدام المُنشئ الافتراضي. توفير ملف PFX مخصص يكون مفيدًا لبيئات PKI الداخلية. + +## الخطوة 4: التحقق من أول توقيع رقمي + +قد يحتوي PDF على توقيعات متعددة. للتبسيط، يتحقق هذا الدرس من التوقيع الأول (`Signatures[0]`). تُعيد طريقة `Validate` القيمة `true` عندما يكون التوقيع سليمًا من الناحية التشفيرية **و** تكون شهادة التوقيع موثوقة. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**ما يحدث في الخلفية:** +- تتحقق الطريقة من تجزئة المحتوى الموقع مقابل قيمة التوقيع. +- تُنشئ سلسلة الشهادات باستخدام المُحقق المقدم. +- يتم تقييم حالة الإلغاء (CRL/OCSP) إذا كان المُحقق مُعدًا لذلك. + +### التعامل مع التوقيعات المتعددة + +إذا كان PDF يحتوي على أكثر من توقيع، يمكنك التكرار عبر مجموعة `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +يسمح لك هذا النمط بـ **فحص توقيع pdf** على كل صفحة وتقرير النتائج الفردية. + +## الخطوة 5: إخراج نتيجة التحقق + +أخيرًا، اكتب النتيجة إلى وحدة التحكم. في الكود الإنتاجي قد تقوم بتسجيل النتيجة أو رفع استثناء عند وجود توقيع غير صالح. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### النتيجة المتوقعة في وحدة التحكم + +``` +Valid +``` + +أو + +``` +Invalid +``` + +تعكس الرسالة القيمة البوليانية التي تُعيدها `Validate`. قد يشير نتيجة “Invalid” إلى وثيقة تم تعديلها، أو شهادة غير موثوقة، أو شهادة توقيع منتهية الصلاحية. + +## الخطوة 6: المشكلات الشائعة ونصائح أفضل الممارسات + +### 1. شهادة موثوقة مفقودة +إذا تلقيت `Invalid` وتعلم أن التوقيع يجب أن يكون موثوقًا، تحقق من أن شهادة الجذر الصحيحة مُقدمة إلى `CertificateValidator`. استخدم النسخة التي تقبل `X509Certificate2Collection` للجذور المتعددة. + +### 2. توقيع يحتوي على مراجع خارجية +بعض التوقيعات تغطي محتوى خارجي (مثل ملف مرفق). تأكد من أن الموارد الخارجية متاحة؛ وإلا سيفشل التحقق من التجزئة. + +### 3. التحقق من الطابع الزمني +قد يتضمن التوقيع رمز طابع زمني. للتحقق منه، اضبط المُحقق لفحص شهادات سلطة الطابع الزمني (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. الأداء مع ملفات PDF الكبيرة +تحميل PDF مكوّن من مئات الصفحات قد يستهلك الذاكرة. إذا كنت تحتاج فقط إلى بيانات التوقيع، استخدم `PdfFileEditor` لاستخراج قاموس التوقيع دون عرض الصفحات. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. أمان الخيوط (Thread safety) +كائنات `Document` غير آمنة للاستخدام المتعدد الخيوط. أنشئ كائن `Document` جديد لكل خيط عند التحقق من عدة ملفات PDF بالتوازي. + +## مثال كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل الذي يمكنك نسخه، لصقه، وتشغيله بعد تعديل مسارات الملفات. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**تشغيل البرنامج** يطبع سطرًا لكل توقيع، موضحًا بوضوح ما إذا كان PDF ينجح في فحص **validate pdf digital signature**. + +## الخلاصة + +أنت الآن تعرف **كيفية التحقق من صحة PDF** الذي يحتوي على توقيعات رقمية باستخدام Aspose.PDF for .NET. غطى الدرس تحميل PDF، تكوين مُحقق الشهادة، فحص صلاحية توقيع PDF، التعامل مع التوقيعات المتعددة، وحل المشكلات الشائعة. + +بعد ذلك، استكشف المواضيع ذات الصلة مثل **كيفية توقيع PDF**، **كيفية إضافة رموز طابع زمني**، و **كيفية استخراج المحتوى الموقع**. تتيح لك هذه الإضافات بناء سير عمل مستندات آمن من البداية إلى النهاية في C#. + +--- + + +## ماذا يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مصدر يتضمن أمثلة شيفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/arabic/net/document-conversion/_index.md index cc2ec32984..9a4ef4c3a9 100644 --- a/pdf/arabic/net/document-conversion/_index.md +++ b/pdf/arabic/net/document-conversion/_index.md @@ -58,6 +58,7 @@ | [XPS إلى PDF](./xps-to-pdf/) تعلّم كيفية تحويل ملفات XPS إلى PDF باستخدام Aspose.PDF لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. مثالي للمطورين وهواة المستندات. | [تحويل PDF إلى PDF/X‑4 باستخدام C#](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) |تعرف على كيفية تحويل ملفات PDF إلى صيغة PDF/X‑4 باستخدام Aspose.PDF لـ .NET في دليل خطوة بخطوة. | | [دليل pdf إلى png – تحويل صفحات PDF إلى PNG باستخدام C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) |تعلم كيفية تحويل صفحات ملفات PDF إلى صور PNG باستخدام Aspose.PDF لـ .NET مع C# خطوة بخطوة. | +| [دليل تحويل PDFX4 – تعيين معيار PDF وتحويل PDF باستخدام Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) |تعلم كيفية تعيين معيار PDF/X‑4 وتحويل ملفات PDF باستخدام Aspose.PDF لـ .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/arabic/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..3cff5cddef --- /dev/null +++ b/pdf/arabic/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,227 @@ +--- +category: general +date: 2026-08-08 +description: دليل تحويل pdfx4 يوضح كيفية ضبط معيار PDF إلى PDF/X‑4 وتحويل PDF باستخدام + Aspose للحصول على تحويل تنسيق موثوق. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: ar +lastmod: 2026-08-08 +og_description: يشرح برنامج pdfx4 conversion tutorial كيفية تعيين معيار PDF إلى PDF/X‑4 + وإجراء تحويل موثوق لملف PDF باستخدام Aspose في C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: دليل تحويل pdfx4 – تعيين معيار PDF وتحويل PDF باستخدام Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: دليل تحويل pdfx4 – تعيين معيار PDF وتحويل PDF باستخدام Aspose +url: /ar/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# دليل تحويل pdfx4 – تعيين معيار PDF وتحويل PDF باستخدام Aspose + +إذا كنت تحتاج إلى **pdfx4 conversion tutorial**، فإن هذا الدليل يشرح لك العملية الكاملة لتعيين معيار PDF إلى PDF/X‑4 وتحويل ملف PDF باستخدام Aspose. سواءً كنت تُعد ملفات جاهزة للطباعة أو تضمن الامتثال للأرشفة طويلة الأمد، ستتعلم سير عمل **aspose pdf format conversion** موثوق يعمل مع .NET 6 وما بعده. + +يغطي الدليل كل شيء من إعداد المشروع إلى معالجة الحالات الخاصة مثل ملفات المصدر المفقودة أو الميزات غير المدعومة. في نهاية المقال ستحصل على برنامج C# مستقل ينتج ملفًا متوافقًا مع PDF/X‑4 جاهزًا لسلاسل العمل اللاحقة. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من وجود ما يلي: + +- .NET 6 SDK أو أحدث مثبت ([download here](https://dotnet.microsoft.com/download)) +- ترخيص صالح لـ Aspose.PDF for .NET (الإصدار التجريبي المجاني يكفي للاختبار) +- Visual Studio 2022، VS Code، أو أي بيئة تطوير تدعم .NET +- ملف PDF مصدر تريد تحويله (ضعه في مجلد معروف) + +هذه المتطلبات تضمن تشغيل الكود دون إعدادات إضافية. + +## الخطوة 1: إنشاء مشروع وحدة تحكم .NET جديد + +افتح الطرفية ونفّذ الأوامر التالية لإنشاء تطبيق وحدة تحكم باسم `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +أضف حزمة NuGet الخاصة بـ Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +حزمة `Aspose.Pdf` توفر الفئة `Document` و `PdfFormatConversionOptions` اللازمة لعمليات **convert pdf pdfx4**. + +## الخطوة 2: كتابة كود التحويل + +افتح الملف `Program.cs` (أو `Program.cs` إذا كنت تستخدم التعليمات العليا الجديدة) واستبدل محتوياته بالمثال الكامل أدناه. يوضح الكود **set pdf standard** إلى PDF/X‑4، ويجري التحويل، ويتضمن معالجة الأخطاء للمشكلات الشائعة. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### لماذا كل جزء مهم + +- **التحقق من صحة المعاملات** يمنع البرنامج من الانهيار عندما ينسى المستخدم مسار الملف. +- **تحميل `Document`** يرمي استثناءً واضحًا إذا كان ملف PDF المصدر مفقودًا أو معطوبًا، وهو أمر أساسي لتجربة **convert pdf using aspose** قوية. +- **`PdfFormatConversionOptions`** هو المكان الذي تقوم فيه بـ **set pdf standard**. عند تعيين `PdfStandard.PdfX4`، يقوم Aspose تلقائيًا بضبط مساحات الألوان، وتضمين الخطوط المطلوبة، وكتابة بيانات التعريف اللازمة لـ PDF/X‑4. +- **`FontEmbeddingMode.EmbedAll`** يضمن تضمين كل خط مستخدم في ملف PDF المصدر، وهو مطلب شائع للملفات الجاهزة للطباعة. +- **`doc.Convert`** ينفذ عملية **aspose pdf format conversion** الفعلية. الطريقة تكتب الملف الجديد في استدعاء واحد، مما يبسط سير العمل. + +## الخطوة 3: تشغيل المحول + +ابنِ المشروع ونفّذه مع مسارات المصدر والوجهة: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +إذا سارت الأمور بنجاح، ستطبع وحدة التحكم: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +يمكنك الآن فتح `output_pdfx4.pdf` في أي عارض PDF يدعم PDF/X‑4 (مثل Adobe Acrobat Pro) والتحقق من الامتثال عبر *File → Properties → Standards*. + +## الخطوة 4: التحقق من امتثال PDF/X‑4 (اختياري) + +لأنابيب الإنتاج قد ترغب في التحقق برمجيًا من النتيجة. توفر Aspose فئة `PdfComplianceChecker` (متوفرة في حزمة `Aspose.Pdf`) يمكن استخدامها كما يلي: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +تشغيل هذا المقتطف بعد التحويل يمنحك نتيجة صريحة نجاح/فشل، وهو مفيد لأنابيب CI/CD الآلية. + +## الخطوة 5: المشكلات الشائعة ونصائح الممارسات الأفضل + +| المشكلة | لماذا يحدث | كيفية تجنبه | +|-------|----------------|-----------------| +| خطوط مفقودة في ملف PDF المصدر | يتم الإشارة إلى الخطوط دون تضمينها، مما يسبب تحذيرات أثناء التحويل | استخدم `FontEmbeddingMode.EmbedAll` كما هو موضح أعلاه | +| يحتوي ملف PDF المصدر على كائنات شفافة غير مسموح بها في PDF/X‑4 | PDF/X‑4 يمنع بعض خلطات الشفافية | عالج PDF مسبقًا باستخدام `doc.ProcessTransparentObjects()` قبل التحويل | +| الملفات الكبيرة تسبب OutOfMemoryException | يتم تحميل المستند بالكامل في الذاكرة | قم ببث المصدر باستخدام `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| عدم تطبيق الترخيص | النسخة التجريبية تضيف علامات مائية | استدعِ `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` قبل أي استخدام لواجهة Aspose API | + +تطبيق هذه النصائح يضمن تجربة **convert pdf pdfx4** سلسة في بيئات الإنتاج. + +## الخطوة 6: توسيع الدليل + +بمجرد إتقانك للـ **pdfx4 conversion tutorial** الأساسي، يمكنك استكشاف ما يلي: + +- **تحويل دفعي**: تكرار عبر مجلد من ملفات PDF وتحويل كل منها إلى PDF/X‑4. +- **حقن البيانات الوصفية**: إضافة بيانات XMP الوصفية المطلوبة من قبل دور الطباعة المحددة. +- **إدارة ملفات تعريف الألوان**: إرفاق ملفات ICC باستخدام `doc.ColorSpace = ColorSpace.DeviceRGB;` قبل التحويل. + +كل هذه الإضافات تُبنى على أساس **aspose pdf format conversion** نفسه الموضح هنا. + +## الخاتمة + +هذا **pdfx4 conversion tutorial** أظهر لك كيفية **set pdf standard** إلى PDF/X‑4، وإجراء **convert pdf using Aspose** موثوق، والتحقق من النتيجة. لديك الآن برنامج C# كامل وقابل للتنفيذ يمكن دمجه في سلاسل معالجة المستندات الأكبر أو استخدامه كأداة مستقلة. جرّب المعالجة الدفعية، التعامل مع البيانات الوصفية، أو معايير PDF البديلة (PDF/A‑2b، PDF/UA) لتعميق خبرتك في **aspose pdf format conversion**. + +برمجة سعيدة، واستمتع بالثقة التي يأتي معها إخراج متوافق مع PDF/X‑4! + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [تحويل PDF/A إلى PDF قياسي باستخدام Aspose.PDF .NET : دليل شامل](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [كيفية تعيين تاريخ انتهاء الصلاحية على ملفات PDF باستخدام Aspose.PDF for .NET (دليل C#)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [دليل شامل: تحويل PDF إلى TIFF باستخدام Aspose.PDF .NET لتحويل المستندات بسلاسة](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/arabic/net/document-creation/_index.md b/pdf/arabic/net/document-creation/_index.md index 4b1d13c709..182b509504 100644 --- a/pdf/arabic/net/document-creation/_index.md +++ b/pdf/arabic/net/document-creation/_index.md @@ -76,9 +76,13 @@ ### [إنشاء مستند PDF باستخدام Aspose.PDF – إضافة صفحة وشكل وحفظ](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) تعلم كيفية إنشاء مستند PDF وإضافة صفحات وأشكال وحفظه باستخدام Aspose.PDF في .NET. + ### [إنشاء مستند PDF باستخدام Aspose.PDF – دليل خطوة بخطوة](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) تعلّم كيفية إنشاء مستند PDF باستخدام Aspose.PDF خطوة بخطوة. +### [إنشاء مستند PDF بلغة C# باستخدام Aspose.Pdf](./create-pdf-document-in-c-with-aspose-pdf/) +تعلم كيفية إنشاء مستند PDF باستخدام لغة C# ومكتبة Aspose.Pdf خطوة بخطوة. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/arabic/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..543a0a05b5 --- /dev/null +++ b/pdf/arabic/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: إنشاء مستند PDF في C# باستخدام Aspose.Pdf. تعلم كيفية إضافة صفحة فارغة + إلى PDF، وإضافة فقرة إلى PDF، وتحديد موضع النص في PDF باستخدام إحداثيات دقيقة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: ar +lastmod: 2026-08-08 +og_description: إنشاء مستند PDF في C# بسرعة. يوضح هذا الدرس كيفية إضافة صفحة فارغة + إلى PDF، وإضافة فقرة إلى PDF، وتحديد موضع النص في PDF باستخدام Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: إنشاء مستند PDF في C# باستخدام Aspose.Pdf – دليل كامل +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: إنشاء مستند PDF في C# باستخدام Aspose.Pdf +url: /ar/net/document-creation/create-pdf-document-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** برمجيًا، يوضح لك هذا الدليل بالضبط كيفية القيام بذلك. باستخدام Aspose.Pdf لـ .NET يمكنك إضافة صفحة PDF فارغة، إدراج فقرة إلى PDF، وتحديد موضع النص في PDF بدقة بكسل—كل ذلك في بضع أسطر من كود C#. + +ستنتهي من البرنامج التعليمي بملف PDF عملي يحتوي على ملاحظة موضوعة عند الإحداثيات التي تحددها. لا أدوات خارجية، لا تحرير يدوي—فقط كود نظيف وقابل للتكرار يمكنك إدراجه في أي مشروع .NET. + +## ما ستتعلمه + +* كيفية **إنشاء مستند PDF** باستخدام Aspose.Pdf. +* الطريقة الصحيحة لـ **إضافة صفحة PDF فارغة** ولماذا يجب أن تكون هناك صفحة قبل إضافة المحتوى. +* كيفية **إضافة فقرة إلى PDF** وإرفاق علامة مخصصة (مفيدة للاستخراج أو التنسيق لاحقًا). +* التقنية لـ **وضع النص في PDF** باستخدام الفئة `Position`. +* كيفية حفظ النتيجة على القرص والتحقق من المخرجات. + +**المتطلبات المسبقة** + +* .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.7+). +* رخصة صالحة لـ Aspose.Pdf for .NET أو مفتاح تقييم مجاني. +* بيئة تطوير متكاملة مثل Visual Studio 2022 أو VS Code مع امتداد C#. + +> **نصيحة احترافية:** إذا استخدمت نسخة تقييم مجانية، سيحتوي ملف PDF المُولد على علامة مائية صغيرة. سجّل رخصة لإزالتها. + +## كيفية إنشاء مستند PDF باستخدام Aspose.Pdf + +الخطوة الأولى هي إنشاء كائن من الفئة `Document`. هذا الكائن يمثل ملف PDF بالكامل ويمنحك الوصول إلى الصفحات والموارد وخيارات الحفظ. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +إنشاء المستند **ليس** يكتب شيئًا إلى القرص بعد؛ فهو فقط يجهز تمثيلًا في الذاكرة يمكنك التلاعب به. هذا النهج يحافظ على سرعة الـ API وكفاءة الذاكرة. + +## إضافة صفحة PDF فارغة باستخدام Aspose.Pdf + +يجب أن يحتوي ملف PDF على صفحة واحدة على الأقل قبل أن تتمكن من وضع أي محتوى. إضافة صفحة فارغة يتم عبر استدعاء طريقة واحدة: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +طريقة `Add()` تنشئ صفحة بحجم افتراضي (A4) واتجاه (عمودي). إذا كنت بحاجة إلى حجم مختلف، مرّر كائن `PageSize` إلى `Add()`. + +## إضافة فقرة إلى PDF وتعيين ملاحظة + +الآن بعد وجود الصفحة، يمكنك إنشاء كائن `Paragraph` يحمل النص المرئي. يمكن للفقرة أيضًا أن تحمل علامة مخصصة، وهو أمر مفيد عندما تحتاج لاحقًا إلى تحديد العنصر أو تنسيقه برمجيًا. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### لماذا تستخدم علامة؟ + +العلامات هي بيانات وصفية تسافر مع عنصر PDF. يمكن الاستعلام عنها لاحقًا باستخدام `Document.FindObject()` أو استخدامها بواسطة معالجات PDF اللاحقة التي تعتمد على العلامات من أجل إمكانية الوصول أو الفهرسة. + +## وضع النص في PDF بإحداثيات دقيقة + +الموضع الافتراضي للفقرة هو الزاوية العليا اليسرى من هامش الصفحة. لنقل النص إلى موقع محدد، اضبط خاصية `Position` على علامة الفقرة: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +الإحداثيات تُقاس بالنقاط (1 نقطة = 1/72 بوصة). الأصل (0,0) يقع في أسفل اليسار من الصفحة، وهو ما يتطابق مع معظم محركات عرض PDF. عدّل قيم `X` و `Y` لتناسب احتياجات تخطيطك. + +بعد تحديد الموضع، أضف الفقرة إلى مجموعة الصفحة: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## حفظ مستند PDF + +أخيرًا، اكتب ملف PDF الموجود في الذاكرة إلى ملف. يمكنك تحديد مسار الإخراج، الصيغة، وحتى خيارات التشفير. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +عند انتهاء البرنامج، يحتوي `output.pdf` على صفحة واحدة مع النص **Important note** موضعًا بالقرب من الزاوية العليا اليمنى (X = 50, Y = 750). افتح الملف في أي عارض PDF للتحقق من الموضع. + +![مستند PDF تم إنشاؤه باستخدام C# Aspose.Pdf يظهر الملاحظة الموضوعة](https://example.com/images/generated-pdf.png) + +*نص بديل للصورة: مستند PDF تم إنشاؤه باستخدام C# Aspose.Pdf يظهر الملاحظة الموضوعة* (يتضمن الكلمة المفتاحية الأساسية). + +## مثال كامل قابل للتنفيذ + +بجمع كل الأجزاء معًا، إليك تطبيق كونسول كامل يمكنك نسخه، بناءه، وتشغيله: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**المخرجات المتوقعة** عند تشغيل البرنامج: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +فتح `output.pdf` يُظهر صفحة واحدة مع النص **Important note** موضعًا عند الإحداثيات التي حددتها. + +## الاختلافات الشائعة وحالات الحافة + +| السيناريو | ما الذي يجب تغييره | لماذا يهم | +|----------|-------------------|-----------| +| **حجم صفحة مختلف** | `pdfDocument.Pages.Add(PageSize.A5)` | تقليل حجم الصفحات يقلل من حجم الملف ويتناسب مع شاشات الهواتف. | +| **ملاحظات متعددة** | التكرار عبر مجموعة من السلاسل وإنشاء `Paragraph` لكل منها، مع زيادة إحداثي Y. | يسمح بإنشاء دفعة من الملاحظات على شكل نقاط. | +| **حروف Unicode** | تأكد من حفظ ملف المصدر كـ UTF-8 وتعيين `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf يدعم Unicode مباشرةً، لكن يجب أن يتطابق ترميز الملف. | +| **PDF محمي بكلمة مرور** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | يضيف أمانًا للملاحظات السرية. | +| **إخراج عالي الدقة** | تعيين `pdfDocument.PageInfo.Width` و `Height` إلى قيم أكبر قبل إضافة المحتوى. | مفيد لطباعة ملفات PDF ذات تنسيق كبير. | + +## نصائح للاستخدام في الإنتاج + +* **إعادة استخدام كائن `Document`** عند إنشاء العديد من ملفات PDF في طلب واحد لتقليل ضغط الـ GC. +* **تحرير الكائنات** (`pdfDocument.Dispose()`) إذا قمت بإنشاء العديد من المستندات داخل حلقة. +* **تحقق من صحة الإحداثيات**: لا يمكن أن تتجاوز قيمة `Y` ارتفاع الصفحة؛ وإلا سيُقص النص. +* **استخدم `TextFragmentAbsorber`** لاستخراج الملاحظة لاحقًا عبر علامتها (`/P`) إذا كنت بحاجة إلى قراءة المحتوى مرة أخرى. + +## الخلاصة + +أنت الآن تعرف كيفية **إنشاء مستند PDF** باستخدام Aspose.Pdf، **إضافة صفحة PDF فارغة**، **إضافة فقرة إلى PDF**، **كيفية إضافة ملاحظة إلى PDF**، و**وضع النص في PDF** بدقة. يوضح المثال الكامل سير عمل نظيف وقابل للتكرار يمكنك توسيعه للفواتير، التقارير، أو أي سيناريو أتمتة مستندات. + +بعد ذلك، استكشف المواضيع ذات الصلة مثل **adding images to pdf**, **building tables with Aspose.Pdf**, أو **applying digital signatures**. كل من هذه يبني على المفاهيم الأساسية التي تم تغطيتها هنا، لذا ستكون جاهزًا لمواجهة مهام توليد PDF أكثر تعقيدًا. + +برمجة سعيدة! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [إنشاء مستند PDF باستخدام Aspose.PDF – إضافة صفحة، شكل وحفظ](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [كيفية إضافة صفحة فارغة في نهاية PDF باستخدام Aspose.PDF لـ .NET | دليل خطوة بخطوة](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [كيفية إضافة ختم نصي إلى 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/images-graphics/_index.md b/pdf/arabic/net/images-graphics/_index.md index 639cafdd28..2e75b92b96 100644 --- a/pdf/arabic/net/images-graphics/_index.md +++ b/pdf/arabic/net/images-graphics/_index.md @@ -164,6 +164,9 @@ ### [تعيين خلفيات الصور في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./aspose-pdf-net-set-image-backgrounds/) تعرّف على كيفية تحسين مستندات PDF الخاصة بك عن طريق تعيين خلفيات الصور باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل نصائح للإعداد والتنفيذ والتحسين. +### [ضبط شفافية PDF في C# باستخدام Aspose.PDF – دليل شامل](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +تعرّف على كيفية ضبط شفافية ملفات PDF باستخدام Aspose.PDF في C# من خلال دليل شامل خطوة بخطوة. + ## موارد إضافية - [توثيق Aspose.PDF للشبكة](https://docs.aspose.com/pdf/net/) diff --git a/pdf/arabic/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/arabic/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..71daaa8791 --- /dev/null +++ b/pdf/arabic/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: ضبط شفافية PDF في C# باستخدام Aspose.PDF – تعلّم كيفية تعديل شفافية الخط + والملء ببضع أسطر من الشيفرة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: ar +lastmod: 2026-08-08 +og_description: قم بتعيين شفافية PDF في C# بسرعة. يوضح لك هذا الدليل كيفية تعديل شفافية + الخط والملء باستخدام واجهة برمجة حالة الرسومات في Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: ضبط شفافية PDF في C# باستخدام Aspose.PDF – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: ضبط شفافية PDF في C# باستخدام Aspose.PDF – دليل كامل +url: /ar/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تعيين شفافية PDF في C# باستخدام Aspose.PDF – دليل كامل + +إذا كنت بحاجة إلى **تعيين شفافية PDF** لعمليات الرسم المحددة، يوضح لك هذا الدليل بالضبط كيفية القيام بذلك باستخدام Aspose.PDF for .NET. سواءً كنت تنشئ علامات مائية، أو طبقات نصف شفافة، أو رسومات مخصصة، ستتعلم نهجًا مختصرًا وجاهزًا للإنتاج. + +في الأقسام التالية سنغطي كل شيء من تحميل ملف PDF إلى تعديل حالة الرسومات، إضافة تعريف شفافية جديد، وحفظ النتيجة. لا تحتاج إلى أي وثائق خارجية—فقط الكود أدناه وشرح موجز لكل خطوة. + +## المتطلبات المسبقة + +* .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.7+) +* رخصة صالحة لـ Aspose.PDF for .NET (الإصدار التجريبي المجاني يعمل للتقييم) +* ملف PDF إدخال (`input.pdf`) موجود في مجلد يمكنك القراءة/الكتابة فيه +* Visual Studio 2022 أو أي بيئة تطوير C# تفضلها + +## الخطوة 1 – تحميل مستند PDF (Aspose.PDF for .NET) + +المهمة الأولى هي فتح ملف PDF الموجود. تمثل Aspose.PDF ملف PDF باستخدام الفئة `Document`، والتي تمنحك وصولًا كاملاً إلى الصفحات والموارد والكائنات منخفضة المستوى. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*لماذا هذا مهم*: تحميل المستند ينشئ نموذجًا في الذاكرة يمكنك تعديلّه بأمان. يضمن بيان `using` تحرير مقبض الملف تلقائيًا بعد الانتهاء. + +## الخطوة 2 – الحصول على الصفحة الأولى التي تريد تعديلها + +يتم تعريف الشفافية لكل صفحة من خلال قاموس موارد الصفحة. هنا نستهدف الصفحة الأولى، ولكن يمكنك التكرار عبر `doc.Pages` لإجراء عملية دفعة. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*لماذا هذا مهم*: كل صفحة لديها مجموعة `Resources` الخاصة بها، التي تخزن حالات الرسومات، الخطوط، الصور، إلخ. تعديل الصفحة الصحيحة يضمن ظهور تأثير الشفافية حيث تتوقع. + +## الخطوة 3 – فتح قاموس موارد الصفحة للتعديل + +توفر Aspose.PDF أداة مساعدة `DictionaryEditor` للتعامل مع قواميس PDF منخفضة المستوى دون كسر بنية الملف. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*لماذا هذا مهم*: تعديل قواميس COS (Content Object System) في PDF مباشرة هو الطريقة الوحيدة لإدخال حالة رسومات مخصصة. تُجرد الأداة الصياغة منخفضة المستوى مع الحفاظ على صحة PDF. + +## الخطوة 4 – استرجاع قاموس ExtGState الموجود + +قاموس **ExtGState** (حالة الرسومات الخارجية) يحتوي على الشفافية، وضع المزج، عرض الخط، إلخ. إذا لم يكن موجودًا، تقوم Aspose.PDF بإنشائه تلقائيًا عند إضافة إدخال جديد. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*لماذا هذا مهم*: بدون إدخال `ExtGState` لا يمكنك الإشارة إلى شفافية مخصصة لاحقًا في تدفق محتوى الصفحة. تضمن هذه الخطوة وجود الحاوية. + +## الخطوة 5 – إنشاء حالة رسومات جديدة بالشفافية المطلوبة + +حالة الرسومات هي مجموعة من المعلمات. للشفافية نحدد `CA` (شفافية الخط) و `ca` (شفافية التعبئة). كما نحدد وضع المزج (`BM`) للتحكم في كيفية تفاعل البكسلات الشفافة مع المحتوى الأساسي. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*لماذا هذا مهم*: القيم `CA` و `ca` تقبل أرقامًا من 0 (شفافية كاملة) إلى 1 (عتمة كاملة). اضبط هذه القيم لتحقيق التأثير البصري المطلوب. وضع المزج `"Normal"` هو الأكثر شيوعًا، لكن يمكنك تجربة `"Multiply"` أو `"Screen"` للحصول على تأثيرات فنية. + +## الخطوة 6 – تسجيل حالة الرسومات الجديدة في مجموعة ExtGState + +كل حالة رسومات يجب أن يكون لها اسم فريد (مثال، `GS0`). نضيف القاموس إلى مجموعة `ExtGState`، ثم نحدّث موارد الصفحة. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*لماذا هذا مهم*: بتسمية الحالة (`GS0`)، يمكنك الإشارة إليها لاحقًا في تدفق محتوى الصفحة باستخدام المشغل `gs`. إذا كنت بحاجة إلى مستويات شفافية متعددة، أنشئ إدخالات إضافية (`GS1`, `GS2`, …). + +## الخطوة 7 – تطبيق حالة الرسومات على أوامر الرسم (اختياري) + +إذا كنت تريد تطبيق الشفافية فورًا على المحتوى الموجود، يجب تعديل تدفق محتوى الصفحة. أدناه مثال بسيط يرسم مستطيلًا نصف شفاف باستخدام الحالة التي تم إنشاؤها حديثًا. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*لماذا هذا مهم*: المشغل `gs` (`SetGraphicsState`) يخبر مُعالج PDF باستخدام قيم الشفافية المعرفة في `GS0` لأي أوامر رسم لاحقة. يضمن الزوج `grestore`/`gsave` بقاء عناصر الصفحة الأخرى غير متأثرة. + +## الخطوة 8 – حفظ ملف PDF المعدل + +أخيرًا، اكتب المستند المحدث مرة أخرى إلى القرص. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*لماذا هذا مهم*: الحفظ ينهى جميع التغييرات، يدمج حالة الرسومات الجديدة، وينتج ملف PDF يمكن لأي عارض (Adobe Acrobat، Chrome، إلخ) عرضه بالشفافية المقصودة. + +### النتيجة المتوقعة + +افتح `output.pdf` في عارض PDF. يجب أن ترى مستطيلًا أحمر حدوده عتمة بنسبة 80 % وتعبئته عتمة بنسبة 40 %، يندمج بسلاسة مع أي محتوى خلفية. باقي الصفحة يبقى دون تغيير. + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | ما الذي يجب تغييره | السبب | +|-----------|----------------|--------| +| **مستويات شفافية متعددة** | إنشاء حالات رسومات إضافية (`GS1`, `GS2`, …) بقيم `CA`/`ca` مختلفة والإشارة إليها حيثما تحتاج | يسمح بالتحكم الدقيق في العناصر المختلفة | +| **وضعيات مزج مختلفة** | استخدم `"Multiply"`، `"Screen"`، `"Overlay"` إلخ، بدلاً من `"Normal"` في إدخال `BM` | ينتج تأثيرات مزج فنية | +| **التطبيق على تدفق محتوى موجود** | أدخل `SetGraphicsState` قبل المشغلات الرسم المحددة التي تريد التأثير عليها | يمنع الشفافية غير المرغوبة على الكائنات غير المتعلقة | +| **ملفات PDF الكبيرة** | معالجة الصفحات في حلقة `foreach (Page p in doc.Pages)` لتجنب تحميل الملف بالكامل في الذاكرة مرة واحدة | يحسن الأداء ويقلل من ضغط الذاكرة | +| **عدم وجود ExtGState موجود** | الكود في الخطوة 4 ينشئ واحدًا إذا كان مفقودًا، لذا لا يلزم أي معالجة إضافية | يضمن وجود القاموس | + +### نصيحة احترافية + +عند إضافة العديد من حالات الرسومات المخصصة، حافظ على تسمية متسقة (`GS0`, `GS1`, …) ووثّق هدف كل حالة في كتلة تعليق. هذا يجعل الصيانة المستقبلية أسهل، خاصةً في المشاريع التعاونية. + +## مثال كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل الذي يمكنك نسخه، لصقه، وتشغيله. يتضمن جميع الخطوات، وتعليمات `using` الضرورية، وتعليقات. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +شغّل البرنامج، + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة تعمل مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [تعيين خلفيات الصور في ملفات PDF باستخدام Aspose.PDF for .NET: دليل شامل](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [كيفية إنشاء خطوط متقطعة في ملفات PDF باستخدام Aspose.PDF for .NET: دليل خطوة بخطوة](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [كيفية تخصيص ملفات PDF باستخدام Aspose.PDF for .NET: تعيين هوامش الصفحة ورسم خطوط](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..1b49790b5e 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 باستخدام Aspose.PDF – دليل كامل](./save-pdf-document-with-aspose-pdf-complete-guide/) تعلم كيفية حفظ مستند PDF باستخدام Aspose.PDF خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/arabic/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ac0e969999 --- /dev/null +++ b/pdf/arabic/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: احفظ مستند PDF باستخدام Aspose.PDF، وتعلم كيفية إضافة صفحات PDF، وتعبئة + حقول نموذج PDF، وإنشاء PDF يحتوي على حقول نموذج في دليل واحد. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: ar +lastmod: 2026-08-08 +og_description: احفظ مستند PDF باستخدام Aspose.PDF واكتشف كيفية إضافة صفحات PDF، وتعبئة + حقول نموذج PDF، وإنشاء PDF يحتوي على حقول نموذج بسرعة وموثوقية. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: حفظ مستند PDF باستخدام Aspose.PDF – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: حفظ مستند PDF باستخدام Aspose.PDF – دليل كامل +url: /ar/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# حفظ مستند PDF باستخدام Aspose.PDF – دليل كامل + +إذا كنت بحاجة إلى **حفظ مستند PDF** يحتوي على حقول نموذج تفاعلية، فإن هذا الدرس يوضح لك بالضبط كيفية القيام بذلك. سترى كيفية إضافة صفحات PDF، إنشاء نموذج PDF، وتعبئة حقل نموذج PDF—كل ذلك باستخدام Aspose.PDF for .NET. + +في الأقسام التالية ستتعلم أن: + +* تضيف صفحات متعددة إلى مستند PDF جديد، +* تنشئ حقل نموذج مربع نص في الصفحة الأولى، +* تضع تعليقة عنصر واجهة (widget) لنفس الحقل في صفحة ثانية، +* تعيّن قيمة الحقل (تعبئة حقل نموذج PDF)، +* وأخيرًا **تحفظ مستند PDF** على القرص. + +لا تحتاج إلى أدوات خارجية؛ الكود الكامل القابل للتنفيذ مضمّن. + +## المتطلبات المسبقة + +* .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.7.2+). +* رخصة صالحة لـ Aspose.PDF for .NET أو مفتاح تقييم مجاني. +* Visual Studio 2022 (أو أي بيئة تطوير C#). + +أضف حزمة NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## كيفية إضافة صفحات PDF + +الخطوة الأولى هي إنشاء PDF فارغ وإضافة الصفحات التي تحتاجها. إضافة الصفحات قبل تعريف حقول النموذج يضمن دقة إحداثيات التخطيط. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*لماذا هذا مهم:* كل كائن `Page` يمثل لوحة طباعة. بإضافة الصفحات مبكرًا يمكنك الإشارة إليها لاحقًا عند وضع عناصر النموذج. + +## كيفية إنشاء نموذج PDF باستخدام Aspose.PDF + +يتكون نموذج PDF من **تعريف الحقل** (الحاوية المنطقية) وواحد أو أكثر من **تعليقات العنصر (widget annotations)** (التمثيل البصري). المثال ينشئ حقل `TextBoxField` باسم **Comments** في الصفحة الأولى. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*لماذا هذا مهم:* إحداثيات `Rectangle` تُعبّر بالنقاط (1 pt = 1/72 in). اضبط القيم لتناسب تصميمك. + +## تعبئة حقل نموذج PDF + +يمكنك تعيين قيمة الحقل برمجيًا قبل حفظ المستند. هذا هو جوهر **تعبئة حقل نموذج PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +إذا كنت بحاجة لملء الحقل لاحقًا (مثلاً من إدخال المستخدم)، ما عليك سوى تعيين سلسلة جديدة إلى `commentsField.Value` قبل استدعاء `Save`. + +## إضافة تعليقة عنصر واجهة (widget) لنفس الحقل في الصفحة الثانية + +تعليقة العنصر تجعل حقل النموذج مرئيًا على صفحة. بإضافة عنصر واجهة ثاني، يظهر نفس الحقل المنطقي على كلا الصفحتين، مما يوضح **إنشاء PDF مع حقول نموذج** التي تمتد عبر صفحات متعددة. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*لماذا هذا مهم:* مجموعة `Widgets` يمكنها احتواء أي عدد من التمثيلات البصرية. يمكن للمستخدمين التفاعل مع الحقل في أي من الصفحتين، وتظل القيمة المدخلة متزامنة. + +## إرفاق الحقل بتعليقات الصفحة الأولى + +يجب إضافة حقول النموذج إلى مجموعة تعليقات الصفحة حتى يتمكن عارض PDF من عرضها. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## حفظ مستند PDF + +الآن بعد أن تم تعريف النموذج بالكامل، يمكنك **حفظ مستند PDF** في الموقع الذي تختاره. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +عند فتح `output.pdf` في Adobe Acrobat Reader أو أي عارض PDF، سترى مربع نص في الصفحة 1 ومربعًا مطابقًا في الصفحة 2. الكتابة في أي من الصندوقين تُحدّث الحقل الأساسي نفسه. + +## مثال كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل الذي يمكنك نسخه‑ولصقه في تطبيق كونسول. يتَرجَم وينتج الـ PDF الموصوف دون أي تعديل. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**الناتج المتوقع:** ملف باسم `output.pdf` يحتوي على صفحتين. الصفحة 1 تُظهر مربع نص معنون بـ “Comments” عند الإحداثيات (100, 600). الصفحة 2 تُظهر نفس الحقل عند (100, 400). الحقل مملوء مسبقًا بـ “Enter your feedback here”. تغيير النص في أي من الصفحتين يُحدّث القيمة نفسها عند حفظ المستند مرة أخرى. + +## أسئلة شائعة ومعالجة الحالات الخاصة + +| السؤال | الجواب | +|----------|--------| +| *هل يمكنني إضافة أكثر من عنصر واجهة (widget) لنفس الحقل؟* | نعم. أضف كائنات `WidgetAnnotation` إضافية إلى `commentsField.Widgets`. يمكن وضع كل عنصر واجهة في أي صفحة. | +| *ماذا لو احتجت لتعيين مظهر الحقل (الخط، الحدود، الخلفية)؟* | استخدم `commentsField.DefaultAppearance` لتحديد الخط واللون، واضبط خصائص `commentsField.Border` لنمط الخط. | +| *كيف أجعل الحقل للقراءة فقط؟* | عيّن `commentsField.ReadOnly = true;`. سيظل الحقل يعرض قيمته لكنه لا يمكن تحريره من قبل المستخدم. | +| *هل يمكن تعبئة الحقل بعد إنشاء PDF؟* | نعم. حمّل PDF المحفوظ باستخدام `new Document("output.pdf")`، حدد الحقل عبر `pdfDocument.Form["Comments"]`، عيّن قيمة جديدة إلى `Value`، ثم استدعِ `Save` مرة أخرى. | +| *ماذا لو كان يجب أن يتوافق PDF مع معيار PDF/A للأرشفة؟* | بعد بناء المستند، استدعِ `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` قبل الحفظ. | + +## نصائح من المجال + +* **نصيحة احترافية:** احرص على أن يكون اسم الحقل المنطقي قصيرًا وفريدًا؛ فهو المعرف الذي ستستخدمه عند تعبئة النموذج برمجيًا لاحقًا. +* **احذر من:** تداخل مستطيلات العناصر (widgets). التداخل يسبب عيوبًا في العرض في بعض عارضات PDF. +* **ملاحظة أداء:** إضافة العديد من الصفحات أو العناصر في حلقة ضيقة يمكن تحسينه بإعادة استخدام كائن `Rectangle` واحد وتغيير إحداثياته فقط. + +## الخلاصة + +أنت الآن تعرف كيف **تحفظ مستند PDF** يحتوي على نموذج كامل الوظائف، وكيف **تعبئ حقل نموذج PDF**، وكيف **تضيف صفحات PDF** و**تنشئ PDF مع حقول نموذج** باستخدام Aspose.PDF for .NET. المثال الكامل يوضح سير العمل من إنشاء المستند إلى الحفظ النهائي. + +بعد ذلك، استكشف مواضيع ذات صلة مثل **إضافة مربعات اختيار**، **إنشاء قوائم منسدلة**، أو **تسطيح النموذج** للتوزيع للقراءة فقط. كل منها يبني على نفس المبادئ التي تم تغطيتها هنا ويوسّع قدراتك في أتمتة PDF. + +برمجة سعيدة! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية إنشاء PDF باستخدام Aspose – إضافة حقل نموذج وصفحات](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [إنشاء مستند PDF باستخدام Aspose – إضافة صفحة، مربع نص، ونموذج](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [كيفية إضافة واستخراج حقول نموذج PDF باستخدام Aspose.PDF for .NET: دليل شامل](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/arabic/net/programming-with-pdf-pages/_index.md index ac3de2c320..abbebf7f48 100644 --- a/pdf/arabic/net/programming-with-pdf-pages/_index.md +++ b/pdf/arabic/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ | [تحديث أبعاد صفحة PDF](./update-dimensions/) |اكتشف كيفية تحديث أبعاد صفحات PDF بسهولة باستخدام Aspose.PDF لـ .NET في هذا الدليل الشامل خطوة بخطوة. | | [تكبير محتويات الصفحة في ملف PDF](./zoom-to-page-contents/) تعرّف على كيفية تكبير محتوى صفحات ملفات PDF باستخدام Aspose.PDF لـ .NET في هذا الدليل الشامل. حسّن مستندات PDF الخاصة بك وفقًا لاحتياجاتك الخاصة. | [إضافة أرقام الصفحات إلى PDF باستخدام C# – دليل كامل خطوة بخطوة](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | دليل خطوة بخطوة لإضافة أرقام الصفحات إلى ملفات PDF باستخدام C# و Aspose.PDF لـ .NET. | +| [إضافة ترقيم Bates إلى PDF باستخدام Aspose – دليل خطوة بخطوة](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | دليل خطوة بخطوة لإضافة ترقيم Bates إلى ملفات PDF باستخدام Aspose.PDF لـ .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/arabic/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..4dace69464 --- /dev/null +++ b/pdf/arabic/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-08 +description: إضافة ترقيم باتس إلى ملف PDF باستخدام Aspose.Pdf في C#. يوضح هذا الدليل + أيضًا كيفية إضافة صفحة فارغة إلى ملف PDF وإنشاء ملف PDF برمجيًا. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: ar +lastmod: 2026-08-08 +og_description: إضافة ترقيم بايتس إلى ملف PDF باستخدام Aspose.Pdf في C#. تعلم كيفية + إضافة صفحة فارغة إلى PDF، وإنشاء PDF برمجيًا، وحفظ المستند النهائي في دقائق. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: إضافة ترقيم بايتس لملف PDF باستخدام Aspose – دليل C# الكامل +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: إضافة ترقيم بيتس لملف PDF باستخدام Aspose – دليل خطوة بخطوة +url: /ar/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إضافة ترقيم بايتس إلى PDF باستخدام Aspose – دليل خطوة بخطوة + +إضافة ترقيم بايتس إلى PDF باستخدام Aspose.Pdf أمر بسيط بمجرد أن تفهم الخطوات الأساسية. إذا كنت بحاجة أيضًا إلى إضافة صفحة فارغة إلى PDF أو إنشاء PDF برمجيًا، يغطي هذا الدليل كل ما تحتاجه. + +في هذا الدرس سوف: + +* تنشئ مستند PDF جديد من الصفر. +* تضيف صفحة فارغة إلى PDF ستستضيف أرقام بايتس. +* تُكوّن كائن ترقيم بايتس مع بادئة مخصصة. +* تحفظ الـ PDF بحيث تظهر الأرقام في الملف المُنشأ. + +بنهاية الدرس ستحصل على تطبيق وحدة تحكم C# كامل الوظائف ينتج PDF يحتوي على أرقام بايتس مثل **CASE‑1000**, **CASE‑1001**, … – وهو مطلب شائع في سير عمل القضايا القانونية واكتشاف الأدلة الإلكترونية. + +## المتطلبات المسبقة + +* .NET 6.0 SDK أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.8). +* Visual Studio 2022 أو أي بيئة تطوير متوافقة مع C#. +* ترخيص صالح لـ Aspose.Pdf for .NET (أو مفتاح تقييم مجاني). +* إلمام أساسي بصياغة C#. + +> **نصيحة احترافية:** إذا شغلت الكود بدون ترخيص، سيضيف Aspose علامة مائية صغيرة إلى ملف PDF الناتج. + +## الخطوة 1: إعداد المشروع واستيراد Aspose.Pdf + +أنشئ مشروع وحدة تحكم جديد وأضف حزمة Aspose.Pdf عبر NuGet: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +التوجيهات `using` المطلوبة للمثال هي: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +هذه المساحات الاسمية تمنحك الوصول إلى الفئات `Document` و `Page` و `BatesNumberingArtifact` المستخدمة لاحقًا. + +## الخطوة 2: إضافة صفحة فارغة إلى PDF + +يجب ربط رقم بايتس بصفحة، لذا نقوم أولاً بإنشاء صفحة فارغة ستستقبل كائن الترميز. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +فئة `Document` تمثل ملف PDF بالكامل، بينما تقوم `Pages.Add()` بإدراج صفحة جديدة فارغة في نهاية مجموعة صفحات المستند. وبما أن المستند يبدأ فارغًا، فإن هذا الاستدعاء ينشئ أيضًا الصفحة الأولى. + +## الخطوة 3: تكوين كائن ترقيم بايتس + +الآن نحدد شكل أرقام بايتس. تسمح لك `BatesNumberingArtifact` بتعيين رقم البداية، البادئة، اللاحقة، وخيارات التنسيق. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**لماذا هذا مهم:** +تعيين `StartNumber` إلى **1000** يتماشى مع عادات تسمية ملفات القضايا القانونية. تضمن `Prefix` ظهور كل رقم كـ **CASE‑1000**, **CASE‑1001**, … مما يسهل البحث والترتيب. + +## الخطوة 4: إرفاق الكائن بالصفحة + +يجب إضافة الكائن إلى مجموعة `Artifacts` الخاصة بالصفحة حتى يقوم Aspose برسمه على كل صفحة عند الحفظ. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +عند حفظ المستند، يكرر Aspose الكائن تلقائيًا على جميع الصفحات، مع زيادة الرقم لكل صفحة لاحقة. + +## الخطوة 5: (اختياري) إضافة صفحات إضافية + +إذا كنت بحاجة إلى مزيد من الصفحات، ما عليك سوى تكرار `pdfDocument.Pages.Add()`. سيظهر كائن ترقيم بايتس الذي أرفقته في الخطوة السابقة تلقائيًا على كل صفحة جديدة. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## الخطوة 6: حفظ PDF – إنشاء PDF برمجيًا + +أخيرًا، احفظ المستند على القرص. هذه هي النقطة التي يتم فيها رسم أرقام بايتس على الصفحات. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**النتيجة المتوقعة:** +افتح *BatesNumberedDocument.pdf* وسترى ملف PDF مكوّن من ثلاث صفحات. كل صفحة تعرض رقم بايتس في الزاوية السفلية اليمنى: + +* الصفحة 1 → **CASE‑1000** +* الصفحة 2 → **CASE‑1001** +* الصفحة 3 → **CASE‑1002** + +يتم زيادة الأرقام تلقائيًا لأن الكائن مرفق بمجموعة الصفحات. + +## مثال كامل قابل للتنفيذ + +بجمع كل ما سبق، إليك برنامج وحدة تحكم كامل يمكنك نسخه ولصقه وتشغيله: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +شغّل البرنامج باستخدام `dotnet run`. بعد التنفيذ، ابحث عن الملف على سطح المكتب وتأكد من أرقام بايتس. + +![مثال على إضافة ترقيم بايتس إلى PDF](/images/bates-numbering.png "مثال على إضافة ترقيم بايتس إلى PDF") + +## أسئلة شائعة وحالات خاصة + +### ماذا لو احتجت إلى خط أو موضع مختلف؟ + +تُظهر `BatesNumberingArtifact` خصائص مثل `FontSize`، `FontColor`، `HorizontalAlignment`، و `VerticalAlignment`. على سبيل المثال: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### كيف يمكن استبعاد صفحة معينة من الترقيم؟ + +أنشئ كائن `BatesNumberingArtifact` منفصل للصفحات التي تريد ترقيمها وأضفه فقط إلى تلك الصفحات. الصفحات التي لا يحتويها كائن سيبقى ترقيمها غير موجود. + +### هل يعمل هذا مع ملفات PDF موجودة؟ + +نعم. بدلاً من `new Document()`, حمّل ملفًا موجودًا: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +ثم أرفق الكائن بالصفحات المطلوبة واحفظ المستند. + +## الخلاصة + +أنت الآن تعرف **كيفية إضافة ترقيم بايتس إلى PDF** باستخدام Aspose.Pdf، **كيفية إضافة صفحة فارغة إلى PDF**، و**كيفية إنشاء PDF برمجيًا** في حل C# نظيف وقابل لإعادة الاستخدام. يعمل النهج مع أي عدد من الصفحات، بادئات مخصصة، وخيارات تنسيق، مما يمنحك سيطرة كاملة على المستند النهائي. + +الخطوات التالية التي قد تستكشفها: + +* استخدم **create pdf as + +## ماذا ينبغي أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية إضافة وتخصيص أرقام الصفحات في ملفات 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-empty-page-end-pdf-aspose-pdf-net/) +- [إنشاء مستند PDF باستخدام Aspose.PDF – إضافة صفحة، شكل وحفظ](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 61121955ca..dce8bf1022 100644 --- a/pdf/arabic/net/programming-with-security-and-signatures/_index.md +++ b/pdf/arabic/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ | [التوقيع بالبطاقة الذكية باستخدام توقيع ملف PDF](./sign-with-smart-card-using-pdf-file-signature/) تعرّف على كيفية توقيع ملفات PDF باستخدام بطاقة ذكية مع Aspose.PDF لـ .NET. اتبع هذا الدليل خطوة بخطوة للحصول على توقيعات رقمية آمنة. | [التوقيع باستخدام البطاقة الذكية باستخدام حقل التوقيع](./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# كامل باستخدام Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | تعلم كيفية إصلاح ملفات PDF المتضررة باستخدام Aspose.PDF لـ .NET في دليل شامل خطوة بخطوة بلغة C#. | +| [التحقق من توقيع PDF في C# باستخدام Aspose.PDF – دليل كامل](./verify-pdf-signature-in-c-with-aspose-pdf-complete-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: التحقق من توقيع PDF الرقمي باستخدام Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | تعلم كيفية التحقق من صحة التوقيع الرقمي لملف PDF باستخدام Aspose.PDF لـ .NET. دليل خطوة بخطوة لتأكيد صحة التوقيع. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/arabic/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/arabic/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..ff9478df39 --- /dev/null +++ b/pdf/arabic/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: دليل توقيع PDF يوضح كيفية التحقق من صحة التوقيع الرقمي للـ PDF باستخدام + خيارات التحقق من التوقيع وكود C# – دليل سريع خطوة بخطوة +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: ar +lastmod: 2026-08-08 +og_description: دليل توقيع PDF يشرح لك خطوة بخطوة كيفية التحقق من صحة توقيع PDF الرقمي + باستخدام Aspose.PDF. تعلم كيفية تكوين خيارات التحقق من التوقيع والتحقق من النتيجة. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: دليل توقيع PDF – التحقق من التوقيعات الرقمية لملفات PDF باستخدام C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'دليل توقيع PDF: التحقق من صحة التوقيع الرقمي لملف PDF باستخدام Aspose.PDF' +url: /ar/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# دليل توقيع PDF – التحقق من صحة توقيع PDF الرقمي في C# + +إذا كنت بحاجة إلى **دليل توقيع PDF** يوضح بالضبط كيفية التحقق من صحة توقيع PDF الرقمي، فإن هذا الدليل يغطي ما تحتاجه. ستتعرف على كيفية تحميل ملف PDF موقّع، وتكوين **خيارات التحقق من التوقيع**، وتشغيل عملية التحقق، وعرض النتيجة — كل ذلك مع كود C# واضح وقابل للتنفيذ. + +يعد التحقق من توقيع PDF أمرًا أساسيًا عندما تتعامل مع العقود، الفواتير، أو أي مستند ملزم قانونيًا. يشرح هذا الدليل سير العمل الكامل، حتى تتمكن من دمج فحص التوقيعات في تطبيقاتك دون التخمين حول أي استدعاءات API مطلوبة. + +## ما ستحققه + +بنهاية هذا الدليل ستتمكن من: + +* تحميل ملف PDF موقّع باستخدام Aspose.PDF. +* إعداد **خيارات التحقق من التوقيع** مثل خوارزمية التجزئة. +* استدعاء طريقة `Validate` لـ **التحقق من توقيع PDF الرقمي**. +* طباعة رسالة واضحة “Signature valid” في وحدة التحكم. + +**المتطلبات المسبقة** + +* .NET 6.0 (أو أحدث) مثبت. +* Visual Studio 2022 (أو أي بيئة تطوير C#). +* حزمة NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **نصيحة احترافية:** استخدم أحدث نسخة من Aspose.PDF للحصول على دعم لخوارزميات SHA‑3 وتحسين أداء التحقق. + +## الخطوة 1: تثبيت حزمة NuGet Aspose.PDF + +افتح مشروعك في Visual Studio وشغّل الأمر التالي في Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +تضيف الحزمة مساحة الاسم `Aspose.Pdf`، التي تحتوي على الفئة `Document` وواجهات برمجة التطبيقات المتعلقة بالتوقيع التي ستستخدمها. + +## الخطوة 2: تحميل مستند PDF الموقّع + +السطر الأول من الكود ينشئ كائن `Document` يمثل ملف PDF الموجود على القرص. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*لماذا هذا مهم:* تقوم فئة `Document` بتحليل بنية PDF، وتكشف مجموعة `Signatures` التي تحتوي على جميع التوقيعات الرقمية المدمجة. إذا كان مسار الملف غير صحيح، سيتم رمي استثناء، لذا تحقق من المسار قبل تشغيل البرنامج. + +## الخطوة 3: تكوين خيارات التحقق من التوقيع + +يمكنك تخصيص عملية التحقق باستخدام الفئة `SignatureValidationOptions`. في هذا الدليل نحدد خوارزمية التجزئة، لكن يمكنك أيضًا ضبط فحوصات إبطال الشهادة، والتحقق من الطوابع الزمنية، والمزيد. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*لماذا هذا مهم:* يجب أن تتطابق خوارزمية التجزئة مع تلك المستخدمة عند إنشاء التوقيع. استخدام خوارزمية غير متطابقة يؤدي إلى فشل التحقق حتى وإن كان التوقيع صحيحًا. + +## الخطوة 4: التحقق من التوقيع الأول + +معظم ملفات PDF تحتوي على توقيع واحد، لكن مجموعة `Signatures` يمكن أن تحتوى على عدة توقيعات. هذا المثال يتحقق من العنصر الأول (`[0]`). تُعيد طريقة `Validate` قيمة منطقية تشير إلى النجاح. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*حالة حافة:* إذا لم يحتوي PDF على أي توقيع، فإن `document.Signatures.Count` سيكون `0` ومحاولة الوصول إلى `[0]` ستؤدي إلى `IndexOutOfRangeException`. احمِ الكود بفحص بسيط: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## الخطوة 5: عرض نتيجة التحقق + +أخيرًا، اكتب النتيجة إلى وحدة التحكم. تُظهر هذه الخطوة **نتيجة فحص توقيع PDF** بصيغة قابلة للقراءة البشرية. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +عند تشغيل البرنامج، يجب أن ترى: + +``` +Signature valid: True +``` + +إذا كان التوقيع معطوبًا، أو يستخدم خوارزمية غير مدعومة، أو تم إبطال الشهادة، فستكون النتيجة `False`. + +## مثال كامل قابل للتنفيذ + +انسخ الكود التالي إلى مشروع وحدة تحكم جديد (`dotnet new console`) واستبدل `YOUR_DIRECTORY/signed.pdf` بالمسار إلى ملف PDF الموقّع الخاص بك. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### النتيجة المتوقعة + +``` +Signature valid: True +``` + +إذا فشل التحقق من التوقيع، ستظهر في وحدة التحكم الرسالة `Signature valid: False`. + +## أسئلة شائعة واستكشاف الأخطاء + +| السؤال | الجواب | +|----------|--------| +| **ماذا لو استخدم PDF خوارزمية تجزئة مختلفة؟** | غيّر `HashAlgorithm` في `SignatureValidationOptions` لتطابقها، مثل `HashAlgorithm.SHA256`. | +| **كيف يمكنني التحقق من جميع التوقيعات في PDF متعدد التوقيعات؟** | قم بالتكرار عبر `document.Signatures` واستدعِ `Validate` لكل عنصر. | +| **هل يمكنني التحقق من سلسلة الثقة لشهادة التوقيع؟** | عيّن `validationOptions.CheckCertificateRevocation = true` و optionally قدم `CertificateStore` مخصص لتضمين شهادات الجذر الموثوقة. | +| **ماذا لو احتجت إلى دعم التحقق من الطابع الزمني؟** | فعّل `validationOptions.CheckTimestamp = true`. سيقوم Aspose.PDF بعد ذلك بالتحقق من رمز الطابع الزمني المدمج. | +| **هل هناك طريقة للحصول على أخطاء تحقق مفصلة؟** | استخدم `ValidateEx(validationOptions, out ValidationResult result)`؛ يحتوي `result` على `ErrorMessage` و `ErrorCode` لكل فشل. | + +## الخطوات التالية + +* استكشف **التحقق من توقيع PDF** لعدة توقيعات عبر التكرار على `document.Signatures`. +* دمج هذا الدليل مع **فحص توقيع PDF** في واجهة ويب API لتوفير تحقق فوري من العقود المرفوعة. +* تعمق في **خيارات التحقق من التوقيع** مثل فحوصات CRL/OCSP، والتحقق من الطوابع الزمنية، ومتاجر الثقة المخصصة. + +الآن لديك **دليل توقيع PDF** كامل يوضح كيفية **التحقق من توقيع PDF الرقمي** باستخدام Aspose.PDF في C#. لا تتردد في تعديل الكود ليتناسب مع سير عملك، إضافة تسجيلات، أو دمجه في خطوط معالجة مستندات أكبر. Happy coding! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/arabic/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..76f08469bc --- /dev/null +++ b/pdf/arabic/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: تحقق من توقيع PDF في C# باستخدام Aspose.PDF. تعلّم كيفية التحقق من صحة + التوقيع الرقمي للـ PDF وقائمة توقيعات PDF في بضع أسطر من الشيفرة فقط. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: ar +lastmod: 2026-08-08 +og_description: تحقق من توقيع PDF في C# باستخدام Aspose.PDF. يوضح لك هذا الدليل كيفية + التحقق من صحة التوقيع الرقمي لملف PDF، وإدراج توقيعات PDF، ومعالجة التوقيعات المخترقة + بكفاءة. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: تحقق من توقيع PDF في C# – دليل Aspose.PDF السريع +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: تحقق من توقيع PDF في C# باستخدام Aspose.PDF – دليل كامل +url: /ar/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تحقق من توقيع PDF في C# باستخدام Aspose.PDF – دليل كامل + +إذا كنت بحاجة إلى **التحقق من توقيع PDF** في تطبيق .NET، يوضح لك هذا الدليل طريقة مختصرة للقيام بذلك باستخدام Aspose.PDF. ستتعلم كيفية **التحقق من صحة التوقيع الرقمي PDF**، **قائمة توقيعات PDF**، واكتشاف التواقيع المخترقة في بضع أسطر من الشيفرة فقط. + +يغطي الدرس كل شيء من تثبيت المكتبة إلى معالجة الحالات الحدية مثل المستندات غير الموقعة أو ملفات PDF المشفرة. في النهاية، ستكون قادرًا على دمج التحقق من التوقيع في أي مشروع C#، مما يضمن أصالة ملفات PDF الواردة. + +**المتطلبات المسبقة** + +- .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.6+). +- إلمام أساسي بـ C# و Visual Studio (أو أي بيئة تطوير تفضلها). +- ترخيص Aspose.PDF for .NET (الإصدار التجريبي المجاني يكفي للتقييم). + +إذا كنت تستوفي هذه المتطلبات، فأنت جاهز للبدء في التحقق من توقيعات PDF. + +## تحقق من توقيع PDF – إعداد المشروع + +1. **إضافة حزمة Aspose.PDF NuGet** + افتح وحدة تحكم مدير الحزم وشغّل: + + ```bash + Install-Package Aspose.PDF + ``` + + هذا يجلب التجميع `Aspose.Pdf` واعتمادياته. + +2. **استيراد المساحات الاسمية المطلوبة** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` يوفّر امتداد `Any` المستخدم لاحقًا، بينما يحتوي `Aspose.Pdf` على الفئات `Document` و `Signature`. + +## تحميل مستند PDF + +الخطوة الوظيفية الأولى هي فتح ملف PDF الذي تريد فحصه. تقوم Aspose.PDF بقراءة الملف إلى الذاكرة، مما يتيح لك الاستعلام عن توقيعاته. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **لماذا هذا مهم** – تحميل المستند داخل كتلة `using` يضمن تحرير مقبض الملف بسرعة، مما يمنع مشاكل قفل الملف في الخدمات التي تعمل لفترات طويلة. + +## قائمة توقيعات PDF + +قبل أن تتحقق من توقيع، قد ترغب في معرفة عدد التواقيع الموجودة. تُظهر هذه الخطوة قدرة **قائمة توقيعات PDF**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**شرح** + +- `document.Signatures` تُعيد مجموعة من كائنات `Signature`. +- `Count` يخبرك بعدد التواقيع الموجودة. +- كل `Signature` يعرض بيانات تعريفية مثل `Id` و`SignatureType` و`Reason`، والتي قد تكون مفيدة لسجلات التدقيق. + +**حالة حدية** – إذا لم يحتوي PDF على أي توقيع، سيكون `Count` مساويًا لـ `0` ولن يتم تنفيذ الحلقة. يمكنك معالجة هذا السيناريو بلطف: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## التحقق من صحة التوقيع الرقمي PDF – اكتشاف التواقيع المخترقة + +الآن بعد أن أصبحت قادرًا على تعداد التواقيع، المهمة الأساسية هي **التحقق من توقيع PDF** من حيث النزاهة. توفر Aspose.PDF الخاصية `IsCompromised`، التي تُعيد `true` عندما لا يتطابق التجزئة التشفيرية للتوقيع مع محتوى المستند. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**لماذا هذا يعمل** + +- `Signature.IsCompromised` يجري تحققًا تشفيريًا كاملاً باستخدام سلسلة الشهادات المدمجة. +- مشغل LINQ `Any` يتوقف عند أول توقيع مخترق، مما يجعل الفحص فعالًا حتى في المستندات التي تحتوي على العديد من التواقيع. + +### معالجة التواقيع المتعددة بشكل فردي + +إذا كنت بحاجة إلى معرفة أي توقيع محدد فشل، قم بالتكرار بدلاً من استخدام `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**نصيحة احترافية:** احفظ نتيجة التحقق مع `sig.Id` في قاعدة بيانات للتحليل الجنائي لاحقًا. + +## إخراج النتائج ومراعاة الحالات الحدية + +فيما يلي برنامج كامل قابل للتنفيذ يجمع الخطوات السابقة. يقوم بتحميل PDF، سرد جميع التواقيع، التحقق منها، وطباعة نتيجة واضحة. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**الناتج المتوقع (تواقيع صالحة)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**الناتج المتوقع (توقيع مخترق)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### المشكلات الشائعة وكيفية تجنبها + +| المشكلة | الحل | +|---------|------| +| ملف PDF محمي بكلمة مرور. | مرّر كلمة المرور عبر `document.Encrypt.Decrypt(password)` قبل الوصول إلى `Signatures`. | +| لم يتم تعيين ترخيص Aspose.PDF. | استخدم `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` لتجنب علامات مائية للتقييم. | +| ملفات PDF الكبيرة تسبب استهلاكًا عاليًا للذاكرة. | عالج الملف في وضع البث (`Document.Load(stream)`) بدلاً من تحميل الملف بالكامل مرة واحدة. | + +## الخلاصة + +أنت الآن تعرف كيفية **التحقق من توقيع PDF** في C# باستخدام Aspose.PDF، وكيفية **التحقق من صحة التوقيع الرقمي PDF**، وكيفية **قائمة توقيعات PDF** لأغراض التقارير أو التدقيق. يوضح المثال الكامل كيفية تحميل المستند، تعداد توقيعاته، فحص كل منها للتأكد من عدم اختراقها، ومعالجة الحالات الحدية الشائعة. + +الخطوات التالية التي قد تستكشفها: + +- **تحقق من رموز الطابع الزمني** لضمان إنشاء التوقيع قبل انتهاء صلاحية الشهادة. +- **استخراج شهادات الموقع** (`sig.Certificate`) للتحقق من الثقة المخصصة. +- **دمج مع ASP.NET Core** لرفض ملفات PDF المرفوعة تلقائيًا التي تفشل في التحقق. + +لا تتردد في تجربة التواقيع المتعددة، منطق التحقق المخصص، أو مكتبات PDF بديلة. إذا وجدت هذا الدليل مفيدًا، شاركه مع زملائك أو أضف نصائحك الخاصة في التعليقات. + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن أمثلة شيفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية التحقق من PDF – التحقق من توقيع PDF باستخدام Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [التحقق من توقيع PDF في C# – دليل كامل للتحقق من التوقيع الرقمي PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net التحقق من التوقيع الرقمي](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/arabic/net/text-operations/_index.md index 0ea3e0ef9c..6e6a49f9ed 100644 --- a/pdf/arabic/net/text-operations/_index.md +++ b/pdf/arabic/net/text-operations/_index.md @@ -27,7 +27,7 @@ تعرّف على كيفية إزالة جميع النصوص من مستندات PDF بكفاءة باستخدام Aspose.PDF لـ .NET. اتبع هذا الدليل خطوة بخطوة مع أمثلة برمجية ونصائح لتحسين الأداء. ### [إنشاء وتدوير النص في ملفات PDF باستخدام Aspose.PDF .NET: دليل شامل للمطورين](./create-rotate-text-aspose-pdf-net/) -تعرّف على كيفية إنشاء وتدوير النصوص في مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل التهيئة، وتكوين النص، والتخطيطات الإبداعية باستخدام C#. +تعرّف على كيفية إنشاء وتدوير النصوص في مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل التهيئة، وتكوين النص، والتخطيطات الإبداعية باستخدام C#. ### [إنشاء ملفات PDF نصية مسننة في .NET باستخدام Aspose.PDF](./create-indented-text-pdfs-net-aspose-pdf/) برنامج تعليمي لبرمجة Aspose.PDF Net @@ -45,7 +45,7 @@ تعرّف على كيفية تضمين الخطوط في مستندات PDF باستخدام Aspose.PDF لـ .NET. حدّد تنسيقًا متناسقًا للخطوط على مختلف المنصات من خلال هذا البرنامج التعليمي الشامل. ### [تضمين خطوط Type 1 في ملفات PDF باستخدام Aspose.PDF .NET | دليل شامل](./embed-type-1-fonts-aspose-pdf-net/) -تعرّف على كيفية تضمين خطوط Type 1 القياسية في مستندات PDF باستخدام Aspose.PDF لـ .NET. وفّر طباعةً متناسقة على جميع الأجهزة باستخدام هذا الدليل السهل الاستخدام. +تعرّف على كيفية تضمين خطوط Type 1 القياسية في مستندات PDF باستخدام Aspose.PDF .NET. وفّر طباعةً متناسقة على جميع الأجهزة باستخدام هذا الدليل السهل الاستخدام. ### [استخراج الخطوط من ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./extract-fonts-aspose-pdf-net/) تعرّف على كيفية استخراج الخطوط بكفاءة من مستندات PDF باستخدام Aspose.PDF لـ .NET. مثالي لتدقيق المستندات وحفظها رقميًا. @@ -54,25 +54,25 @@ تعرّف على كيفية استخراج قيم الحقول من ملفات PDF باستخدام Aspose.PDF لـ .NET بلغة C#. يغطي هذا الدليل التثبيت والتنفيذ وأفضل الممارسات. ### [استخراج الفقرات من ملف PDF باستخدام Aspose.PDF .NET: دليل كامل لعمليات النصوص](./extract-paragraphs-from-pdf-aspose-pdf-net/) -تعرّف على كيفية استخراج فقرات من مستندات PDF بكفاءة باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الإعداد والتنفيذ والتطبيقات العملية. +تعرّف على كيفية استخراج فقرات من مستندات PDF بكفاءة باستخدام Aspose.PDF .NET. يغطي هذا الدليل الإعداد والتنفيذ والتطبيقات العملية. ### [استخراج النص من كل صفحة باستخدام Aspose.PDF لـ .NET: دليل شامل](./aspose-pdf-net-extract-text-by-page/) -تعرف على كيفية استخراج النص بكفاءة من كل صفحة من مستند PDF باستخدام Aspose.PDF لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. +تعرف على كيفية استخراج النص بكفاءة من كل صفحة من مستند PDF باستخدام Aspose.PDF .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. ### [استخراج النص من ملفات PDF باستخدام Aspose.PDF لـ .NET](./extract-text-pdf-aspose-dotnet/) -تعلّم كيفية استخراج النص من صفحات PDF باستخدام Aspose.PDF لـ .NET من خلال هذا البرنامج التعليمي الشامل. مثالي لمعالجة البيانات وتحليلها. +تعلّم كيفية استخراج النص من صفحات PDF باستخدام Aspose.PDF .NET من خلال هذا البرنامج التعليمي الشامل. مثالي لمعالجة البيانات وتحليلها. -### [استخراج النص من ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل C# شامل](./aspose-pdf-net-text-extraction-csharp/) -تعلّم كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF لـ .NET من خلال هذا البرنامج التعليمي المفصل بلغة C#. حسّن سير عمل معالجة مستنداتك اليوم. +### [استخراج النص من ملفات PDF باستخدام Aspose.PDF .NET: دليل C# شامل](./aspose-pdf-net-text-extraction-csharp/) +تعلّم كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF .NET من خلال هذا البرنامج التعليمي المفصل بلغة C#. حسّن سير عمل معالجة مستنداتك اليوم. -### [استخراج النص من ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل كامل](./extract-text-aspose-pdf-net-guide/) -تعرّف على كيفية استخراج النصوص من ملفات PDF باستخدام Aspose.PDF لـ .NET مع هذا الدليل الشامل. أتقن استخراج النصوص والبحث عنها وتحليلها في تطبيقات .NET. +### [استخراج النص من ملفات PDF باستخدام Aspose.PDF .NET: دليل كامل](./extract-text-aspose-pdf-net-guide/) +تعرّف على كيفية استخراج النصوص من ملفات PDF باستخدام Aspose.PDF .NET مع هذا الدليل الشامل. أتقن استخراج النصوص والبحث عنها وتحليلها في تطبيقات .NET. ### [استخراج النص من صفحات محددة في ملفات PDF باستخدام Aspose.PDF .NET: دليل شامل](./extract-text-aspose-pdf-net-specific-pages/) تعرّف على كيفية استخراج نص بكفاءة من صفحات محددة من ملف PDF باستخدام Aspose.PDF .NET. اتبع هذا الدليل المفصل للحصول على نصائح الإعداد والتنفيذ والتحسين. ### [استخراج النص من تعليقات الطوابع باستخدام Aspose.PDF .NET: دليل شامل لمطوري C#](./extract-text-aspose-pdf-net-stamp-annotations/) -تعلّم كيفية استخراج النص بكفاءة من تعليقات الطوابع في مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا البرنامج التعليمي الإعداد والتنفيذ والتطبيقات العملية. +تعلّم كيفية استخراج النص بكفاءة من تعليقات الطوابع في مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا البرنامج التعليمي الإعداد والتنفيذ والتطبيقات العملية. ### [استخراج النص من أعمدة PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./pdf-column-text-extraction-aspose-dotnet/) تعرّف على كيفية استخراج النصوص بكفاءة من ملفات PDF متعددة الأعمدة في تطبيقات .NET باستخدام Aspose.PDF. اتبع هذا الدليل الشامل لإعداد وتنفيذ وتحسين استخراج النصوص من الأعمدة. @@ -87,19 +87,19 @@ تعرّف على كيفية تضمين الخطوط وتقسيمها إلى مجموعات فرعية في ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل التثبيت، واستراتيجيات تضمين الخطوط، وتحسين حجم المستند. ### [كيفية استخراج النص المميز من ملفات PDF باستخدام Aspose.PDF لـ .NET](./extract-highlighted-text-aspose-pdf-net/) -تعرّف على كيفية استخراج وعرض النصوص المميزة من مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الإعداد والتنفيذ والتطبيقات العملية. +تعرّف على كيفية استخراج وعرض النصوص المميزة من مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الإعداد والتنفيذ والتطبيقات العملية. ### [كيفية استخراج النص من مناطق محددة في ملفات PDF باستخدام Aspose.PDF لـ .NET](./extract-text-specific-region-aspose-pdf-net/) -تعرّف على كيفية استخراج النص من مناطق محددة في مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل تقنيات الإعداد والتنفيذ والتحسين. +تعرّف على كيفية استخراج النص من مناطق محددة في مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل تقنيات الإعداد والتنفيذ والتحسين. ### [كيفية تمييز النص في ملفات PDF باستخدام Aspose.PDF .NET: دليل شامل](./highlight-text-aspose-pdf-net/) تعرف على كيفية تمييز النص بكفاءة في مستندات PDF باستخدام Aspose.PDF .NET، مع إرشادات خطوة بخطوة وأمثلة التعليمات البرمجية. ### [كيفية قياس عرض السلسلة في Aspose.PDF لـ .NET: دليل حول استخدام الخط وحالة النص](./measuring-string-width-aspose-pdf-net/) -تعرّف على كيفية قياس عرض السلاسل بدقة باستخدام Aspose.PDF لـ .NET مع كائنات Font وTextState. يغطي هذا الدليل خطوات التنفيذ التفصيلية، والتطبيقات العملية، ونصائح الأداء. +تعرّف على كيفية قياس عرض السلاسل بدقة باستخدام Aspose.PDF .NET مع كائنات Font وTextState. يغطي هذا الدليل خطوات التنفيذ التفصيلية، والتطبيقات العملية، ونصائح الأداء. -### [كيفية تدوير النص في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل خطوة بخطوة](./rotate-text-aspose-pdf-net-guide/) -أتقن تدوير النص في ملفات PDF باستخدام Aspose.PDF لـ .NET باستخدام هذا الدليل الشامل. تعلّم كيفية تحسين تخطيطات مستنداتك بكفاءة باستخدام النص المُدار. +### [كيفية تدوير النص في ملفات PDF باستخدام Aspose.PDF .NET: دليل خطوة بخطوة](./rotate-text-aspose-pdf-net-guide/) +أتقن تدوير النص في ملفات PDF باستخدام Aspose.PDF .NET باستخدام هذا الدليل الشامل. تعلّم كيفية تحسين تخطيطات مستنداتك بكفاءة باستخدام النص المُدار. ### [إتقان Aspose.PDF لـ .NET: فتح مستندات PDF والبحث فيها بكفاءة](./aspose-pdf-net-open-search-pdfs/) تعرّف على كيفية استخدام Aspose.PDF لـ .NET لفتح مستندات PDF والبحث فيها. يغطي هذا الدليل الإعداد، والبحث عن نصوص في صفحات محددة، وتطبيقات عملية. @@ -108,61 +108,64 @@ تعرف على كيفية إتقان علامات التبويب المخصصة في مستندات PDF باستخدام Aspose.PDF لـ .NET، مما يعزز مهاراتك في تنسيق المستندات وعرضها. ### [إتقان تحرير نصوص PDF بكفاءة مع Aspose.PDF .NET](./aspose-pdf-net-edit-pdfs-efficiency/) -تعرّف على كيفية تحرير نصوص PDF بكفاءة باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل إعداد ملفات PDF والبحث عنها وتعديلها وحفظها باستخدام C#. +تعرّف على كيفية تحرير نصوص PDF بكفاءة باستخدام Aspose.PDF .NET. يغطي هذا الدليل إعداد ملفات PDF والبحث عنها وتعديلها وحفظها باستخدام C#. ### [استبدال الخطوط الرئيسية في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./mastering-font-substitution-aspose-pdf-net/) -تعلم كيفية التعامل بسلاسة مع استبدال الخطوط في مستندات PDF باستخدام Aspose.PDF لـ .NET. يقدم هذا البرنامج التعليمي إرشادات خطوة بخطوة لإعداد حلول فعّالة وتطبيقها. +تعلم كيفية التعامل بسلاسة مع استبدال الخطوط في مستندات PDF باستخدام Aspose.PDF .NET. يقدم هذا البرنامج التعليمي إرشادات خطوة بخطوة لإعداد حلول فعّالة وتطبيقها. ### [إتقان تقنيات استخراج ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./mastering-pdf-extraction-aspose-dotnet/) -تعلّم كيفية استخراج النصوص والصور بكفاءة من ملفات PDF باستخدام Aspose.PDF لـ .NET. اتبع هذا الدليل خطوة بخطوة لتحسين سير عمل معالجة مستنداتك. +تعلّم كيفية استخراج النصوص والصور بكفاءة من ملفات PDF باستخدام Aspose.PDF .NET. اتبع هذا الدليل خطوة بخطوة لتحسين سير عمل معالجة مستنداتك. ### [إدارة خطوط PDF الرئيسية: تعيين الخطوط الافتراضية في المستندات باستخدام Aspose.PDF لـ .NET](./master-pdf-font-management-aspose-pdf-net/) -تعرّف على كيفية تعيين الخطوط الافتراضية في ملفات PDF باستخدام Aspose.PDF لـ .NET. حدّد تناسقًا بين المستندات بسهولة. +تعرّف على كيفية تعيين الخطوط الافتراضية في ملفات PDF باستخدام Aspose.PDF .NET. حدّد تناسقًا بين المستندات بسهولة. ### [إتقان تباعد الأسطر في ملفات PDF باستخدام خطوط TrueType باستخدام Aspose.PDF لـ .NET](./optimize-pdf-line-spacing-true-type-fonts-aspose-pdf/) -تعلم كيفية تحسين تباعد الأسطر في ملفات PDF باستخدام خطوط TrueType مع Aspose.PDF لـ .NET. أنشئ مستندات احترافية بكل سهولة. +تعلم كيفية تحسين تباعد الأسطر في ملفات PDF باستخدام خطوط TrueType مع Aspose.PDF .NET. أنشئ مستندات احترافية بكل سهولة. ### [إتقان استخراج نصوص PDF في .NET باستخدام Aspose.PDF: دليل شامل](./mastering-pdf-text-extraction-dotnet-asposepdf/) -تعلّم كيفية استخراج النصوص والبحث عنها بكفاءة من ملفات PDF باستخدام Aspose.PDF لـ .NET. اتبع هذا الدليل لخطوات التطبيق العملية. +تعلّم كيفية استخراج النصوص والبحث عنها بكفاءة من ملفات PDF باستخدام Aspose.PDF .NET. اتبع هذا الدليل لخطوات التطبيق العملية. -### [إتقان استخراج نصوص PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./mastering-pdf-extraction-aspose-pdf-net-guide/) -تعلم كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF لـ .NET، حتى مع التعامل مع التنسيقات المعقدة. يغطي هذا الدليل عمليات التحميل والتحليل وتحسين عمليات الاستخراج. +### [إتقان استخراج نصوص PDF باستخدام Aspose.PDF .NET: دليل شامل](./mastering-pdf-extraction-aspose-pdf-net-guide/) +تعلم كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF .NET، حتى مع التعامل مع التنسيقات المعقدة. يغطي هذا الدليل عمليات التحميل والتحليل وتحسين عمليات الاستخراج. -### [إتقان استخراج نصوص PDF باستخدام Aspose.PDF لـ .NET: دليل المطور](./aspose-pdf-net-text-extraction-guide/) -تعرّف على كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل إعداد ميزات استخراج النصوص وتنفيذها ودمجها. +### [إتقان استخراج نصوص PDF باستخدام Aspose.PDF .NET: دليل المطور](./aspose-pdf-net-text-extraction-guide/) +تعرّف على كيفية استخراج النصوص بكفاءة من ملفات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الشامل إعداد ميزات استخراج النصوص وتنفيذها ودمجها. -### [إتقان معالجة نصوص PDF باستخدام Aspose.PDF لـ .NET: دليل شامل](./mastering-pdf-text-manipulation-aspose-dotnet/) -تعرّف على كيفية إضافة النصوص وتنسيقها في ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الإعداد والتنسيق والروابط التشعبية والتطبيقات العملية. +### [إتقان معالجة نصوص PDF باستخدام Aspose.PDF .NET: دليل شامل](./mastering-pdf-text-manipulation-aspose-dotnet/) +تعرّف على كيفية إضافة النصوص وتنسيقها في ملفات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الإعداد والتنسيق والروابط التشعبية والتطبيقات العملية. -### [إتقان معالجة نصوص PDF: تدوير النص وتخصيصه في ملفات PDF باستخدام Aspose.PDF لـ .NET](./aspose-pdf-net-create-rotate-text-pdfs/) -تعرّف على كيفية تدوير النصوص وتخصيصها بفعالية داخل مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الإعداد والتنفيذ والميزات المتقدمة. +### [إتقان معالجة نصوص PDF: تدوير النص وتخصيصه في ملفات PDF باستخدام Aspose.PDF .NET](./aspose-pdf-net-create-rotate-text-pdfs/) +تعرّف على كيفية تدوير النصوص وتخصيصها بفعالية داخل مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الإعداد والتنفيذ والميزات المتقدمة. ### [إتقان عمليات البحث عن نصوص PDF باستخدام Regex باستخدام Aspose.PDF .NET](./aspose-pdf-net-regex-text-search/) برنامج تعليمي لبرمجة Aspose.PDF Net -### [إتقان تدوير النص في ملفات PDF باستخدام Aspose.PDF لـ .NET: دليل كامل](./rotate-text-pdf-aspose-dotnet/) -تعرّف على كيفية تدوير النص في مستندات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل الإعداد، وأمثلة التعليمات البرمجية، والتطبيقات العملية. +### [إتقان تدوير النص في ملفات PDF باستخدام Aspose.PDF .NET: دليل كامل](./rotate-text-pdf-aspose-dotnet/) +تعرّف على كيفية تدوير النص في مستندات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الشامل الإعداد، وأمثلة التعليمات البرمجية، والتطبيقات العملية. -### [محاذاة النص الرئيسية في مربعات PDF العائمة باستخدام Aspose.PDF لـ .NET](./align-text-pdf-floating-boxes-aspose-pdf-net/) -تعرّف على كيفية محاذاة النصوص بدقة داخل المربعات العائمة باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل الإعداد، وتقنيات المحاذاة، ونصائح الأداء. +### [محاذاة النص الرئيسية في مربعات PDF العائمة باستخدام Aspose.PDF .NET](./align-text-pdf-floating-boxes-aspose-pdf-net/) +تعرّف على كيفية محاذاة النصوص بدقة داخل المربعات العائمة باستخدام Aspose.PDF .NET. يغطي هذا الدليل الشامل الإعداد، وتقنيات المحاذاة، ونصائح الأداء. ### [استبدال النص الرئيسي في ملفات PDF باستخدام Aspose.PDF .NET](./aspose-pdf-net-text-replacement-guide/) برنامج تعليمي لبرمجة Aspose.PDF Net -### [إتقان المسافات بين الأحرف في ملفات PDF باستخدام Aspose.PDF لـ .NET](./master-character-spacing-aspose-pdf/) -تعلّم كيفية تطبيق تباعد الأحرف بفعالية في مستندات PDF باستخدام Aspose.PDF لـ .NET. حسّن سهولة القراءة والجاذبية البصرية من خلال دروس تعليمية عملية حول TextBuilder وFragment وغيرهما. +### [إتقان المسافات بين الأحرف في ملفات PDF باستخدام Aspose.PDF .NET](./master-character-spacing-aspose-pdf/) +تعلّم كيفية تطبيق تباعد الأحرف بفعالية في مستندات PDF باستخدام Aspose.PDF .NET. حسّن سهولة القراءة والجاذبية البصرية من خلال دروس تعليمية عملية حول TextBuilder وFragment وغيرهما. -### [إتقان استخراج النصوص من ملفات PDF: دليل كامل باستخدام Aspose.PDF لـ .NET في C#](./guide-extract-text-aspose-pdf-dotnet-csharp/) -تعرّف على كيفية استخراج النصوص بسلاسة من ملفات PDF باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل الشامل الإعداد والتنفيذ وأفضل الممارسات. +### [إتقان استخراج النصوص من ملفات PDF: دليل كامل باستخدام Aspose.PDF .NET في C#](./guide-extract-text-aspose-pdf-dotnet-csharp/) +تعرّف على كيفية استخراج النصوص بسلاسة من ملفات PDF باستخدام Aspose.PDF .NET. يغطي هذا الدليل الشامل الإعداد والتنفيذ وأفضل الممارسات. ### [تحسين خطوط PDF باستخدام Aspose.PDF .NET: دليل كامل لعمليات النصوص](./optimize-pdf-fonts-aspose-pdf-net-guide/) تعرف على كيفية تحسين خطوط PDF باستخدام Aspose.PDF .NET، وقم بتبسيط مستنداتك عن طريق إزالة الخطوط غير المستخدمة واستبدالها بخط Arial Bold. -### [استبدال الخطوط في PDF باستخدام Aspose.PDF لـ .NET](./replace-fonts-pdf-aspose-dotnet-guide/) +### [استبدال الخطوط في PDF باستخدام Aspose.PDF .NET](./replace-fonts-pdf-aspose-dotnet-guide/) برنامج تعليمي لبرمجة Aspose.PDF Net ### [تنسيق النصوص في ملفات PDF المُعلَّمة باستخدام Aspose.PDF لـ .NET | دليل لإنشاء ملفات PDF سهلة الوصول وذات مظهر جمالي](./style-text-tagged-pdfs-aspose-pdf-net/) -تعرّف على كيفية تنسيق النصوص في مستندات PDF المُعلَّمة باستخدام Aspose.PDF لـ .NET. يغطي هذا الدليل التثبيت والتقنيات والتطبيقات العملية لتحسين إمكانية الوصول. +تعرّف على كيفية تنسيق النصوص في مستندات PDF المُعلَّمة باستخدام Aspose.PDF .NET. يغطي هذا الدليل التثبيت والتقنيات والتطبيقات العملية لتحسين إمكانية الوصول. + +### [كيفية تلخيص ملفات PDF باستخدام Aspose.Pdf.AI – دليل](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +تعلم كيفية تلخيص محتوى ملفات PDF باستخدام تقنية Aspose.Pdf.AI خطوة بخطوة. ## موارد إضافية diff --git a/pdf/arabic/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/arabic/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..d6e7c617a7 --- /dev/null +++ b/pdf/arabic/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-08-08 +description: كيفية تلخيص PDF باستخدام Aspose.Pdf.AI – تعلم كيفية تلخيص PDF باستخدام + الذكاء الاصطناعي، إنشاء ملخص PDF، وحفظ الملخص كملف PDF. الكود الكامل وأفضل الممارسات. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: ar +lastmod: 2026-08-08 +og_description: كيفية تلخيص ملف PDF باستخدام Aspose.Pdf.AI. يوضح لك هذا البرنامج التعليمي + كيفية تلخيص PDF باستخدام الذكاء الاصطناعي، وإنشاء ملخص PDF، وحفظ الملخص كملف PDF + في بضع أسطر من C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: كيفية تلخيص ملف PDF باستخدام Aspose.Pdf.AI – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: كيفية تلخيص PDF باستخدام Aspose.Pdf.AI – دليل +url: /ar/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية تلخيص PDF باستخدام Aspose.Pdf.AI – دليل + +إذا كنت بحاجة إلى **كيفية تلخيص PDF** بسرعة وبشكل موثوق، يمكنك ترك نموذج الذكاء الاصطناعي يتولى المهمة. يوضح لك هذا الدليل بالضبط كيفية تلخيص PDF باستخدام الذكاء الاصطناعي، وإنشاء ملخص PDF، وحفظ الملخص كملف PDF باستخدام مجموعة تطوير Aspose.Pdf.AI لـ .NET. ستحصل على مثال كامل قابل للتنفيذ وتفسير لكل سطر حتى تتمكن من تعديل الحل ليتناسب مع مشاريعك. + +يغطي الدليل: + +* تحضير مجلد المصدر ومفتاح API +* إنشاء `OpenAIClient` الذي يتواصل مع النموذج +* تكوين خيارات الملخص مثل درجة الحرارة ومسار المستند +* بناء `SummaryCopilot` واسترجاع نص الملخص بشكل غير متزامن +* حفظ الملخص المُولد مرة أخرى في ملف PDF + +لا توجد خدمات خارجية مطلوبة بخلاف نقطة نهاية OpenAI، ويعمل الكود مع .NET 6+ و Aspose.Pdf.AI 23.7 (أو أحدث). + +## المتطلبات المسبقة + +* **.NET 6 SDK** (أو أي نسخة أحدث من .NET) +* **Aspose.Pdf.AI for .NET** – تثبيت عبر NuGet: `dotnet add package Aspose.Pdf.AI` +* مفتاح **OpenAI API** مع إمكانية الوصول إلى النموذج الذي تريد استخدامه (مثال: `gpt‑4o`) +* ملف PDF تريد تلخيصه (المثال يستخدم `SampleDocument.pdf`) + +تأكد من أن المجلد الذي تحدده في `dataDirectory` موجود وأن التطبيق يمتلك أذونات القراءة/الكتابة. + +## الخطوة 1: إعداد هيكل المشروع + +أنشئ مشروعًا لتطبيق سطر الأوامر (أو دمج الكود في أي تطبيق .NET موجود). ملف `Program.cs` البسيط يبدو هكذا: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### لماذا يهم هذا الهيكل + +* **`await using`** يفرغ `OpenAIClient` تلقائيًا، مما يحرر اتصالات HTTP. +* **`Path.Combine`** يبني مسارات مستقلة عن نظام التشغيل، مما يمنع الأخطاء بين Windows و Linux. +* **Temperature** يتحكم في الإبداع؛ `0.5` يعطي ملخصًا متوازنًا وواقعيًا. +* **`GetSummaryAsync`** يُرجع نصًا عاديًا، بينما `SaveSummaryAsync` ينشئ ملف PDF صحيح يحافظ على الخطوط والتنسيق. + +## الخطوة 2: فهم خيارات الملخص + +تتيح لك الفئة `OpenAISummaryCopilotOptions` ضبط عملية التلخيص بدقة: + +| الخيار | الغرض | القيم النموذجية | +|--------|-------|----------------| +| `WithTemperature(double)` | يتحكم في العشوائية. `0.0` = حتمي، `1.0` = إبداعي جدًا. | `0.3‑0.7` للمستندات التجارية | +| `WithDocument(string)` | مسار ملف PDF المصدر. يجب أن يكون ملفًا قابلًا للقراءة. | أي مسار مطلق أو نسبي | +| `WithPrompt(string)` *(optional)* | موجه مخصص لتوجيه النموذج. | “Summarize the key findings in 150 words.” | + +إذا كان لديك **PDFs كبيرة** (أكثر من 10 ميغابايت أو عدد كبير من الصفحات)، فكر في تقسيم المستند إلى أجزاء أصغر قبل التلخيص لتجنب أخطاء حد الرموز. لا يقوم الـ SDK بالتقسيم تلقائيًا؛ يمكنك استخدام `PdfDocument` من `Aspose.Pdf` لاستخراج الصفحات وإدخالها واحدة تلو الأخرى. + +## الخطوة 3: تشغيل الكود والتحقق من النتيجة + +1. ضع `SampleDocument.pdf` داخل المجلد `Data` الذي أشرت إليه. +2. استبدل `"YOUR_API_KEY"` بمفتاح OpenAI الحقيقي الخاص بك. +3. نفّذ `dotnet run`. + +يجب أن ترى قسمين في وحدة التحكم: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +افتح `Summary_out.pdf` بأي عارض PDF – سيحتوي على نفس نص الملخص، منسقًا بخط افتراضي. ملف PDF قابل للبحث بالكامل لأن الـ SDK يدمج النص كصفحة PDF قياسية. + +## الخطوة 4: التغييرات الشائعة ومعالجة الحالات الخاصة + +### تلخيص جزء فقط من المستند + +إذا كنت بحاجة إلى **تلخيص pdf باستخدام ai** لفصل محدد، استخرج ذلك النطاق أولاً: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +ثم وجه `WithDocument` إلى `Chapter5.pdf`. + +### تعديل طول الملخص + +يمكنك التأثير على الطول بإضافة موجه مخصص: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### معالجة أخطاء API + +أخطاء الشبكة أو حدود الحصة ترفع استثناء `Aspose.Pdf.AI.Exceptions.AIException`. غلف الاستدعاء داخل كتلة `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### حفظ الملخص بتنسيق مخصص + +`SaveSummaryAsync` يكتب نصًا عاديًا. لتنسيق PDF (إضافة عنوان، رأس، أو علامة تجارية)، أنشئ `PdfDocument` جديدًا وأدرج الملخص يدويًا: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## الخطوة 5: نصائح الأداء وأفضل الممارسات + +* **إعادة استخدام `OpenAIClient`** لعدة ملخصات في نفس العملية – إنشاء العميل رخيص، لكن إعادة استخدام `HttpClient` الأساسي يقلل من استنفاد المقابس. +* **تخزين الملخص مؤقتًا** إذا لم يتغير ملف PDF المصدر؛ يمكنك حفظ النص في قاعدة بيانات وتجاوز استدعاء API + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيفية استخراج وحفظ صفحات PDF محددة باستخدام Aspose.PDF لـ .NET - دليل شامل](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [كيفية استخراج وحفظ مرفقات PDF باستخدام Aspose.PDF .NET: دليل شامل](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [كيفية تحويل HTML إلى PDF باستخدام Aspose.PDF .NET: دليل كامل](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/conversion-export/_index.md b/pdf/chinese/net/conversion-export/_index.md index 74a8429564..8f5451b7db 100644 --- a/pdf/chinese/net/conversion-export/_index.md +++ b/pdf/chinese/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF 在 .NET 中将 PDF 转换为 TIFF:分步指南](./pdf-to-tiff-conversion-aspose-pdf-net/) 学习如何使用 Aspose.PDF for .NET 将 PDF 文档转换为 TIFF 图像。掌握自定义色深和高级图像处理技术。 +### [使用 Aspose.PDF 将 PDF 保存为 HTML:分步指南](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +学习如何使用 Aspose.PDF 将 PDF 文档转换并保存为 HTML,提供完整代码示例和关键技巧。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/chinese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..ee19c94687 --- /dev/null +++ b/pdf/chinese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 在 C# 中将 PDF 保存为 HTML。了解如何将 PDF 转换为 HTML,跳过光栅图像,并处理常见的边缘情况。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: zh +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 将 PDF 保存为 HTML。本指南向您展示如何将 PDF 转换为 HTML,跳过光栅图像,并避免常见陷阱。 +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: 使用 Aspose.PDF 将 PDF 保存为 HTML – 完整 C# 教程 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: 使用 Aspose.PDF 将 PDF 保存为 HTML – 逐步指南 +url: /zh/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 PDF 保存为 HTML(使用 Aspose.PDF)—— 步骤指南 + +如果您需要 **快速将 PDF 保存为 HTML**,本教程将向您展示如何使用 Aspose.PDF for .NET 完成此操作。无论您是构建文档查看器 Web 应用,还是导出报告以实现 SEO 友好的索引,您都将看到一个完整、可运行的解决方案,它在将 PDF 转换为 HTML 的同时,提供对光栅图像的细粒度控制。 + +除了主要任务外,我们还将介绍 **aspose pdf html conversion** 选项,帮助您跳过光栅图像、调整 CSS 处理方式,并高效管理大型文档。阅读完本指南后,您将拥有一个可直接放入任何 .NET 项目的独立程序。 + +## 前置条件 + +开始之前,请确保您拥有: + +* .NET 6.0 SDK 或更高版本(代码同样适用于 .NET Core 和 .NET Framework) +* Visual Studio 2022 或任何支持 C# 的 IDE +* Aspose.PDF for .NET 授权(免费试用可用于评估) +* 一个名为 `report.pdf` 的 PDF 文件,放置在代码可引用的文件夹中 + +除 `Aspose.Pdf` 之外,无需其他 NuGet 包。 + +## 第 1 步:安装 Aspose.PDF NuGet 包 + +在项目文件夹的终端中运行: + +```bash +dotnet add package Aspose.Pdf +``` + +该包会添加 `Aspose.Pdf` 命名空间,其中包含用于 **convert pdf to html** 操作的 `Document` 类和 `HtmlSaveOptions` 类型。 + +## 第 2 步:创建控制台项目并添加 using 指令 + +如果还没有控制台应用程序,请创建一个: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +然后打开 `Program.cs`,添加所需的命名空间: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +这些指令让您能够访问核心 PDF API 以及控制 **aspose convert pdf html** 过程的 HTML 保存选项。 + +## 第 3 步:加载 PDF 文档 + +第一行代码将源 PDF 读取到 `Aspose.Pdf.Document` 对象中。该对象在内存中表示整个 PDF 文件,并提供保存、编辑和提取内容的方法。 + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*为什么重要*:一次性加载文档可以使内存使用保持可预测,尤其是对大型 PDF。如果文件未找到,Aspose 会抛出 `FileNotFoundException`,请确保路径正确。 + +## 第 4 步:配置 HTML 保存选项 + +`HtmlSaveOptions` 让您可以细致调节 PDF 的转换方式。在本教程中我们跳过光栅图像,以保持输出轻量,但如果需要也可以将模式改为 `EmbedAll`。 + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**关键点**: + +* `RasterImagesSavingMode.Skip` 告诉 Aspose 在转换过程中忽略位图图像(JPEG、PNG)。当源 PDF 包含您不需要在 HTML 中显示的扫描页时,这非常理想。 +* 如需将图像保存为单独文件,可切换为 `EmbedAll` 或 `External`。 +* 当图像以外部方式保存时,`ResourcesFolder` 属性才会生效。 + +## 第 5 步:将文档保存为 HTML + +使用已配置的选项将 HTML 文件写入磁盘。 + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +此调用完成后,`report.html` 将包含原始 PDF 的文本内容、矢量图形和布局,但不包含任何光栅图像。您可以在浏览器中打开该文件以验证结果。 + +## 预期输出 + +在 Chrome 或 Edge 中打开 `report.html` 时,您应看到: + +* 所有标题、段落和矢量形状均正确渲染。 +* 没有 `` 标签对应光栅图像(因为使用了 `Skip` 模式)。 +* 干净、最小化的 CSS,可能以内联形式或单独的样式表呈现,取决于您选择的选项。 + +如果需要确认图像已被省略,可检查页面源代码(`Ctrl+U`),您将找不到 `` 条目。 + +## 第 6 步:处理常见边缘情况 + +### 6.1 大型 PDF(> 100 MB) + +对于非常大的文件,启用流式写入以降低内存压力: + +```csharp +htmlOpts.Streaming = true; +``` + +流式写入会直接将 HTML 块写入磁盘,防止整个文档一次性占用内存。 + +### 6.2 受密码保护的 PDF + +如果源 PDF 已加密,请在保存前提供密码: + +```csharp +doc.Decrypt("yourPassword"); +``` + +未解密直接保存会抛出 `InvalidPasswordException`。 + +### 6.3 Unicode 字符 + +Aspose.PDF 会自动嵌入 Unicode 字体,但您也可以强制使用特定字体以确保渲染一致: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 为多页文档自定义文件命名 + +如果希望每个 PDF 页面生成单独的 HTML 文件,请设置: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +这会生成 `report_page_1.html`、`report_page_2.html` 等文件,适用于 Web 应用中的分页显示。 + +## 完整可运行示例 + +下面是整合所有步骤的完整程序。将其复制到 `Program.cs`,根据实际路径进行调整,然后运行 `dotnet run`。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**验证**:运行后,控制台会打印成功信息。打开生成的 HTML 文件,确认文本和矢量图形正确显示,且光栅图像已被省略。 + +## 专业技巧与常见陷阱 + +* **技巧**:如果之后需要光栅图像,可将 `RasterImagesSavingMode` 改为 `External` 并设置 `ResourcesFolder`。这会在 `images` 子文件夹中生成提取的位图。 +* **注意**:在大量依赖扫描图像的 PDF 上使用默认的 `Skip` 模式会导致这些区域出现空白。务必使用具有代表性的样本进行测试。 +* **性能提示**:在批量转换时复用同一个 `HtmlSaveOptions` 实例,可减少对象创建开销。 +* **版本检查**:本文示例适用于 Aspose.PDF for .NET 版本 23.9 及以上。早期版本的 `HtmlSaveOptions.RasterImagesSavingMode` 枚举名称可能略有不同。 + +## 结论 + +您现在已经掌握了使用 Aspose.PDF **将 PDF 保存为 HTML** 的方法,了解了如何控制光栅图像处理,并能够应对大型文件、密码保护以及每页生成 HTML 等常见挑战。此完整解决方案可让您自信地在任何 C# 应用中集成 PDF‑to‑HTML 转换。 + +### 接下来该做什么? + +* 探索 **aspose pdf html conversion**,了解字体嵌入和 CSS 定制。 +* 将此转换与 Web API 结合,实现按需提供 HTML。 +* 尝试相反方向——**convert pdf to html** 后再转回 PDF,以验证往返转换的保真度。 + +欢迎尝试各种选项,并在评论或 Aspose 论坛分享您的经验。祝编码愉快! + +## 接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步掌握 API 功能并探索项目中的替代实现方式。每篇资源均提供完整可运行的代码示例和逐步说明。 + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/chinese/net/digital-signatures/_index.md index 40a1290a4f..6960847303 100644 --- a/pdf/chinese/net/digital-signatures/_index.md +++ b/pdf/chinese/net/digital-signatures/_index.md @@ -58,12 +58,16 @@ Aspose.PDF Net 代码教程 ### [在 C# 中验证 PDF 签名 – 验证数字签名 PDF 的完整指南](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) 提供在 C# 环境下使用 Aspose.PDF 验证 PDF 数字签名的完整步骤和代码示例。 + ### [加载 PDF 文档 C# – 转换为 PDF/X‑4 并列出签名](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) 演示如何使用 Aspose.PDF for .NET 加载 PDF 文档,转换为 PDF/X‑4 并列出其中的数字签名。 ### [使用 Aspose 验证 PDF 签名并将 PDF 转换为 HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) 了解如何使用 Aspose 验证 PDF 签名并将 PDF 转换为 HTML,以实现文档的安全展示。 +### [如何使用 Aspose.PDF 验证 PDF – 在 C# 中检查 PDF 签名的有效性](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +简要说明如何在 C# 中使用 Aspose.PDF 检查 PDF 签名的有效性,确保文档完整性。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/chinese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..e872f90932 --- /dev/null +++ b/pdf/chinese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-08-08 +description: 如何使用 Aspose.PDF 验证 PDF 并验证 PDF 数字签名。请按照此分步指南快速检查 PDF 签名。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: zh +lastmod: 2026-08-08 +og_description: 如何使用 Aspose.PDF 验证 PDF。学习如何验证 PDF 数字签名并在几行 C# 代码中检查 PDF 签名的有效性。 +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: 如何验证 PDF – 使用 Aspose.PDF 在 C# 中检查 PDF 签名有效性 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: 如何使用 Aspose.PDF 验证 PDF – 在 C# 中检查 PDF 签名的有效性 +url: /zh/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Aspose.PDF 验证 PDF – 检查 PDF 签名有效性(C#) + +如果您需要 **how to validate PDF** 包含数字签名的文件,本教程将为您提供完整的解决方案。您将学习如何加载 PDF、创建证书验证器,并使用 Aspose.PDF for .NET 检查 PDF 签名的有效性。 + +验证 PDF 数字签名是合规、开票和安全文档交换的常见需求。通过本指南,您可以自信地验证已签名的 PDF 是否可信,并了解如何处理诸如缺少证书或多个签名等常见边缘情况。 + +## 前置条件 + +在开始之前,请确保您具备以下条件: + +- .NET 6.0 或更高版本已安装 +- IDE,例如 Visual Studio 2022(任何支持 C# 的编辑器均可) +- 已授权的 **Aspose.PDF for .NET** 副本(免费试用可用于评估) +- 已签名的 PDF 文件 (`signed.pdf`),以及如果签名依赖于私有 CA,则相应的受信任证书 (`trustedCertificate.pfx`) + +除 `Aspose.PDF` 外,无需其他 NuGet 包。 + +## 步骤 1:安装 Aspose.PDF + +在项目文件夹中打开终端并运行: + +```bash +dotnet add package Aspose.PDF +``` + +该命令会添加最新的 Aspose.PDF 库,其中包含后续使用的 `Document` 和 `CertificateValidator` 类。 + +## 步骤 2:加载 PDF 文档 + +Loading a PDF is the first operation you perform when you **how to load pdf** programmatically. The `Document` constructor accepts a file path, a stream, or a byte array. Using a full path keeps the example clear. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**为什么这很重要:** `Document` 对象在内存中表示整个 PDF 文件。未加载文件时,您无法访问其 `Signatures` 集合,而该集合是 **check pdf signature** 数据所必需的。 + +## 步骤 3:准备证书验证器 + +数字签名仅在签名证书链到您信任的根时才被视为可信。`CertificateValidator` 允许您将 Aspose.PDF 指向受信任的证书存储或特定的 PFX 文件。 + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +如果您的 PDF 使用 Windows 已经信任的公共 CA,则可以省略 `certPath`,并使用默认构造函数实例化 `CertificateValidator`。为内部 PKI 环境提供自定义 PFX 非常有用。 + +## 步骤 4:验证第一个数字签名 + +PDF 可能包含多个签名。为简化起见,本教程验证第一个签名 (`Signatures[0]`)。当签名在密码学上完整 **并且** 签名证书受信任时,`Validate` 方法返回 `true`。 + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**内部工作原理:** +- 该方法检查已签名内容的哈希值是否与签名值匹配。 +- 它使用提供的验证器构建证书链。 +- 如果验证器已配置相应检查,则评估吊销状态(CRL/OCSP)。 + +### 处理多个签名 + +如果您的 PDF 包含多个签名,请遍历 `Signatures` 集合: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +此模式让您在每页上 **check pdf signature** 并报告各自的结果。 + +## 步骤 5:输出验证结果 + +最后,将结果写入控制台。在生产代码中,您可能会记录结果或在签名无效时抛出异常。 + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### 预期的控制台输出 + +``` +Valid +``` + +or + +``` +Invalid +``` + +该信息反映了 `Validate` 返回的布尔值。出现 “Invalid” 结果可能表明文档被篡改、证书不受信任或签名证书已过期。 + +## 步骤 6:常见陷阱和最佳实践提示 + +### 1. 缺少受信任的证书 +如果您收到 `Invalid`,且确信签名应受信任,请确认已向 `CertificateValidator` 提供了正确的根证书。使用接受 `X509Certificate2Collection` 的重载以支持多个根证书。 + +### 2. 带有外部引用的签名 +某些签名覆盖外部内容(例如附件文件)。请确保外部资源可访问,否则哈希验证将失败。 + +### 3. 时间戳验证 +签名可能包含时间戳令牌。要验证它,请配置验证器以检查时间戳授权机构(TSA)证书: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. 大型 PDF 的性能 +加载数百页的 PDF 可能会消耗大量内存。如果只需要签名数据,请使用 `PdfFileEditor` 提取签名字典,而无需渲染页面。 + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. 线程安全 +`Document` 实例不是线程安全的。在并行验证大量 PDF 时,请为每个线程创建新的 `Document`。 + +## 完整、可运行的示例 + +以下是完整的程序示例,复制、粘贴并在更新文件路径后即可运行。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**运行程序** 会为每个签名打印一行,清晰地指示 PDF 是否通过了 **validate pdf digital signature** 检查。 + +## 结论 + +您现在已经了解 **how to validate PDF** 包含数字签名的文件,使用 Aspose.PDF for .NET。教程涵盖了加载 PDF、配置证书验证器、检查 pdf signature 有效性、处理多个签名以及排查常见问题。 + +接下来,探索相关主题,如 **how to sign PDF**、**how to add timestamp tokens** 和 **how to extract signed content**。这些扩展让您能够在 C# 中构建完整的端到端安全文档工作流。 + +--- + + +## 接下来您应该学习什么? + +以下教程覆盖了与本指南技术紧密相关的主题,每个资源都包含完整的可运行代码示例和逐步说明,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/chinese/net/document-conversion/_index.md index f2132a4a3f..16692ec925 100644 --- a/pdf/chinese/net/document-conversion/_index.md +++ b/pdf/chinese/net/document-conversion/_index.md @@ -57,6 +57,7 @@ | [XML 转 PDFSet 图像路径](./xml-to-pdfset-image-path/) 学习如何使用 Aspose.PDF for .NET 轻松将 XML 转换为 PDF。本指南将逐步指导您完成从设置到完成的整个过程。| | [XPS 转 PDF](./xps-to-pdf/) 学习如何使用 Aspose.PDF for .NET 将 XPS 文件转换为 PDF,本教程循序渐进,非常适合开发人员和文档爱好者。| | [在 C# 中将 PDF 转换为 PDF/X‑4 – 步骤详解 ASP.NET PDF 教程](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) 通过本分步指南学习如何使用 Aspose.PDF for .NET 在 C# 中将 PDF 转换为 PDF/X‑4,适用于 ASP.NET 项目。| +| [pdfx4 转换教程 – 设置 PDF 标准并使用 Aspose 转换 PDF](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | 了解如何使用 Aspose.PDF for .NET 设置 PDF/X‑4 标准并转换 PDF。| | [PDF 转 PNG 教程 – 在 C# 中将 PDF 页面转换为 PNG](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | 在本分步教程中学习如何使用 Aspose.PDF for .NET 将 PDF 页面转换为 PNG 图像。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/chinese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..a105352801 --- /dev/null +++ b/pdf/chinese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4 转换教程,展示如何将 PDF 标准设置为 PDF/X‑4 并使用 Aspose 转换 PDF,以实现可靠的格式转换。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: zh +lastmod: 2026-08-08 +og_description: pdfx4 转换教程解释如何将 PDF 标准设置为 PDF/X‑4,并使用 Aspose 在 C# 中执行可靠的 PDF 转换。 +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 转换教程 – 设置 PDF 标准并使用 Aspose 转换 PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 转换教程 – 设置 PDF 标准并使用 Aspose 转换 PDF +url: /zh/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 转换教程 – 设置 PDF 标准并使用 Aspose 转换 PDF + +如果你需要 **pdfx4 转换教程**,本指南将手把手教你如何将 PDF 标准设置为 PDF/X‑4 并使用 Aspose 完成转换。无论是准备可打印文件还是确保长期归档合规,你都将学会一个可靠的 **aspose pdf format conversion** 工作流,适用于 .NET 6 及更高版本。 + +本教程涵盖从项目搭建到处理缺失源文件或不支持特性的边缘情况。阅读完本文后,你将拥有一个完整的 C# 程序,能够生成符合 PDF/X‑4 标准的文件,供后续工作流使用。 + +## 前置条件 + +开始之前,请确保你已具备以下条件: + +- 已安装 .NET 6 SDK 或更高版本([download here](https://dotnet.microsoft.com/download)) +- 有效的 Aspose.PDF for .NET 许可证(免费试用版可用于测试) +- Visual Studio 2022、VS Code 或任意支持 .NET 开发的 IDE +- 一个需要转换的源 PDF 文件(放置在已知文件夹中) + +这些要求可确保代码在无需额外配置的情况下运行。 + +## 第一步:创建新的 .NET 控制台项目 + +打开终端,运行以下命令以创建名为 `PdfX4Converter` 的控制台应用: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +添加 Aspose.PDF NuGet 包: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` 包提供了 `Document` 类和 `PdfFormatConversionOptions`,用于 **convert pdf pdfx4** 操作。 + +## 第二步:编写转换代码 + +打开 `Program.cs`(如果使用新的顶层语句,则同样是 `Program.cs`),将其内容替换为下面的完整示例。代码演示了如何 **set pdf standard** 为 PDF/X‑4,执行转换,并包含常见陷阱的错误处理。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### 各部分意义说明 + +- **参数校验** 可防止用户忘记提供文件路径时程序崩溃。 +- **`Document` 加载** 若源 PDF 缺失或损坏会抛出明确异常,这对实现稳健的 **convert pdf using aspose** 体验至关重要。 +- **`PdfFormatConversionOptions`** 正是设置 **set pdf standard** 的位置。将 `PdfStandard.PdfX4` 赋值后,Aspose 会自动调整色彩空间、嵌入必需字体并写入 PDF/X‑4 所需的元数据。 +- **`FontEmbeddingMode.EmbedAll`** 确保源 PDF 中使用的每一种字体都被嵌入,这是打印就绪 PDF 的常见要求。 +- **`doc.Convert`** 执行实际的 **aspose pdf format conversion**。该方法一次性写入新文件,简化工作流。 + +## 第三步:运行转换器 + +构建项目并使用源路径和目标路径执行: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +如果一切正常,控制台会输出: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +此时你可以在任意支持 PDF/X‑4 的 PDF 阅读器(如 Adobe Acrobat Pro)中打开 `output_pdfx4.pdf`,并通过 *文件 → 属性 → 标准* 检查合规性。 + +## 第四步:验证 PDF/X‑4 合规性(可选) + +在生产流水线中,你可能希望以编程方式验证输出。Aspose 提供了 `PdfComplianceChecker` 类(位于 `Aspose.Pdf` 包中),使用方式如下: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +在转换后运行此代码段,可得到明确的通过/失败结果,便于在 CI/CD 流水线中自动化检测。 + +## 第五步:常见陷阱与最佳实践提示 + +| 问题 | 产生原因 | 规避方法 | +|------|----------|----------| +| 源 PDF 中缺失字体 | 字体被引用但未嵌入,导致转换时出现警告 | 如上所示使用 `FontEmbeddingMode.EmbedAll` | +| 源 PDF 包含 PDF/X‑4 不允许的透明对象 | PDF/X‑4 禁止某些透明混合模式 | 在转换前使用 `doc.ProcessTransparentObjects()` 预处理 PDF | +| 大文件导致 OutOfMemoryException | 整个文档一次性加载到内存 | 使用 `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` 进行流式读取 | +| 未应用许可证 | 试用版会添加水印 | 在使用任何 Aspose API 前调用 `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` | + +遵循这些技巧,可确保在生产环境中获得顺畅的 **convert pdf pdfx4** 体验。 + +## 第六步:扩展教程 + +掌握了基础的 **pdfx4 conversion tutorial** 后,你可以进一步探索: + +- **批量转换**:遍历文件夹中的 PDF 并逐个转换为 PDF/X‑4。 +- **元数据注入**:添加特定印刷厂要求的 XMP 元数据。 +- **色彩配置管理**:在转换前使用 `doc.ColorSpace = ColorSpace.DeviceRGB;` 附加 ICC 配置文件。 + +所有这些扩展都基于本文展示的 **aspose pdf format conversion** 基础。 + +## 结论 + +本 **pdfx4 conversion tutorial** 向你展示了如何 **set pdf standard** 为 PDF/X‑4,执行可靠的 **convert pdf using Aspose**,并验证结果。现在,你拥有一个完整、可运行的 C# 程序,可集成到更大的文档处理流水线,或作为独立工具使用。尝试批量处理、元数据管理或其他 PDF 标准(如 PDF/A‑2b、PDF/UA),进一步提升在 **aspose pdf format conversion** 方面的专业能力。 + +祝编码愉快,享受 PDF/X‑4 合规输出带来的信心! + +## 接下来你应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助你在已有技巧的基础上进一步深入。每篇资源都提供完整可运行的代码示例以及逐步解释,助你掌握更多 API 功能并探索替代实现方案。 + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/chinese/net/document-creation/_index.md b/pdf/chinese/net/document-creation/_index.md index 936323faf5..969bde5a8d 100644 --- a/pdf/chinese/net/document-creation/_index.md +++ b/pdf/chinese/net/document-creation/_index.md @@ -79,6 +79,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF 创建 PDF 文档:分步指南](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) 学习如何使用 Aspose.PDF 在 .NET 中一步步创建 PDF 文档,涵盖基本设置、页面添加和内容写入。 +### [使用 Aspose.PDF 在 C# 中创建 PDF 文档](./create-pdf-document-in-c-with-aspose-pdf/) +使用 Aspose.PDF 在 C# 中创建 PDF 文档的完整指南。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/chinese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..b47e685346 --- /dev/null +++ b/pdf/chinese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.Pdf 在 C# 中创建 PDF 文档。学习如何向 PDF 添加空白页、添加段落,以及使用精确坐标定位文本。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: zh +lastmod: 2026-08-08 +og_description: 在 C# 中快速创建 PDF 文档。本教程展示了如何使用 Aspose.Pdf 添加空白页 PDF、向 PDF 添加段落以及在 PDF + 中定位文本。 +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: 使用 Aspose.Pdf 在 C# 中创建 PDF 文档 – 完整指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: 使用 Aspose.Pdf 在 C# 中创建 PDF 文档 +url: /zh/net/document-creation/create-pdf-document-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 文档**,本指南将准确展示如何操作。使用 Aspose.Pdf for .NET,您可以添加空白 PDF 页面、向 PDF 插入段落,并以像素级精确度定位 PDF 中的文本——只需几行 C# 代码。 + +您将在本教程结束时得到一个功能完整的 PDF 文件,其中包含您指定坐标位置的注释。无需外部工具,无需手动编辑——只需干净、可重复使用的代码,即可放入任何 .NET 项目中。 + +## 您将学习 + +* 如何使用 Aspose.Pdf **创建 pdf 文档**。 +* 正确的**添加空白页面 pdf**方式以及为何必须先有页面才能添加内容。 +* 如何**向 pdf 添加段落**并附加自定义标签(便于后续提取或样式化)。 +* 使用 `Position` 类**在 pdf 中定位文本**的技巧。 +* 如何将结果保存到磁盘并验证输出。 + +**先决条件** + +* .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.7+)。 +* 有效的 Aspose.Pdf for .NET 许可证或免费评估密钥。 +* 如 Visual Studio 2022 或带有 C# 扩展的 VS Code 等 IDE。 + +> **专业提示:** 如果使用免费评估版,生成的 PDF 将包含小水印。注册许可证即可移除水印。 + +## 如何使用 Aspose.Pdf 创建 pdf 文档 + +第一步是实例化 `Document` 类。该对象代表整个 PDF 文件,并让您访问页面、资源以及保存选项。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +创建文档**不会**立即写入磁盘;它仅准备一个可供操作的内存表示。这种方式保持 API 高速且内存高效。 + +## 使用 Aspose.Pdf 添加空白页面 pdf + +在放置任何内容之前,PDF 必须至少包含一页。添加空白页面只需一次方法调用: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` 方法会创建一个默认尺寸(A4)和方向(纵向)的页面。如果需要其他尺寸,请向 `Add()` 传递 `PageSize` 实例。 + +## 向 pdf 添加段落并设置注释 + +现在页面已经存在,您可以创建一个 `Paragraph` 对象来保存可见文本。段落还可以携带自定义标签,这在后续需要以编程方式定位或样式化元素时非常方便。 + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### 为什么使用标签? + +标签是随 PDF 元素一起携带的元数据。它们可以稍后通过 `Document.FindObject()` 查询,或被依赖标签进行可访问性或索引的下游 PDF 处理器使用。 + +## 使用精确坐标在 pdf 中定位文本 + +段落的默认放置位置是页面边距的左上角。要将文本移动到精确位置,请在段落的标签上设置 `Position` 属性: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +坐标以点为单位(1 point = 1/72 inch)。原点 (0,0) 位于页面左下角,这与大多数 PDF 渲染引擎保持一致。根据布局需求调整 `X` 和 `Y` 值。 + +定位后,将段落添加到页面的集合中: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## 保存 pdf 文档 + +最后,将内存中的 PDF 写入文件。您可以指定输出路径、格式,甚至加密选项。 + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +程序结束后,`output.pdf` 包含单页,文本 **Important note** 位于右上角附近 (X = 50, Y = 750)。使用任意 PDF 查看器打开文件即可验证位置。 + +![使用 C# Aspose.Pdf 创建的生成 PDF 文档,显示定位的注释](https://example.com/images/generated-pdf.png) + +*图片 alt 文本:使用 C# Aspose.Pdf 创建的生成 PDF 文档,显示定位的注释*(包含主要关键词)。 + +## 完整、可运行的示例 + +将所有代码片段组合在一起,下面是一个完整的控制台应用程序,您可以复制、构建并运行: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**预期输出** 当您运行程序时: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +打开 `output.pdf` 可看到单页,文本 **Important note** 已定位在您指定的坐标处。 + +## 常见变体和边缘情况 + +| 场景 | 需要更改的内容 | 原因 | +|----------|----------------|----------------| +| **不同的页面尺寸** | `pdfDocument.Pages.Add(PageSize.A5)` | 较小的页面可减小文件大小并适配移动屏幕。 | +| **多个注释** | 循环遍历字符串集合,为每个字符串创建 `Paragraph`,并递增 `Y` 坐标。 | 允许批量生成项目符号样式的注释。 | +| **Unicode 字符** | 确保源文件保存为 UTF-8 并设置 `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf 开箱即支持 Unicode,但文件编码必须匹配。 | +| **受密码保护的 PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | 为机密注释添加安全保护。 | +| **高分辨率输出** | 在添加内容之前将 `pdfDocument.PageInfo.Width` 和 `Height` 设置为更大值。 | 适用于打印大幅 PDF。 | + +## 生产环境使用技巧 + +* **在单次请求中生成多个 PDF 时复用 `Document` 实例**,以降低 GC 压力。 +* **如果在循环中创建大量文档,请释放对象**(`pdfDocument.Dispose()`)。 +* **验证坐标**:`Y` 值不能超过页面高度,否则文本会被裁剪。 +* **使用 `TextFragmentAbsorber`** 在需要读取内容时通过标签 (`/P`) 提取注释。 + +## 结论 + +您现在已经掌握了使用 Aspose.Pdf **创建 pdf 文档**、**添加空白页面 pdf**、**向 pdf 添加段落**、**添加注释 pdf**以及**精确定位 pdf 中文本**的方法。完整示例展示了一个干净、可重复的工作流,您可以将其扩展用于发票、报告或任何文档自动化场景。 + +接下来,探索诸如 **向 pdf 添加图像**、**使用 Aspose.Pdf 构建表格** 或 **应用数字签名** 等相关主题。这些内容都基于本指南中的核心概念,您将能够应对更复杂的 PDF 生成任务。 + +祝编码愉快! + +## 您接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您在自己的项目中进一步掌握 API 功能并探索替代实现方式,每篇资源均提供完整可运行的代码示例和逐步说明。 + +- [使用 Aspose.PDF 创建 PDF 文档 – 添加页面、形状并保存](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [如何使用 Aspose.PDF for .NET 在 PDF 末尾添加空白页 | 步骤指南](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [如何使用 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/chinese/net/images-graphics/_index.md b/pdf/chinese/net/images-graphics/_index.md index d98f8fdd2d..2a6e64b116 100644 --- a/pdf/chinese/net/images-graphics/_index.md +++ b/pdf/chinese/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF .NET 在 PDF 中绘制透明形状](./draw-transparent-shapes-aspose-pdf-net/) Aspose.PDF Net 代码教程 +### [在 C# 中使用 Aspose.PDF 设置 PDF 不透明度 – 完整指南](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +了解如何在 PDF 中设置整体或特定对象的不透明度,以实现视觉效果。 + ### [使用 Aspose.PDF for .NET 实现高效的 PDF 图像识别](./master-image-identification-aspose-pdf-net/) 学习如何使用 Aspose.PDF for .NET 识别 PDF 中的灰度和 RGB 图像。本教程涵盖安装、图像提取和性能技巧。 diff --git a/pdf/chinese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/chinese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..3181efe19d --- /dev/null +++ b/pdf/chinese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 在 C# 中设置 PDF 不透明度——学习如何通过几行代码调整描边和填充的透明度。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: zh +lastmod: 2026-08-08 +og_description: 在 C# 中快速设置 PDF 不透明度。本指南展示如何使用 Aspose.PDF 的图形状态 API 修改描边和填充透明度。 +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: 使用 Aspose.PDF 在 C# 中设置 PDF 透明度 – 步骤教程 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: 使用 Aspose.PDF 在 C# 中设置 PDF 不透明度 – 完整指南 +url: /zh/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中使用 Aspose.PDF 设置 PDF 不透明度 – 完整指南 + +如果您需要为特定绘图操作 **设置 PDF 不透明度**,本教程将向您展示如何使用 Aspose.PDF for .NET 完成此操作。无论是创建水印、半透明叠加层还是自定义图形,您都将学习到简洁、可投入生产的实现方式。 + +在以下章节中,我们将从加载 PDF、编辑其图形状态、添加新的不透明度定义,到保存结果,逐步覆盖全部内容。无需外部文档——只需下面的代码和每一步的简要说明。 + +## 前置条件 + +在开始之前,请确保您具备: + +* .NET 6.0 或更高(代码同样适用于 .NET Framework 4.7+) +* 有效的 Aspose.PDF for .NET 许可证(免费试用版可用于评估) +* 一个位于可读写文件夹中的输入 PDF 文件(`input.pdf`) +* Visual Studio 2022 或您喜欢的任何 C# IDE + +## 第一步 – 加载 PDF 文档(Aspose.PDF for .NET) + +首要任务是打开已有的 PDF。Aspose.PDF 使用 `Document` 类来表示 PDF 文件,您可以通过它完整访问页面、资源以及底层对象。 + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*为什么这很重要*:加载文档会在内存中创建一个模型,您可以安全地对其进行修改。`using` 语句确保在完成后自动释放文件句柄。 + +## 第2步 – 获取要编辑的第一页 + +不透明度是通过页面的资源字典逐页定义的。这里我们以第一页为例,您也可以遍历 `doc.Pages` 进行批量操作。 + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*为什么这很重要*:每个页面都有自己的 `Resources` 集合,存放图形状态、字体、图像等。修改正确的页面可确保不透明度效果出现在预期位置。 + +## 第3步 – 打开页面的资源字典进行编辑 + +Aspose.PDF 提供了 `DictionaryEditor` 辅助类,用于在不破坏文件结构的前提下操作底层 PDF 字典。 + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*为什么这很重要*:直接编辑 PDF 的 COS(Content Object System)字典是注入自定义图形状态的唯一途径。编辑器在抽象低层语法的同时保持 PDF 的有效性。 + +## 第4步 – 检索现有的 ExtGState 字典 + +**ExtGState**(外部图形状态)字典保存不透明度、混合模式、线宽等信息。如果该字典不存在,Aspose.PDF 在您添加新条目时会自动创建。 + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*为什么这很重要*:没有 `ExtGState` 条目,后续在页面内容流中就无法引用自定义不透明度。本步骤确保容器已存在。 + +## 第5步 – 创建具有所需不透明度的新图形状态 + +图形状态是一组参数的集合。针对不透明度,我们设置 `CA`(描边不透明度)和 `ca`(填充不透明度),并设置 `BM`(混合模式)来控制透明像素与底层内容的交互方式。 + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*为什么这很重要*:`CA` 和 `ca` 的取值范围为 0(完全透明)到 1(完全不透明)。根据需要调整这些数值即可实现所需的视觉效果。混合模式 `"Normal"` 是最常用的,您也可以尝试 `"Multiply"` 或 `"Screen"` 以获得艺术效果。 + +## 第6步 – 在 ExtGState 集合中注册新的图形状态 + +每个图形状态必须拥有唯一名称(例如 `GS0`)。我们将字典添加到 `ExtGState` 集合中,然后更新页面的资源。 + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*为什么这很重要*:通过为状态命名(`GS0`),您可以在页面内容流中使用 `gs` 操作符引用它。如果需要多个不透明度级别,可创建额外条目(`GS1`、`GS2`,…)。 + +## 第7步 – 将图形状态应用于绘图命令(可选) + +如果希望立即将不透明度应用到已有内容,需要编辑页面的内容流。下面的示例使用新建的状态绘制一个半透明矩形。 + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*为什么这很重要*:`gs` 操作符(SetGraphicsState)指示 PDF 渲染器在后续绘图命令中使用 `GS0` 中定义的不透明度值。`grestore`/`gsave` 对确保其他页面元素不受影响。 + +## 第8步 – 保存修改后的 PDF + +最后,将更新后的文档写回磁盘。 + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*为什么这很重要*:保存操作会将所有更改固化,嵌入新的图形状态,并生成任何阅读器(Adobe Acrobat、Chrome 等)都能正确显示透明效果的 PDF。 + +### 预期结果 + +在 PDF 查看器中打开 `output.pdf`。您应看到一个红色矩形,其轮廓不透明度为 80%,填充不透明度为 40%,并与背景内容平滑混合。页面其余部分保持不变。 + +## 常见变体和边缘情况 + +| 情况 | 需要更改的内容 | 原因 | +|-----------|----------------|--------| +| **多个不透明度级别** | 创建额外的图形状态(`GS1`、`GS2`,…),使用不同的 `CA`/`ca` 值,并在需要时引用它们 | 允许对不同元素进行细粒度控制 | +| **不同的混合模式** | 在 `BM` 条目中使用 `"Multiply"`、`"Screen"`、`"Overlay"` 等,而不是 `"Normal"` | 产生艺术化的混合效果 | +| **应用于现有内容流** | 在您想要影响的特定绘图操作符之前插入 `SetGraphicsState` | 防止对不相关对象产生不期望的不透明度 | +| **大型 PDF** | 在 `foreach (Page p in doc.Pages)` 循环中处理页面,以避免一次性将整个文件加载到内存中 | 提升性能并降低内存压力 | +| **不存在 ExtGState** | 第 4 步的代码已在缺失时创建该字典,无需额外处理 | 确保字典存在 | + +### 专业提示 + +当您添加大量自定义图形状态时,请保持命名一致(`GS0`、`GS1`、…),并在注释块中记录每个状态的用途。这有助于后期维护,尤其是在协作项目中。 + +## 完整、可运行的示例 + +下面是完整的程序代码,您可以直接复制、粘贴并运行。它包含所有步骤、必要的 `using` 指令以及注释。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +运行程序, + +## 接下来您应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步掌握 API 功能并探索在项目中的其他实现方式。每个资源都提供完整的可运行代码示例和逐步解释。 + +- [在 PDF 中使用 Aspose.PDF for .NET 设置图像背景:全面指南](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [如何使用 Aspose.PDF for .NET 在 PDF 中创建虚线:分步指南](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [如何使用 Aspose.PDF for .NET 定制 PDF:设置页面边距并绘制线条](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..0e85dc6b3d 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 并添加表单字段和页面。| +| [使用 Aspose.PDF 保存 PDF 文档 – 完整指南](./save-pdf-document-with-aspose-pdf-complete-guide/) 本完整指南演示如何使用 Aspose.PDF for .NET 保存 PDF 文档,包括示例代码和最佳实践。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/chinese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..85a2573cb7 --- /dev/null +++ b/pdf/chinese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 保存 PDF 文档,学习如何添加 PDF 页面、填充 PDF 表单字段,以及在单个教程中创建带有表单字段的 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: zh +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 保存 PDF 文档,了解如何添加 PDF 页面、填充 PDF 表单字段,以及快速可靠地创建带表单字段的 + PDF。 +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: 使用 Aspose.PDF 保存 PDF 文档 – 步骤指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: 使用 Aspose.PDF 保存 PDF 文档 – 完整指南 +url: /zh/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose.PDF 保存 PDF 文档 – 完整指南 + +如果您需要 **保存 PDF 文档**,其中包含交互式表单字段,本教程将向您展示具体步骤。您将看到如何添加 PDF 页面、创建 PDF 表单以及填充 PDF 表单字段——全部使用 Aspose.PDF for .NET。 + +在下面的章节中,您将学习: + +* 向新 PDF 添加多个页面, +* 在第一页创建文本框表单字段, +* 在第二页为同一字段放置小部件注释, +* 设置字段的值(填充 PDF 表单字段), +* 最后 **保存 PDF 文档** 到磁盘。 + +无需任何外部工具;完整的可运行代码已包含在内。 + +## 前置条件 + +* .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.7.2+)。 +* 有效的 Aspose.PDF for .NET 许可证或免费评估密钥。 +* Visual Studio 2022(或任何 C# IDE)。 + +添加 NuGet 包: + +```bash +dotnet add package Aspose.PDF +``` + +## 如何添加 PDF 页面 + +第一步是创建一个空的 PDF 并添加所需的页面。在定义表单字段之前先添加页面,可确保布局坐标的准确性。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*为什么这很重要:* 每个 `Page` 对象代表一个可打印的画布。提前添加页面后,您可以在后续定位表单元素时引用它们。 + +## 如何使用 Aspose.PDF 创建 PDF 表单 + +PDF 表单由 **字段定义**(逻辑容器)和一个或多个 **小部件注释**(可视表现)组成。示例在第一页创建了一个名为 **Comments** 的 `TextBoxField`。 + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*为什么这很重要:* `Rectangle` 坐标以点为单位(1 pt = 1/72 in)。根据您的设计调整这些数值。 + +## 填充 PDF 表单字段 + +您可以在文档保存之前以编程方式设置字段的值。这就是 **填充 PDF 表单字段** 的核心。 + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +如果您需要稍后再填充字段(例如来自用户输入),只需在调用 `Save` 之前将新字符串赋给 `commentsField.Value` 即可。 + +## 在第二页为同一字段添加小部件注释 + +小部件注释使表单字段在页面上可见。通过添加第二个小部件,同一逻辑字段会出现在两页上,演示了跨页 **创建带表单字段的 PDF**。 + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*为什么这很重要:* `Widgets` 集合可以容纳任意数量的可视表示。用户可以在任意页面与字段交互,输入的值会保持同步。 + +## 将字段附加到第一页的注释 + +必须将表单字段添加到页面的注释集合中,PDF 查看器才能渲染它们。 + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## 保存 PDF 文档 + +现在表单已完整定义,您可以将 **保存 PDF 文档** 到任意位置。 + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +当您在 Adobe Acrobat Reader 或任何 PDF 查看器中打开 `output.pdf` 时,会看到第 1 页的文本框以及第 2 页对应的文本框。对任意一个框进行输入都会更新同一个底层字段。 + +## 完整、可运行的示例 + +下面是完整的程序代码,您可以直接复制粘贴到控制台应用程序中。它可以编译并生成本文描述的 PDF,无需任何修改。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**预期输出:** 一个名为 `output.pdf` 的文件,包含两页。第 1 页显示坐标为 (100, 600) 的标注为 “Comments” 的文本框。第 2 页在 (100, 400) 处显示相同字段。字段预先填充为 “Enter your feedback here”。在任意页面修改文本后再次保存文档,值会保持同步。 + +## 常见问题与边缘情况处理 + +| Question | Answer | +|----------|--------| +| *Can I add more than one widget for the same field?* | Yes. Append additional `WidgetAnnotation` objects to `commentsField.Widgets`. Each widget can be placed on any page. | +| *What if I need to set the field’s appearance (font, border, background)?* | Use `commentsField.DefaultAppearance` to specify a font and color, and set `commentsField.Border` properties for line style. | +| *How do I make the field read‑only?* | Set `commentsField.ReadOnly = true;`. The field will still display its value but cannot be edited by the user. | +| *Is it possible to populate the field after the PDF is created?* | Yes. Load the saved PDF with `new Document("output.pdf")`, locate the field via `pdfDocument.Form["Comments"]`, assign a new `Value`, and call `Save` again. | +| *What if the PDF must conform to PDF/A for archiving?* | After building the document, call `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` before saving. | + +## 来自实战的技巧 + +* **Pro tip:** Keep the logical field name short and unique; it’s the identifier you’ll use when programmatically filling the form later. +* **Watch out for:** Overlapping widget rectangles. Overlaps cause rendering artifacts in some viewers. +* **Performance note:** Adding many pages or widgets in a tight loop can be optimized by reusing a single `Rectangle` instance and only changing its coordinates. + +## 结论 + +您现在已经掌握了如何 **保存 PDF 文档**(其中包含完整功能的表单),如何 **填充 PDF 表单字段**,以及如何使用 Aspose.PDF for .NET **添加 PDF 页面** 和 **创建带表单字段的 PDF**。完整示例展示了从文档创建到最终保存的全流程。 + +接下来,您可以探索诸如 **添加复选框**、**创建下拉列表** 或 **将表单扁平化**(用于只读分发)等相关主题。所有这些都基于本指南中讲解的相同原理,帮助您进一步提升 PDF 自动化能力。 + +祝编码愉快! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,构建在本指南演示的技巧之上。每篇资源都提供完整的可运行代码示例以及逐步解释,帮助您掌握更多 API 功能,并在自己的项目中探索替代实现方案。 + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/chinese/net/programming-with-pdf-pages/_index.md index 13803fc76d..429e9dee49 100644 --- a/pdf/chinese/net/programming-with-pdf-pages/_index.md +++ b/pdf/chinese/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Aspose.PDF for .NET 的“使用 PDF 页面进行编程”文档提供了分步 | [更新 PDF 页面尺寸](./update-dimensions/) 通过这份全面的分步指南,了解如何使用 Aspose.PDF for .NET 轻松更新 PDF 页面尺寸。| | [缩放至 PDF 文件中的页面内容](./zoom-to-page-contents/) 在本指南中学习如何使用 Aspose.PDF for .NET 缩放 PDF 文件中的页面内容。根据您的特定需求增强您的 PDF 文档。| | [使用 C# 为 PDF 添加页码 – 完整分步指南](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) 使用 Aspose.PDF for .NET 和 C# 为 PDF 添加页码的完整分步指南,易于实现。| +| [使用 Aspose 为 PDF 添加 Bates 编号 – 完整分步指南](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) 使用 Aspose.PDF for .NET 为 PDF 文档添加 Bates 编号的完整分步指南,易于实现。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/chinese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..6e2cf44c5b --- /dev/null +++ b/pdf/chinese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.Pdf 在 C# 中为 PDF 添加 Bates 编号。本教程还展示了如何添加空白页 PDF 并以编程方式生成 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: zh +lastmod: 2026-08-08 +og_description: 使用 Aspose.Pdf 在 C# 中为 PDF 添加 Bates 编号。学习如何添加空白页 PDF、以编程方式生成 PDF,并在几分钟内保存最终文档。 +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: 使用 Aspose 为 PDF 添加贝茨编号 – 完整 C# 指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: 使用 Aspose 为 PDF 添加贝茨编号 – 步骤指南 +url: /zh/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose 为 PDF 添加 Bates 编号 – 步骤指南 + +一旦了解核心步骤,使用 Aspose.Pdf 为 PDF 添加 Bates 编号就非常简单。如果你还需要添加空白页 PDF 或以编程方式生成 PDF,本指南将涵盖所有必要内容。 + +在本教程中,你将: + +* 从头创建一个新的 PDF 文档。 +* 添加一个将承载 Bates 编号的空白页 PDF。 +* 使用自定义前缀配置 Bates 编号工件。 +* 保存 PDF,使编号显示在生成的文件中。 + +完成后,你将拥有一个完整的 C# 控制台应用程序,生成的 PDF 将包含类似 **CASE‑1000**、**CASE‑1001**、… 的 Bates 编号——这是法律和电子发现工作流中的常见需求。 + +## 前置条件 + +* .NET 6.0 SDK 或更高版本(代码同样适用于 .NET Framework 4.8)。 +* Visual Studio 2022 或任意支持 C# 的 IDE。 +* 有效的 Aspose.Pdf for .NET 许可证(或免费评估密钥)。 +* 对 C# 语法有基本了解。 + +> **专业提示:** 如果在没有许可证的情况下运行代码,Aspose 会在输出的 PDF 上添加一个小水印。 + +## 步骤 1:设置项目并导入 Aspose.Pdf + +创建一个新的控制台项目并添加 Aspose.Pdf NuGet 包: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +示例所需的 `using` 指令如下: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +这些命名空间为你提供对后续使用的 `Document`、`Page` 和 `BatesNumberingArtifact` 类的访问权限。 + +## 步骤 2:添加空白页 PDF + +Bates 编号必须附加到页面上,因此我们首先创建一个将接收编号工件的空白页。 + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` 类代表整个 PDF 文件,而 `Pages.Add()` 会在文档的页面集合末尾插入一个新的空白页。由于文档最初为空,此调用也会创建第一页面。 + +## 步骤 3:配置 Bates 编号工件 + +现在我们定义 Bates 编号的显示方式。`BatesNumberingArtifact` 允许你设置起始编号、前缀、后缀以及格式选项。 + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**为什么重要:** +将 `StartNumber` 设置为 **1000** 符合典型的法律案件文件惯例。`Prefix` 确保每个编号显示为 **CASE‑1000**、**CASE‑1001**、…,便于搜索和排序。 + +## 步骤 4:将工件附加到页面 + +必须将工件添加到页面的 `Artifacts` 集合中,这样 Aspose 在保存时会在每页上渲染它。 + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +当文档保存时,Aspose 会自动在所有页面上重复该工件,并为每个后续页面递增编号。 + +## 步骤 5:(可选)添加更多页面 + +如果需要更多页面,只需重复 `pdfDocument.Pages.Add()`。在上一步中附加的 Bates 编号工件会自动出现在每个新页面上。 + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## 步骤 6:保存 PDF – 以编程方式生成 PDF + +最后,将文档持久化到磁盘。此时 Bates 编号会被渲染到页面上。 + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**预期结果:** +打开 *BatesNumberedDocument.pdf*,你会看到一个三页的 PDF。每页右下角显示 Bates 编号: + +* 第 1 页 → **CASE‑1000** +* 第 2 页 → **CASE‑1001** +* 第 3 页 → **CASE‑1002** + +由于工件已附加到页面集合,编号会自动递增。 + +## 完整、可运行的示例 + +将所有内容整合在一起,下面是一个完整的控制台程序,你可以复制、粘贴并运行: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +使用 `dotnet run` 运行程序。执行完毕后,在桌面上找到生成的文件并验证 Bates 编号。 + +![添加 Bates 编号 PDF 示例](/images/bates-numbering.png "添加 Bates 编号 PDF 示例") + +## 常见问题与边缘情况 + +### 如果需要不同的字体或位置怎么办? + +`BatesNumberingArtifact` 提供了 `FontSize`、`FontColor`、`HorizontalAlignment` 和 `VerticalAlignment` 等属性。例如: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### 如何排除特定页面的编号? + +为需要编号的页面创建单独的 `BatesNumberingArtifact`,仅将其添加到这些页面。未附加工件的页面将保持不编号。 + +### 这能用于已有的 PDF 吗? + +可以。将 `new Document()` 替换为加载已有文件的方式: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +然后将工件附加到目标页面并保存。 + +## 结论 + +现在你已经掌握了如何使用 Aspose.Pdf **为 PDF 添加 Bates 编号**、**添加空白页 PDF**,以及 **以编程方式生成 PDF** 的完整、可复用的 C# 解决方案。该方法适用于任意页数、自定义前缀和样式选项,让你对最终文档拥有完整控制权。 + +接下来你可以探索: + +* 使用 **create pdf as + + +## 接下来该学习什么? + +以下教程涵盖了与本指南技术紧密相关的主题,帮助你进一步掌握 API 功能并在项目中探索替代实现方式,每篇资源均提供完整的可运行代码示例和逐步解释。 + +- [如何使用 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-empty-page-end-pdf-aspose-pdf-net/) +- [使用 Aspose.PDF 创建 PDF 文档 – 添加页面、形状并保存](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 1000db8136..39f8ec04a6 100644 --- a/pdf/chinese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/chinese/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ | [使用签名字段通过智能卡签名](./sign-with-smart-card-using-signature-field/) 了解如何使用 Aspose.PDF for .NET 的智能卡安全地签署 PDF。按照我们的分步指南,轻松实现。| | [在 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 文件,分步指南帮助您恢复文档完整性。| +| [使用 Aspose.PDF 在 C# 中验证 PDF 签名 – 完整指南](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) 了解如何使用 Aspose.PDF for .NET 在 C# 中验证 PDF 签名并检查其完整性。分步指南帮助您确保文档安全。| +| [PDF 签名教程:使用 Aspose.PDF 验证 PDF 数字签名](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) 了解如何使用 Aspose.PDF for .NET 验证 PDF 文档的数字签名,确保其完整性和真实性。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/chinese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/chinese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..1f5b2416d6 --- /dev/null +++ b/pdf/chinese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,214 @@ +--- +category: general +date: 2026-08-08 +description: PDF签名教程,展示如何使用签名验证选项和 C# 代码验证 PDF 数字签名——快速一步步指南 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: zh +lastmod: 2026-08-08 +og_description: PDF签名教程将指导您使用 Aspose.PDF 验证 PDF 数字签名。了解如何配置签名验证选项并检查结果。 +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF签名教程 – 在 C# 中验证 PDF 数字签名 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: PDF签名教程:使用Aspose.PDF验证PDF数字签名 +url: /zh/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF签名教程 – 在C#中验证PDF数字签名 + +如果您需要一个**pdf signature tutorial**,能够准确展示如何验证PDF数字签名,本指南将满足您的需求。您将看到如何加载已签名的PDF,配置**signature validation options**,执行验证,并显示结果——全部使用清晰、可运行的C#代码。 + +在处理合同、发票或任何具有法律约束力的文档时,验证PDF签名是必不可少的。本教程完整演示工作流,帮助您在自己的应用程序中集成签名检查,而无需猜测需要调用哪些API。 + +## 您将完成的内容 + +* 使用 Aspose.PDF 加载已签名的 PDF 文件。 +* 设置**signature validation options**(例如哈希算法)。 +* 调用 `Validate` 方法来**validate pdf digital signature**。 +* 在控制台输出明确的“Signature valid”消息。 + +**先决条件** + +* .NET 6.0(或更高版本)已安装。 +* Visual Studio 2022(或任何 C# IDE)。 +* Aspose.PDF for .NET NuGet 包(`Aspose.Pdf`)。 + +> **专业提示:** 使用最新的 Aspose.PDF 版本以获得对 SHA‑3 算法的支持以及提升的验证性能。 + +## 第一步:安装 Aspose.PDF NuGet 包 + +在 Visual Studio 中打开项目,并在 Package Manager Console 中运行以下命令: + +```bash +Install-Package Aspose.Pdf +``` + +该包会添加 `Aspose.Pdf` 命名空间,其中包含您将使用的 `Document` 类以及与签名相关的 API。 + +## 第二步:加载已签名的 PDF 文档 + +第一行代码创建一个表示磁盘上 PDF 文件的 `Document` 对象。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*为什么这很重要:* `Document` 类会解析 PDF 结构,公开包含所有嵌入式数字签名的 `Signatures` 集合。如果文件路径不正确,会抛出异常,因此在运行程序前请确认路径无误。 + +## 第三步:配置签名验证选项 + +您可以使用 `SignatureValidationOptions` 类定制验证过程。本教程中我们指定了哈希算法,您还可以设置证书吊销检查、时间戳验证等。 + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*为什么这很重要:* 哈希算法必须与创建签名时使用的算法匹配。使用不匹配的算法会导致验证失败,即使签名本身是正确的。 + +## 第四步:验证第一个签名 + +大多数 PDF 只包含一个签名,但 `Signatures` 集合可以容纳多个。本示例验证第一个条目(`[0]`)。`Validate` 方法返回一个布尔值,指示是否成功。 + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*边缘情况:* 如果 PDF 没有签名,`document.Signatures.Count` 将为 `0`,访问 `[0]` 会抛出 `IndexOutOfRangeException`。可以通过简单的检查来防止: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## 第五步:显示验证结果 + +最后,将结果写入控制台。此步骤演示了 **check pdf signature** 的人类可读结果。 + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +运行程序后,您应该看到: + +``` +Signature valid: True +``` + +如果签名损坏、使用了不受支持的算法,或证书被吊销,输出将为 `False`。 + +## 完整、可运行的示例 + +将以下代码复制到新建的控制台项目(`dotnet new console`)中,并将 `YOUR_DIRECTORY/signed.pdf` 替换为已签名 PDF 文件的路径。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### 预期输出 + +``` +Signature valid: True +``` + +如果签名验证失败,控制台将显示 `Signature valid: False`。 + +## 常见问题与故障排除 + +| 问题 | 答案 | +|----------|--------| +| **如果 PDF 使用不同的哈希算法怎么办?** | 将 `SignatureValidationOptions` 中的 `HashAlgorithm` 更改为匹配的算法,例如 `HashAlgorithm.SHA256`。 | +| **如何在多签名 PDF 中验证所有签名?** | 遍历 `document.Signatures`,对每个条目调用 `Validate`。 | +| **我能验证签名证书的信任链吗?** | 将 `validationOptions.CheckCertificateRevocation = true`,并可选地提供自定义的 `CertificateStore` 以包含受信任的根证书。 | +| **如果需要支持时间戳验证怎么办?** | 启用 `validationOptions.CheckTimestamp = true`。Aspose.PDF 将验证嵌入的时间戳令牌。 | +| **有没有办法获取详细的验证错误?** | 使用 `ValidateEx(validationOptions, out ValidationResult result)`;`result` 包含每个失败的 `ErrorMessage` 和 `ErrorCode`。 | + +## 后续步骤 + +* 通过遍历 `document.Signatures`,探索 **validate pdf signature** 对多签名的支持。 +* 将本教程与 **check pdf signature** 结合,在 Web API 中实现对上传合同的实时验证。 +* 深入研究 **signature validation options**,如 CRL/OCSP 检查、时间戳验证和自定义信任存储。 + +您现在拥有完整的 **pdf signature tutorial**,展示了如何使用 Aspose.PDF 在 C# 中 **validate pdf digital signature**。欢迎根据自己的工作流调整代码,添加日志,或将其集成到更大的文档处理流水线中。祝编码愉快! + +## 您接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您在项目中进一步掌握 API 功能并探索替代实现方案。每个资源都提供完整的可运行代码示例和逐步解释。 + +- [数字签名 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/) +- [数字签名 Aspose Pdf .NET 教程](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/chinese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..b574f54b08 --- /dev/null +++ b/pdf/chinese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 在 C# 中验证 PDF 签名。了解如何验证 PDF 的数字签名并仅用几行代码列出 PDF 签名。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: zh +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 在 C# 中验证 PDF 签名。本指南展示如何验证数字签名 PDF、列出 PDF 签名以及高效处理受损签名。 +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: 在 C# 中验证 PDF 签名 – 快速 Aspose.PDF 教程 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: 使用 Aspose.PDF 在 C# 中验证 PDF 签名 – 完整指南 +url: /zh/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中使用 Aspose.PDF 验证 PDF 签名 – 完整指南 + +如果您需要在 .NET 应用程序中**验证 PDF 签名**,本指南将向您展示使用 Aspose.PDF 的简洁方法。您将学习如何**验证数字签名 PDF**、**列出 PDF 签名**,以及仅用几行代码检测受损签名。 + +本教程涵盖从安装库到处理未签名文档或加密 PDF 等边缘情况的全部内容。完成后,您即可将签名验证集成到任何 C# 项目中,确保收到的 PDF 文件的真实性。 + +**先决条件** + +- .NET 6.0 或更高版本(代码同样适用于 .NET Framework 4.6+)。 +- 对 C# 和 Visual Studio(或您喜欢的任何 IDE)有基本了解。 +- Aspose.PDF for .NET 许可证(免费试用可用于评估)。 + +如果您满足这些要求,即可开始验证 PDF 签名。 + +## 验证 PDF 签名 – 设置项目 + +1. **Add the Aspose.PDF NuGet package** + Open the Package Manager Console and run: + + ```bash + Install-Package Aspose.PDF + ``` + + This brings in the `Aspose.Pdf` assembly and its dependencies. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` gives you the `Any` extension used later, while `Aspose.Pdf` contains the `Document` and `Signature` classes. + +## 加载 PDF 文档 + +The first functional step is to open the PDF you want to inspect. Aspose.PDF reads the file into memory, enabling you to query its signatures. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **为什么这很重要** – 在 `using` 块中加载文档可确保文件句柄及时释放,防止长时间运行的服务出现文件锁定问题。 + +## 列出 PDF 签名 + +Before you validate a signature, you might want to know how many signatures are present. This step demonstrates the **list PDF signatures** capability. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**说明** + +- `document.Signatures` returns a collection of `Signature` objects. +- `Count` tells you how many signatures exist. +- Each `Signature` exposes metadata such as `Id`, `SignatureType`, and `Reason`, which can be useful for audit logs. + +**边缘情况** – 如果 PDF 没有签名,`Count` 将为 `0`,循环不会执行。您可以优雅地处理此情形: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## 验证数字签名 PDF – 检测受损签名 + +Now that you can enumerate signatures, the core task is to **verify PDF signature** integrity. Aspose.PDF provides the `IsCompromised` property, which returns `true` when the signature’s cryptographic hash no longer matches the document content. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**为什么这样有效** + +- `Signature.IsCompromised` performs a full cryptographic validation using the embedded certificate chain. +- The `Any` LINQ operator stops at the first compromised signature, making the check efficient even for documents with many signatures. + +### 单独处理多个签名 + +If you need to know which specific signature failed, iterate instead of using `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**专业提示:** 将验证结果连同 `sig.Id` 一起存入数据库,以便后续取证分析。 + +## 输出结果并考虑边缘情况 + +Below is a complete, runnable program that combines the steps above. It loads a PDF, lists all signatures, validates them, and prints a clear result. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**预期输出(有效签名)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**预期输出(受损签名)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### 常见陷阱及避免方法 + +| 陷阱 | 解决方案 | +|---------|----------| +| PDF 受密码保护。 | 在访问 `Signatures` 之前通过 `document.Encrypt.Decrypt(password)` 传入密码。 | +| 未设置 Aspose.PDF 许可证。 | 使用 `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` 以避免评估水印。 | +| 大型 PDF 导致内存占用高。 | 使用流模式 (`Document.Load(stream)`) 处理文件,而不是一次性加载整个文件。 | + +## 结论 + +您现在已经掌握了如何在 C# 中使用 Aspose.PDF **验证 PDF 签名**、**验证数字签名 PDF**,以及**列出 PDF 签名**以用于报告或审计。完整示例演示了加载文档、枚举签名、检查每个签名是否受损,并处理常见的边缘情况。 + +接下来可以探索的方向: + +- **验证时间戳令牌**,确保签名在证书过期前创建。 +- **提取签名者证书**(`sig.Certificate`)以进行自定义信任库验证。 +- **与 ASP.NET Core 集成**,自动拒绝验证失败的上传 PDF。 + +欢迎尝试多签名、定制验证逻辑或其他 PDF 库。如果本指南对您有帮助,请与团队分享或在评论中添加您的技巧。 + +## 接下来应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步掌握 API 功能并在项目中探索替代实现方案。每个资源都提供完整的可运行代码示例和逐步解释。 + +- [如何验证 PDF – 使用 Aspose 验证 PDF 签名](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [在 C# 中验证 PDF 签名 – 完整的数字签名验证指南](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net 验证数字签名](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/chinese/net/text-operations/_index.md index e9258707d6..9f9d405d97 100644 --- a/pdf/chinese/net/text-operations/_index.md +++ b/pdf/chinese/net/text-operations/_index.md @@ -164,6 +164,9 @@ Aspose.PDF Net 代码教程 ### [使用 Aspose.PDF for .NET 为带标签的 PDF 文件添加文本样式 | 无障碍美观的 PDF 创建指南](./style-text-tagged-pdfs-aspose-pdf-net/) 学习如何使用 Aspose.PDF for .NET 为带标签的 PDF 文档添加文本样式。本指南涵盖安装、技巧和实际应用,以增强可访问性。 +### [如何使用 Aspose.Pdf.AI 总结 PDF – 指南](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +了解如何使用 Aspose.Pdf.AI 对 PDF 文档进行自动摘要,提升信息提取效率。 + ## 其他资源 - [Aspose.PDF 用于网络文档](https://docs.aspose.com/pdf/net/) diff --git a/pdf/chinese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/chinese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..3875df43f1 --- /dev/null +++ b/pdf/chinese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: 如何使用 Aspose.Pdf.AI 对 PDF 进行摘要 – 学习如何使用 AI 对 PDF 进行摘要,生成 PDF 摘要,并将摘要保存为 + PDF。完整代码和最佳实践。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: zh +lastmod: 2026-08-08 +og_description: 如何使用 Aspose.Pdf.AI 对 PDF 进行摘要。本教程展示了如何使用 AI 对 PDF 进行摘要,生成 PDF 摘要,并在几行 + C# 代码中将摘要保存为 PDF。 +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: 如何使用 Aspose.Pdf.AI 对 PDF 进行摘要 – 步骤指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: 如何使用 Aspose.Pdf.AI 对 PDF 进行摘要 – 指南 +url: /zh/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Aspose.Pdf.AI 对 PDF 进行摘要 – 指南 + +如果您需要 **快速且可靠地对 PDF 进行摘要**,可以让 AI 模型来完成繁重的工作。本教程将逐步演示如何使用 AI 对 PDF 进行摘要、生成 PDF 摘要,并使用 Aspose.Pdf.AI SDK for .NET 将摘要保存为 PDF。您将获得完整可运行的示例以及每行代码的解释,方便您将该方案迁移到自己的项目中。 + +本指南包括: + +* 准备源文件夹和 API 密钥 +* 创建与模型通信的 `OpenAIClient` +* 配置摘要选项,如 temperature 和文档路径 +* 构建 `SummaryCopilot` 并异步获取摘要文本 +* 将生成的摘要保存回 PDF 文件 + +无需除 OpenAI 端点之外的外部服务,代码兼容 .NET 6+ 和 Aspose.Pdf.AI 23.7(或更高版本)。 + +## 前置条件 + +* **.NET 6 SDK**(或更高版本的 .NET) +* **Aspose.Pdf.AI for .NET** – 通过 NuGet 安装:`dotnet add package Aspose.Pdf.AI` +* 拥有 **OpenAI API 密钥**,并具备对所使用模型的访问权限(例如 `gpt‑4o`) +* 您想要摘要的 PDF 文件(示例使用 `SampleDocument.pdf`) + +确保在 `dataDirectory` 中指定的文件夹已存在,并且应用程序拥有读写权限。 + +## 第一步:设置项目结构 + +创建一个控制台项目(或将代码集成到任意现有 .NET 应用中)。最简的 `Program.cs` 如下: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### 为什么这种结构很重要 + +* **`await using`** 会自动释放 `OpenAIClient`,关闭 HTTP 连接。 +* **`Path.Combine`** 构建与操作系统无关的路径,避免在 Windows 与 Linux 上出现路径错误。 +* **Temperature** 控制创造力;`0.5` 可获得平衡且客观的摘要。 +* **`GetSummaryAsync`** 返回纯文本,而 `SaveSummaryAsync` 会生成保留字体和布局的正式 PDF。 + +## 第二步:了解摘要选项 + +`OpenAISummaryCopilotOptions` 类允许您微调摘要过程: + +| 选项 | 用途 | 常见取值 | +|--------|---------|----------------| +| `WithTemperature(double)` | 控制随机性。`0.0` = 确定性,`1.0` = 高度创造性。 | 业务文档一般使用 `0.3‑0.7` | +| `WithDocument(string)` | 源 PDF 的路径。必须是可读取的文件。 | 任意绝对或相对路径 | +| `WithPrompt(string)` *(可选)* | 自定义提示,引导模型生成期望的摘要。 | “用 150 字概括关键发现。” | + +如果您处理的是 **大 PDF**(超过 10 MB 或页数众多),建议在摘要前将文档拆分为更小的块,以避免 token 限制错误。SDK 不会自动分块,您可以使用 `Aspose.Pdf` 的 `PdfDocument` 提取页面并逐页喂入。 + +## 第三步:运行代码并验证输出 + +1. 将 `SampleDocument.pdf` 放入您在 `Data` 文件夹中引用的路径下。 +2. 将 `"YOUR_API_KEY"` 替换为您真实的 OpenAI 密钥。 +3. 执行 `dotnet run`。 + +控制台应显示两个部分: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +使用任意 PDF 查看器打开 `Summary_out.pdf` – 其中包含相同的摘要文本,使用默认字体排版。该 PDF 完全可搜索,因为 SDK 将文本嵌入为标准 PDF 页面。 + +## 第四步:常见变体与边缘情况处理 + +### 仅摘要文档的某一部分 + +如果您需要 **针对特定章节进行 pdf 摘要**,请先提取该范围: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +随后将 `WithDocument` 指向 `Chapter5.pdf`。 + +### 调整摘要长度 + +可以通过添加自定义提示来影响长度: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### 处理 API 错误 + +网络波动或配额限制会抛出 `Aspose.Pdf.AI.Exceptions.AIException`。请将调用包装在 `try / catch` 中: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### 以自定义布局保存摘要 + +`SaveSummaryAsync` 只写入纯文本。若要为 PDF 添加标题、页眉或品牌样式,可创建新的 `PdfDocument` 并手动插入摘要: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## 第五步:性能提示与最佳实践 + +* **复用 `OpenAIClient`** 进行多次摘要 – 创建客户端开销不大,但复用底层的 `HttpClient` 可降低套接字耗尽风险。 +* **缓存摘要**,如果源 PDF 未变更,可将文本存入数据库,避免重复调用 API。 + +## 接下来您可以学习什么? + +以下教程涵盖与本指南紧密相关的主题,帮助您进一步掌握 API 功能并探索在项目中的其他实现方式。每篇资源均提供完整可运行的代码示例和逐步解释。 + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/conversion-export/_index.md b/pdf/czech/net/conversion-export/_index.md index de6240eeb6..0ef53f92d7 100644 --- a/pdf/czech/net/conversion-export/_index.md +++ b/pdf/czech/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Výukový program pro kódování Aspose.PDF Net ### [Konverze PDF do TIFF v .NET pomocí Aspose.PDF: Podrobný návod](./pdf-to-tiff-conversion-aspose-pdf-net/) Naučte se, jak převádět dokumenty PDF do obrázků TIFF pomocí Aspose.PDF pro .NET. Osvojte si vlastní barevné hloubky a pokročilé techniky zpracování obrazu. +### [Uložení PDF jako HTML pomocí Aspose.PDF – krok za krokem](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Naučte se, jak pomocí Aspose.PDF převést PDF soubory do HTML pomocí podrobného krok‑za‑krokem návodu. + ## 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-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/czech/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..e555061a7e --- /dev/null +++ b/pdf/czech/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-08 +description: Uložte PDF jako HTML pomocí Aspose.PDF v C#. Naučte se, jak převést PDF + na HTML, vynechat rastrové obrázky a řešit běžné okrajové případy. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: cs +lastmod: 2026-08-08 +og_description: Uložte PDF jako HTML pomocí Aspose.PDF. Tento průvodce vám ukáže, + jak převést PDF na HTML, vynechat rastrové obrázky a vyhnout se běžným úskalím. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Uložte PDF jako HTML pomocí Aspose.PDF – kompletní C# tutoriál +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Uložení PDF jako HTML pomocí Aspose.PDF – průvodce krok za krokem +url: /cs/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Uložení PDF jako HTML pomocí Aspose.PDF – krok za krokem průvodce + +Pokud potřebujete rychle **uložit PDF jako HTML**, tento tutoriál vám přesně ukáže, jak to provést pomocí Aspose.PDF pro .NET. Ať už vytváříte webovou aplikaci pro prohlížení dokumentů nebo exportujete zprávy pro SEO‑přátelské indexování, uvidíte kompletní, spustitelný řešení, které převádí PDF na HTML a zároveň vám poskytuje detailní kontrolu nad rastrovými obrázky. + +Kromě hlavního úkolu se také podíváme na možnosti **aspose pdf html conversion**, které vám umožní přeskočit rastrové obrázky, upravit zpracování CSS a efektivně spravovat velké dokumenty. Na konci tohoto průvodce budete mít samostatný program, který můžete vložit do libovolného .NET projektu. + +## Požadavky + +Než začnete, ujistěte se, že máte: + +* .NET 6.0 SDK nebo novější (kód funguje také s .NET Core a .NET Framework) +* Visual Studio 2022 nebo jakékoli IDE podporující C# +* Licenci Aspose.PDF pro .NET (bezplatná zkušební verze postačuje pro hodnocení) +* PDF soubor pojmenovaný `report.pdf` umístěný ve složce, na kterou můžete odkazovat z kódu + +Žádné další NuGet balíčky nejsou potřeba kromě `Aspose.Pdf`. + +## Krok 1: Instalace NuGet balíčku Aspose.PDF + +Otevřete terminál ve složce projektu a spusťte: + +```bash +dotnet add package Aspose.Pdf +``` + +Balíček přidá jmenný prostor `Aspose.Pdf`, který obsahuje třídu `Document` a typ `HtmlSaveOptions` používaný pro **convert pdf to html** operace. + +## Krok 2: Vytvoření konzolového projektu a přidání using direktiv + +Vytvořte novou konzolovou aplikaci, pokud ji ještě nemáte: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Poté otevřete `Program.cs` a přidejte požadované jmenné prostory: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Tyto direktivy vám umožní přístup k jádru PDF API a možnostem ukládání HTML, které řídí proces **aspose convert pdf html**. + +## Krok 3: Načtení PDF dokumentu + +První řádek operace načte zdrojové PDF do objektu `Aspose.Pdf.Document`. Tento objekt představuje celý PDF soubor v paměti a poskytuje metody pro ukládání, úpravy a extrakci obsahu. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Proč je to důležité*: Načtení dokumentu jednou udržuje předvídatelnou spotřebu paměti, zejména u velkých PDF. Pokud soubor nelze najít, Aspose vyhodí `FileNotFoundException`, takže se ujistěte, že cesta je správná. + +## Krok 4: Konfigurace možností ukládání HTML + +`HtmlSaveOptions` vám umožňuje jemně doladit, jak bude PDF konvertováno. V tomto tutoriálu přeskočíme rastrové obrázky, aby byl výstup lehký, ale můžete změnit režim na `EmbedAll`, pokud je potřebujete. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Klíčové body**: + +* `RasterImagesSavingMode.Skip` říká Aspose, aby během konverze ignoroval bitmapové obrázky (JPEG, PNG). To je ideální, když zdrojové PDF obsahuje naskenované stránky, které v HTML zobrazení nepotřebujete. +* Můžete přepnout na `EmbedAll` nebo `External`, pokud chcete obrázky uložit jako samostatné soubory. +* Vlastnost `ResourcesFolder` je relevantní pouze tehdy, když jsou obrázky uloženy externě. + +## Krok 5: Uložení dokumentu jako HTML + +Nyní zapíšete HTML soubor na disk pomocí nakonfigurovaných možností. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Po dokončení tohoto volání bude `report.html` obsahovat textový obsah, vektorovou grafiku a rozvržení zachované z původního PDF, ale bez rastrových obrázků. Soubor můžete otevřít v prohlížeči a ověřit výsledek. + +## Očekávaný výstup + +Když otevřete `report.html` v Chrome nebo Edge, měli byste vidět: + +* Všechny nadpisy, odstavce a vektorové tvary vykreslené správně. +* Žádné `` tagy pro rastrové obrázky (jsou vynechány kvůli režimu `Skip`). +* Čisté, minimální CSS buď inline, nebo v samostatném stylovém souboru, podle zvolené možnosti. + +Pokud potřebujete potvrdit, že obrázky byly vynechány, podívejte se do zdroje stránky (`Ctrl+U`). Nenajdete žádné `` položky. + +## Krok 6: Řešení běžných okrajových případů + +### 6.1 Velké PDF (> 100 MB) + +Pro velmi velké soubory povolte streamování, aby se snížil tlak na paměť: + +```csharp +htmlOpts.Streaming = true; +``` + +Streamování zapisuje HTML úseky přímo na disk, čímž zabraňuje tomu, aby byl celý dokument držen v paměti. + +### 6.2 PDF chráněné heslem + +Pokud je zdrojové PDF šifrované, před uložením zadejte heslo: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Pokus o uložení bez dešifrování vyvolá `InvalidPasswordException`. + +### 6.3 Unicode znaky + +Aspose.PDF automaticky vkládá Unicode fonty, ale můžete vynutit konkrétní font pro konzistentní vykreslení: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Vlastní pojmenování souborů pro více stránek + +Pokud chcete každou stránku PDF jako samostatný HTML soubor, nastavte: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Tím se vytvoří `report_page_1.html`, `report_page_2.html` atd., což může být užitečné pro stránkování ve webových aplikacích. + +## Kompletní, spustitelný příklad + +Níže je kompletní program, který zahrnuje všechny zmíněné kroky. Zkopírujte jej do `Program.cs`, upravte cesty a spusťte `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Ověření**: Po spuštění konzole vypíše zprávu o úspěchu. Otevřete vygenerovaný HTML soubor v prohlížeči a potvrďte, že se text a vektorová grafika zobrazují správně a že rastrové obrázky jsou vynechány. + +## Pro tipy a úskalí + +* **Pro tip**: Pokud později potřebujete rastrové obrázky, změňte `RasterImagesSavingMode` na `External` a nastavte `ResourcesFolder`. Tím se vytvoří podsložka `images` s extrahovanými bitmapami. +* **Dejte pozor na**: Použití výchozího režimu `Skip` u PDF, které silně spoléhají na naskenované obrázky, povede k prázdným oblastem tam, kde by obrázky měly být. Vždy testujte s reprezentativním vzorkem vašich dokumentů. +* **Tip pro výkon**: Opakované používání jedné instance `HtmlSaveOptions` pro více dokumentů snižuje režii vytváření objektů při dávkových konverzích. +* **Kontrola verze**: Ukázané API funguje s Aspose.PDF pro .NET verzí 23.9 a novější. Starší verze mohou používat `HtmlSaveOptions.RasterImagesSavingMode` s mírně odlišným názvem výčtu. + +## Závěr + +Nyní víte, jak **uložit PDF jako HTML** pomocí Aspose.PDF, jak řídit zacházení s rastrovými obrázky a jak řešit typické výzvy, jako jsou velké soubory, ochrana heslem a výstup HTML po stránkách. Toto kompletní řešení vám umožní integrovat konverzi PDF‑na‑HTML do libovolné C# aplikace s jistotou. + +### Co dál? + +* Prozkoumejte **aspose pdf html conversion** pro vkládání fontů a přizpůsobení CSS. +* Kombinujte tuto konverzi s webovým API pro poskytování HTML na vyžádání. +* Vyzkoušejte opačný směr — **convert pdf to html** a poté zpět na PDF — pro ověření věrnosti konverze. + +Neváhejte experimentovat s možnostmi a sdílet své poznatky v komentářích nebo na fórech Aspose. Šť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í ukázky kódu s podrobnými vysvětleními, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní přístupy ve vašich projektech. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/czech/net/digital-signatures/_index.md index 8b518b22ce..a82ea323b6 100644 --- a/pdf/czech/net/digital-signatures/_index.md +++ b/pdf/czech/net/digital-signatures/_index.md @@ -62,6 +62,9 @@ Naučte se načíst PDF v C#, převést jej na PDF/X‑4 a získat seznam digit ### [Ověření podpisu PDF pomocí Aspose – převod PDF na HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Naučte se, jak ověřit podpis PDF a převést PDF dokument do HTML pomocí Aspose.PDF pro .NET. +### [Jak ověřit PDF pomocí Aspose.PDF – zkontrolovat platnost podpisu PDF v C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Naučte se, jak ověřit platnost podpisu PDF v C# pomocí Aspose.PDF. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/czech/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..87dfff164b --- /dev/null +++ b/pdf/czech/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: Jak ověřit PDF pomocí Aspose.PDF a ověřit digitální podpis PDF. Postupujte + podle tohoto krok‑za‑krokem průvodce a rychle zkontrolujte podpis PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: cs +lastmod: 2026-08-08 +og_description: Jak ověřit PDF pomocí Aspose.PDF. Naučte se ověřovat digitální podpis + PDF a kontrolovat platnost podpisu PDF v několika řádcích C# kódu. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Jak ověřit PDF – zkontrolovat platnost podpisu PDF pomocí Aspose.PDF v C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Jak ověřit PDF pomocí Aspose.PDF – kontrola platnosti podpisu PDF v C# +url: /cs/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak ověřit PDF pomocí Aspose.PDF – kontrola platnosti podpisu PDF v C# + +Pokud potřebujete **jak ověřit PDF** soubory, které obsahují digitální podpisy, tento tutoriál vám ukáže kompletní řešení. Naučíte se načíst PDF, vytvořit validátor certifikátů a zkontrolovat platnost podpisu PDF pomocí Aspose.PDF pro .NET. + +Ověřování digitálního podpisu PDF je běžnou požadavkou pro soulad, fakturaci a bezpečnou výměnu dokumentů. Na konci tohoto průvodce budete schopni s jistotou ověřit, zda je podepsané PDF důvěryhodné, a pochopíte, jak zacházet s typickými okrajovými případy, jako jsou chybějící certifikáty nebo více podpisů. + +## Požadavky + +Než začnete, ujistěte se, že máte: + +- .NET 6.0 nebo novější nainstalovaný +- IDE, například Visual Studio 2022 (jakýkoli editor podporující C# funguje) +- Licencovanou kopii **Aspose.PDF pro .NET** (bezplatná zkušební verze stačí pro hodnocení) +- Podepsaný PDF soubor (`signed.pdf`) a pokud podpis spoléhá na soukromou CA, odpovídající důvěryhodný certifikát (`trustedCertificate.pfx`) + +Žádné další NuGet balíčky nejsou potřeba nad rámec `Aspose.PDF`. + +## Krok 1: Instalace Aspose.PDF + +Otevřete terminál ve složce projektu a spusťte: + +```bash +dotnet add package Aspose.PDF +``` + +Příkaz přidá nejnovější knihovnu Aspose.PDF, která obsahuje třídy `Document` a `CertificateValidator` použité později. + +## Krok 2: Načtení PDF dokumentu + +Načtení PDF je první operace, kterou provedete, když **jak načíst pdf** programově. Konstruktor `Document` přijímá cestu k souboru, stream nebo pole bajtů. Použití úplné cesty udržuje příklad přehledný. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Proč je to důležité:** Objekt `Document` představuje celý PDF soubor v paměti. Bez načtení souboru nemůžete přistupovat k jeho kolekci `Signatures`, která je potřebná pro **kontrolu pdf signature** dat. + +## Krok 3: Příprava validátoru certifikátu + +Digitální podpis je důvěryhodný jen tehdy, pokud řetězec certifikátů končí kořenem, kterému důvěřujete. `CertificateValidator` vám umožní nasměrovat Aspose.PDF na důvěryhodný úložiště certifikátů nebo konkrétní PFX soubor. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Pokud váš PDF používá veřejnou CA, kterou Windows již důvěřuje, můžete vynechat `certPath` a vytvořit `CertificateValidator` pomocí jeho výchozího konstruktoru. Poskytnutí vlastního PFX je užitečné pro interní PKI prostředí. + +## Krok 4: Ověření prvního digitálního podpisu + +PDF může obsahovat více podpisů. Pro zjednodušení tento tutoriál ověřuje první podpis (`Signatures[0]`). Metoda `Validate` vrací `true`, když je podpis kryptograficky neporušený **a** podpisový certifikát je důvěryhodný. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Co se děje pod kapotou:** +- Metoda kontroluje hash podepsaného obsahu oproti hodnotě podpisu. +- Vytvoří řetězec certifikátů pomocí poskytnutého validátoru. +- Stav revokace (CRL/OCSP) je vyhodnocen, pokud je validátor pro to nastaven. + +### Zpracování více podpisů + +Pokud váš PDF obsahuje více než jeden podpis, projděte kolekci `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Tento vzor vám umožní **check pdf signature** na každé stránce a nahlásit jednotlivé výsledky. + +## Krok 5: Výstup výsledku validace + +Nakonec výsledek zapíšete do konzole. V produkčním kódu byste pravděpodobně výsledek logovali nebo vyvolali výjimku při neplatném podpisu. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Očekávaný výstup v konzoli + +``` +Valid +``` + +nebo + +``` +Invalid +``` + +Zpráva odráží boolean vrácený metodou `Validate`. Výsledek „Invalid“ může naznačovat pozměněný dokument, nedůvěryhodný certifikát nebo prošlý podpisový certifikát. + +## Krok 6: Časté úskalí a tipy pro nejlepší praxi + +### 1. Chybějící důvěryhodný certifikát +Pokud obdržíte `Invalid` a víte, že podpis by měl být důvěryhodný, ověřte, že jste do `CertificateValidator` předali správný kořenový certifikát. Použijte přetížení, které přijímá `X509Certificate2Collection` pro více kořenů. + +### 2. Podpis s externími odkazy +Některé podpisy zahrnují externí obsah (např. připojený soubor). Ujistěte se, že externí zdroje jsou přístupné; jinak selže ověření hashe. + +### 3. Ověření časové razítka +Podpis může obsahovat token časové razítka. Pro jeho ověření nakonfigurujte validátor tak, aby kontroloval certifikáty autority časových razítek (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Výkon u velkých PDF +Načtení PDF s několika stovkami stran může spotřebovat hodně paměti. Pokud potřebujete jen data o podpisu, použijte `PdfFileEditor` k extrakci slovníku podpisu bez vykreslování stran. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Bezpečnost při více vláknech +Instance `Document` nejsou thread‑safe. Vytvořte novou `Document` pro každé vlákno, když ověřujete mnoho PDF paralelně. + +## Kompletní, spustitelný příklad + +Níže je kompletní program, který můžete zkopírovat, vložit a spustit po úpravě cest k souborům. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Spuštění programu** vypíše řádek pro každý podpis, jasně indikující, zda PDF projde **validate pdf digital signature** kontrolou. + +## Závěr + +Nyní víte **jak ověřit PDF** soubory, které obsahují digitální podpisy pomocí Aspose.PDF pro .NET. Tutoriál pokryl načtení PDF, konfiguraci validátoru certifikátů, kontrolu platnosti podpisu PDF, zpracování více podpisů a řešení běžných problémů. + +Dále prozkoumejte související témata jako **jak podepsat PDF**, **jak přidat tokeny časových razítek** a **jak extrahovat podepsaný obsah**. Tyto rozšíření vám umožní vytvořit kompletní end‑to‑end bezpečný workflow dokumentů v C#. + +--- + + +## 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 vašich projektech. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/czech/net/document-conversion/_index.md index bbd84a792e..14d7b00abb 100644 --- a/pdf/czech/net/document-conversion/_index.md +++ b/pdf/czech/net/document-conversion/_index.md @@ -14,7 +14,7 @@ # Konverze dokumentů -V tutoriálech pro převod dokumentů Aspose.PDF pro .NET se naučíte, jak převádět různé typy dokumentů, jako jsou Word, Excel, HTML, obrázky atd., do souborů PDF. Naučíte se, jak převést existující dokument pomocí pokročilých možností převodu, jako je rozvržení, písma, obrázky, tabulky a další. Tutoriály vás také provedou převodem dokumentů PDF do jiných formátů, jako jsou Word, Excel, HTML, obrázky atd. +V tutoriálech pro převod dokumentů Aspose.PDF pro .NET se naučíte, jak převádět různé typy dokumentů, jako jsou Word, Excel, HTML, obrázky atd., do souborů PDF. Naučíte se, jak převést existující dokument pomocí pokročilých možností převodu, jako je rozvržení, písma, obrázky, tabulky a další. Tutoriály vás také provedou převadem dokumentů PDF do jiných formátů, jako jsou Word, Excel, HTML, obrázky atd. Naučíte se, jak nastavit převod, extrahovat text a obrázky, zachovat původní strukturu a formátování dokumentu a provádět hromadné převody. Návody poskytují podrobné příklady kódu a podrobná vysvětlení, která vám pomohou zvládnout možnosti převodu dokumentů v knihovně Aspose.PDF pro .NET. Ať už potřebujete převést dokumenty pro archivaci, elektronickou distribuci nebo jiné účely, tyto návody vám poskytnou znalosti pro efektivní provádění všech úkolů převodu dokumentů pomocí výkonné knihovny Aspose.PDF pro .NET. @@ -57,6 +57,7 @@ Naučíte se, jak nastavit převod, extrahovat text a obrázky, zachovat původn | [Cesta k obrázku z XML do PDF](./xml-to-pdfset-image-path/) | Naučte se, jak snadno převést XML do PDF pomocí Aspose.PDF pro .NET. Tato podrobná příručka vás krok za krokem provede celým procesem, od nastavení až po dokončení. | | [XPS do PDF](./xps-to-pdf/) Naučte se, jak převést soubory XPS do PDF pomocí Aspose.PDF pro .NET v tomto podrobném návodu. Ideální pro vývojáře a nadšence do dokumentů. | | [Převod PDF na PDF/X‑4 v C# – krok za krokem ASP.NET PDF tutoriál](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Naučte se, jak převést PDF na PDF/X‑4 pomocí Aspose.PDF pro .NET v C# s podrobným krok za krokem návodem. | +| [pdfx4 konverzní tutoriál – nastavení PDF standardu a konverze PDF pomocí Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Naučte se, jak nastavit PDF standard a převést PDF pomocí Aspose.PDF pro .NET v tomto podrobném tutoriálu. | | [PDF na PNG tutoriál – Převod stránek PDF do PNG v C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Naučte se, jak převést stránky PDF do formátu PNG pomocí Aspose.PDF pro .NET v C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/czech/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..ca38c5e47c --- /dev/null +++ b/pdf/czech/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,226 @@ +--- +category: general +date: 2026-08-08 +description: Návod na konverzi pdfx4, který ukazuje, jak nastavit standard PDF na + PDF/X‑4 a převést PDF pomocí Aspose pro spolehlivou konverzi formátu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: cs +lastmod: 2026-08-08 +og_description: Tutoriál převodu pdfx4 vysvětluje, jak nastavit standard PDF na PDF/X‑4 + a provést spolehlivý převod PDF pomocí Aspose v C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Návod na konverzi pdfx4 – nastavení standardu PDF a konverze PDF pomocí + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Návod na konverzi pdfx4 – nastavení standardu PDF a konverze PDF pomocí Aspose +url: /cs/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 konverzní tutoriál – nastavení PDF standardu a konverze PDF pomocí Aspose + +Pokud potřebujete **pdfx4 conversion tutorial**, tento průvodce vás provede kompletním procesem nastavení PDF standardu na PDF/X‑4 a konverzí PDF pomocí Aspose. Ať už připravujete soubory připravené k tisku nebo zajišťujete dlouhodobou archivní shodu, naučíte se spolehlivý **aspose pdf format conversion** workflow, který funguje s .NET 6 a novějšími. + +Tutoriál pokrývá vše od nastavení projektu až po zpracování okrajových případů, jako jsou chybějící zdrojové soubory nebo nepodporované funkce. Na konci článku budete mít samostatný C# program, který vytvoří soubor kompatibilní s PDF/X‑4 připravený pro následné workflow. + +## Požadavky + +- .NET 6 SDK nebo novější nainstalováno ([download here](https://dotnet.microsoft.com/download)) +- Platná licence Aspose.PDF pro .NET (bezplatná zkušební verze funguje pro testování) +- Visual Studio 2022, VS Code nebo jakékoli IDE podporující vývoj v .NET +- Zdrojový PDF soubor, který chcete převést (umístěte jej do známé složky) + +Tyto požadavky zajišťují, že kód poběží bez další konfigurace. + +## Krok 1: Vytvořte nový .NET konzolový projekt + +Otevřete terminál a spusťte následující příkazy pro vytvoření konzolové aplikace pojmenované `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Přidejte NuGet balíček Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Balíček `Aspose.Pdf` poskytuje třídu `Document` a `PdfFormatConversionOptions` potřebné pro operace **convert pdf pdfx4**. + +## Krok 2: Napište kód pro konverzi + +Otevřete `Program.cs` (nebo `Program.cs`, pokud používáte nové top‑level příkazy) a nahraďte jeho obsah úplným příkladem níže. Kód demonstruje **set pdf standard** na PDF/X‑4, provádí konverzi a zahrnuje zpracování chyb pro běžné úskalí. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Proč je každá část důležitá + +- **Argument validation** zabraňuje pádu programu, když uživatel zapomene zadat cestu k souboru. +- **`Document` loading** vyhodí jasnou výjimku, pokud zdrojové PDF chybí nebo je poškozené, což je nezbytné pro robustní zážitek **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** je místo, kde **set pdf standard**. Při přiřazení `PdfStandard.PdfX4` Aspose automaticky upraví barevné prostory, vloží požadované fonty a zapíše potřebná metadata PDF/X‑4. +- **`FontEmbeddingMode.EmbedAll`** zajišťuje, že každý font použitý ve zdrojovém PDF je vložen, což je běžná požadavek pro PDF připravené k tisku. +- `doc.Convert` provádí skutečnou **aspose pdf format conversion**. Metoda zapíše nový soubor v jednom volání, což zjednodušuje workflow. + +## Krok 3: Spusťte konvertor + +Sestavte projekt a spusťte jej s cestami ke zdroji a cíli: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Pokud vše funguje, konzole vypíše: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Nyní můžete otevřít `output_pdfx4.pdf` v libovolném PDF prohlížeči, který podporuje PDF/X‑4 (např. Adobe Acrobat Pro) a ověřit shodu přes *File → Properties → Standards*. + +## Krok 4: Ověřte shodu PDF/X‑4 (volitelné) + +Pro produkční pipeline můžete chtít programově ověřit výstup. Aspose poskytuje třídu `PdfComplianceChecker` (dostupnou v balíčku `Aspose.Pdf`), kterou lze použít následujícím způsobem: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Spuštěním tohoto úryvku po konverzi získáte explicitní výsledek úspěchu/neúspěchu, což je užitečné pro automatizované CI/CD pipeline. + +## Krok 5: Časté úskalí a tipy pro nejlepší praxi + +| Problém | Proč k tomu dochází | Jak tomu předejít | +|-------|----------------|-----------------| +| Chybějící fonty ve zdrojovém PDF | Fonty jsou odkazovány, ale nejsou vloženy, což způsobuje varování při konverzi | Použijte `FontEmbeddingMode.EmbedAll` jak je uvedeno výše | +| Zdrojové PDF obsahuje průhledné objekty, které nejsou povoleny v PDF/X‑4 | PDF/X‑4 zakazuje určité průhledné sloučení | Před konverzí předzpracujte PDF pomocí `doc.ProcessTransparentObjects()` | +| Velké soubory způsobují OutOfMemoryException | Celý dokument je načten do paměti | Streamujte zdroj pomocí `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licence není použita | Zkušební verze přidává vodoznaky | Zavolejte `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` před jakýmkoli použitím Aspose API | + +Použití těchto tipů zajišťuje plynulý **convert pdf pdfx4** zážitek v produkčních prostředích. + +## Krok 6: Rozšíření tutoriálu + +Jakmile zvládnete základní **pdfx4 conversion tutorial**, můžete prozkoumat: + +- **Dávková konverze**: procházet složku PDF souborů a konvertovat každý na PDF/X‑4. +- **Vkládání metadat**: přidat XMP metadata požadovaná konkrétními tiskárnami. +- **Správa barevných profilů**: připojit ICC profily pomocí `doc.ColorSpace = ColorSpace.DeviceRGB;` před konverzí. + +Všechny tyto rozšíření staví na stejné **aspose pdf format conversion** základně demonstrované zde. + +## Závěr + +Tento **pdfx4 conversion tutorial** vám ukázal, jak **set pdf standard** na PDF/X‑4, provést spolehlivou **convert pdf using Aspose** a ověřit výsledek. Nyní máte kompletní spustitelný C# program, který lze integrovat do větších pipeline pro zpracování dokumentů nebo použít jako samostatný nástroj. Experimentujte s dávkovým zpracováním, manipulací s metadaty nebo alternativními PDF standardy (PDF/A‑2b, PDF/UA), abyste prohloubili své znalosti v **aspose pdf format conversion**. + +Šťastné programování a užijte si jistotu, která přichází s výstupem kompatibilním s PDF/X‑4! + +## 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. + +- [Převod PDF/A na standardní PDF pomocí Aspose.PDF .NET : Komplexní průvodce](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Jak nastavit datum expirace PDF pomocí Aspose.PDF pro .NET (C# tutoriál)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Komplexní průvodce: Převod PDF na TIFF pomocí Aspose.PDF .NET pro bezproblémovou konverzi dokumentů](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/czech/net/document-creation/_index.md b/pdf/czech/net/document-creation/_index.md index 67aeebff80..e2e5c997cb 100644 --- a/pdf/czech/net/document-creation/_index.md +++ b/pdf/czech/net/document-creation/_index.md @@ -79,6 +79,9 @@ Naučte se, jak vytvořit PDF, přidat stránku a tvar a soubor uložit pomocí ### [Vytvoření PDF dokumentu pomocí Aspose.PDF – krok‑po‑kroku průvodce](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Naučte se, jak pomocí Aspose.PDF vytvořit PDF dokument krok za krokem s praktickými ukázkami kódu. +### [Vytvořte PDF dokument v C# pomocí Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Naučte se, jak pomocí Aspose.PDF v C# vytvořit PDF dokument, přidat stránky, tvary a uložit soubor. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/czech/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..47e4bda4d0 --- /dev/null +++ b/pdf/czech/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: Vytvořte PDF dokument v C# pomocí Aspose.Pdf. Naučte se, jak přidat prázdnou + stránku do PDF, přidat odstavec do PDF a umístit text v PDF s přesnými souřadnicemi. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: cs +lastmod: 2026-08-08 +og_description: Rychle vytvořte PDF dokument v C#. Tento tutoriál ukazuje, jak přidat + prázdnou stránku do PDF, přidat odstavec do PDF a umístit text v PDF pomocí Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Vytvořte PDF dokument v C# s Aspose.Pdf – kompletní průvodce +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Vytvořte PDF dokument v C# pomocí Aspose.Pdf +url: /cs/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření PDF dokumentu v C# s Aspose.Pdf + +Pokud potřebujete **vytvořit PDF dokument** programově, tento návod vám ukáže přesně jak. Pomocí Aspose.Pdf pro .NET můžete přidat prázdnou stránku PDF, vložit odstavec do PDF a umístit text v PDF s pixel‑přesnou přesností — vše během několika řádků C# kódu. + +Na konci tutoriálu budete mít plně funkční PDF soubor, který obsahuje poznámku umístěnou na souřadnicích, které zadáte. Žádné externí nástroje, žádná ruční úprava — pouze čistý, opakovatelný kód, který můžete vložit do libovolného .NET projektu. + +## Co se naučíte + +* Jak **vytvořit PDF dokument** pomocí Aspose.Pdf. +* Správný způsob, jak **přidat prázdnou stránku PDF** a proč musí stránka existovat před přidáním obsahu. +* Jak **přidat odstavec do PDF** a připojit vlastní značku (užitečné pro pozdější extrakci nebo stylování). +* Technika, jak **umístit text v PDF** pomocí třídy `Position`. +* Jak uložit výsledek na disk a ověřit výstup. + +**Požadavky** + +* .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.7+). +* Platná licence Aspose.Pdf pro .NET nebo bezplatný evaluační klíč. +* IDE, například Visual Studio 2022 nebo VS Code s rozšířením C#. + +> **Tip:** Pokud používáte bezplatnou evaluační verzi, vygenerované PDF bude obsahovat malou vodoznak. Zaregistrujte licenci, abyste jej odstranili. + +## Jak vytvořit PDF dokument s Aspose.Pdf + +Prvním krokem je vytvořit instanci třídy `Document`. Tento objekt představuje celý PDF soubor a poskytuje vám přístup k stránkám, zdrojům a možnostem ukládání. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Vytvoření dokumentu **ne**zapíše nic na disk; pouze připraví reprezentaci v paměti, kterou můžete upravovat. Tento přístup udržuje API rychlé a paměťově úsporné. + +## Přidání prázdné stránky PDF pomocí Aspose.Pdf + +PDF musí obsahovat alespoň jednu stránku, než můžete umístit jakýkoli obsah. Přidání prázdné stránky je jediný volání metody: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Metoda `Add()` vytvoří stránku s výchozí velikostí (A4) a orientací (na výšku). Pokud potřebujete jinou velikost, předávejte instanci `PageSize` metodě `Add()`. + +## Přidání odstavce do PDF a nastavení poznámky + +Jakmile stránka existuje, můžete vytvořit objekt `Paragraph`, který obsahuje viditelný text. Odstavec může také nést vlastní značku, což je užitečné, když ji později potřebujete programově najít nebo stylovat. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Proč používat značku? + +Značky jsou metadata, která cestují s PDF prvkem. Lze je později dotazovat pomocí `Document.FindObject()` nebo použít v následných PDF procesorech, které se spoléhají na značky pro přístupnost nebo indexování. + +## Umístění textu v PDF s přesnými souřadnicemi + +Výchozí umístění odstavce je v levém horním rohu okraje stránky. Pro přesun textu na konkrétní místo nastavte vlastnost `Position` na značce odstavce: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Souřadnice se měří v bodech (1 bod = 1/72 palce). Počátek (0,0) je v levém dolním rohu stránky, což odpovídá většině PDF renderovacích engineů. Upravit hodnoty `X` a `Y` podle potřeb vašeho rozvržení. + +Po nastavení pozice přidejte odstavec do kolekce stránky: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Uložení PDF dokumentu + +Nakonec zapište PDF v paměti do souboru. Můžete zadat výstupní cestu, formát a dokonce i možnosti šifrování. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Po dokončení programu `output.pdf` obsahuje jednu stránku s textem **Important note** umístěným blízko pravého horního rohu (X = 50, Y = 750). Otevřete soubor v libovolném PDF prohlížeči a ověřte umístění. + +![Vygenerovaný PDF dokument vytvořený pomocí C# Aspose.Pdf zobrazující umístěnou poznámku](https://example.com/images/generated-pdf.png) + +*Text alternativy obrázku: Vygenerovaný PDF dokument vytvořený pomocí C# Aspose.Pdf zobrazující umístěnou poznámku* (obsahuje primární klíčové slovo). + +## Kompletní, spustitelný příklad + +Spojením všech částí dohromady získáte kompletní konzolovou aplikaci, kterou můžete zkopírovat, sestavit a spustit: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Očekávaný výstup** při spuštění programu: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Otevření `output.pdf` zobrazí jednu stránku s textem **Important note** umístěným na souřadnicích, které jste zadali. + +## Běžné varianty a okrajové případy + +| Scénář | Co změnit | Proč je to důležité | +|----------|----------------|----------------| +| **Různá velikost stránky** | `pdfDocument.Pages.Add(PageSize.A5)` | Menší stránky snižují velikost souboru a lépe se vejdou na mobilní obrazovky. | +| **Více poznámek** | Procházet kolekci řetězců a vytvořit `Paragraph` pro každý, přičemž se zvyšuje souřadnice `Y`. | Umožňuje hromadné generování poznámek ve stylu odrážek. | +| **Unicode znaky** | Zajistěte, aby byl zdrojový soubor uložen jako UTF-8 a nastavte `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf podporuje Unicode přímo, ale kódování souboru musí odpovídat. | +| **PDF chráněné heslem** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Přidává zabezpečení pro důvěrné poznámky. | +| **Výstup ve vysokém rozlišení** | Nastavte `pdfDocument.PageInfo.Width` a `Height` na větší hodnoty před přidáním obsahu. | Užitečné pro tisk PDF ve velkém formátu. | + +## Tipy pro produkční použití + +* **Znovu použijte instanci `Document`** při generování mnoha PDF v jedné žádosti, aby se snížil tlak na garbage collector. +* **Uvolněte objekty** (`pdfDocument.Dispose()`), pokud vytváříte mnoho dokumentů ve smyčce. +* **Ověřte souřadnice**: hodnota `Y` nesmí překročit výšku stránky; jinak bude text oříznut. +* **Použijte `TextFragmentAbsorber`** k pozdější extrakci poznámky podle její značky (`/P`), pokud potřebujete načíst obsah zpět. + +## Závěr + +Nyní víte, jak **vytvořit PDF dokument** s Aspose.Pdf, **přidat prázdnou stránku PDF**, **přidat odstavec do PDF**, **jak přidat poznámku do PDF** a **přesně umístit text v PDF**. Kompletní příklad ukazuje čistý, opakovatelný workflow, který můžete rozšířit pro faktury, reporty nebo jakýkoli scénář automatizace dokumentů. + +Dále prozkoumejte související témata, jako je **přidávání obrázků do PDF**, **vytváření tabulek s Aspose.Pdf** nebo **aplikace digitálních podpisů**. Každé z nich staví na stejných základních konceptech, které jsou zde pokryty, takže budete připraveni řešit složitější úlohy generování PDF. + +Šť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í přístupy k implementaci ve vašich projektech. + +- [Vytvoření PDF dokumentu s Aspose.PDF – Přidání stránky, tvaru a uložení](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Jak přidat prázdnou stránku na konec PDF pomocí Aspose.PDF pro .NET | Průvodce krok za krokem](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Jak přidat textový razítko do PDF pomocí Aspose.PDF .NET: Komplexní průvodce](/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/images-graphics/_index.md b/pdf/czech/net/images-graphics/_index.md index db1250553f..466058e751 100644 --- a/pdf/czech/net/images-graphics/_index.md +++ b/pdf/czech/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Naučte se, jak vytvářet vizuálně přitažlivé dokumenty PDF extrakcí a zv ### [Kreslení průhledných tvarů v PDF pomocí Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Výukový program pro kódování Aspose.PDF Net +### [Nastavení průhlednosti PDF v C# pomocí Aspose.PDF – kompletní průvodce](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Naučte se, jak nastavit průhlednost PDF dokumentů v C# pomocí Aspose.PDF, včetně praktických ukázek kódu. + ### [Efektivní identifikace obrázků PDF s Aspose.PDF pro .NET](./master-image-identification-aspose-pdf-net/) Naučte se, jak identifikovat obrázky ve stupních šedi a RGB v PDF pomocí Aspose.PDF pro .NET. Tento tutoriál se zabývá instalací, extrakcí obrázků a tipy pro výkon. diff --git a/pdf/czech/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/czech/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..9c6ddd5cde --- /dev/null +++ b/pdf/czech/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: Nastavte průhlednost PDF v C# pomocí Aspose.PDF – naučte se, jak pomocí + několika řádků kódu upravit průhlednost tahů a výplně. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: cs +lastmod: 2026-08-08 +og_description: Nastavte rychle neprůhlednost PDF v C#. Tento průvodce ukazuje, jak + pomocí API grafického stavu Aspose.PDF upravit průhlednost obrysu a výplně. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Nastavte průhlednost PDF v C# pomocí Aspose.PDF – krok za krokem tutoriál +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Nastavení průhlednosti PDF v C# s Aspose.PDF – kompletní průvodce +url: /cs/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Nastavení opacity PDF v C# s Aspose.PDF – kompletní průvodce + +Pokud potřebujete **nastavit opacity PDF** pro konkrétní kreslicí operace, tento tutoriál vám přesně ukáže, jak to provést pomocí Aspose.PDF pro .NET. Ať už vytváříte vodoznaky, poloprůhledné překryvy nebo vlastní grafiku, naučíte se stručný, připravený pro produkci přístup. + +V následujících sekcích pokryjeme vše od načtení PDF po úpravu jeho grafického stavu, přidání nové definice opacity a uložení výsledku. Není potřeba žádná externí dokumentace – stačí kód níže a stručné vysvětlení každého kroku. + +## Požadavky + +* .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.7+) +* Platná licence Aspose.PDF pro .NET (bezplatná zkušební verze funguje pro hodnocení) +* Vstupní PDF soubor (`input.pdf`) umístěný ve složce, do které můžete číst/zapisovat +* Visual Studio 2022 nebo jakékoli C# IDE, které preferujete + +## Krok 1 – Načtení PDF dokumentu (Aspose.PDF pro .NET) + +Prvním úkolem je otevřít existující PDF. Aspose.PDF představuje PDF soubor pomocí třídy `Document`, která vám poskytuje plný přístup ke stránkám, zdrojům a nízkoúrovňovým objektům. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Proč je to důležité*: Načtení dokumentu vytvoří model v paměti, který můžete bezpečně upravovat. Příkaz `using` zajistí automatické uvolnění souborového handle po dokončení. + +## Krok 2 – Získání první stránky, kterou chcete upravit + +Opacity je definována na úrovni stránky pomocí slovníku zdrojů stránky. Zde cílíme na první stránku, ale můžete iterovat přes `doc.Pages` pro hromadnou operaci. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Proč je to důležité*: Každá stránka má vlastní kolekci `Resources`, která ukládá grafické stavy, písma, obrázky atd. Úprava správné stránky zajišťuje, že efekt opacity se objeví tam, kde očekáváte. + +## Krok 3 – Otevření slovníku zdrojů stránky pro úpravy + +Aspose.PDF poskytuje pomocníka `DictionaryEditor` pro manipulaci s nízkoúrovňovými PDF slovníky, aniž by došlo k poškození struktury souboru. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Proč je to důležité*: Přímá úprava PDF slovníků COS (Content Object System) je jediný způsob, jak vložit vlastní grafický stav. Editor abstrahuje nízkoúrovňovou syntaxi a zároveň zachovává platnost PDF. + +## Krok 4 – Získání existujícího slovníku ExtGState + +**ExtGState** (externí grafický stav) slovník obsahuje opacity, režim prolnutí, šířku čáry atd. Pokud neexistuje, Aspose.PDF jej vytvoří automaticky při přidání nového záznamu. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Proč je to důležité*: Bez záznamu `ExtGState` nemůžete později v proudu obsahu stránky odkazovat na vlastní opacity. Tento krok zajišťuje, že kontejner je přítomen. + +## Krok 5 – Vytvoření nového grafického stavu s požadovanou opacity + +Grafický stav je kolekce parametrů. Pro opacity nastavíme `CA` (opacity tahy) a `ca` (opacity výplně). Také nastavíme režim prolnutí (`BM`), který řídí, jak průhledné pixely interagují s podkladovým obsahem. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Proč je to důležité*: `CA` a `ca` přijímají hodnoty od 0 (zcela průhledné) do 1 (zcela neprůhledné). Upravením těchto čísel dosáhnete požadovaného vizuálního efektu. Režim prolnutí `"Normal"` je nejčastější, ale můžete experimentovat s `"Multiply"` nebo `"Screen"` pro umělecké efekty. + +## Krok 6 – Registrace nového grafického stavu v kolekci ExtGState + +Každý grafický stav musí mít jedinečný název (např. `GS0`). Přidáme náš slovník do kolekce `ExtGState` a poté aktualizujeme zdroje stránky. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Proč je to důležité*: Pojmenováním stavu (`GS0`) jej můžete později v proudu obsahu stránky odkazovat pomocí operátoru `gs`. Pokud potřebujete více úrovní opacity, vytvořte další záznamy (`GS1`, `GS2`, …). + +## Krok 7 – Použití grafického stavu na kreslicí příkazy (volitelné) + +Pokud chcete okamžitě použít opacity na existující obsah, musíte upravit proud obsahu stránky. Níže je jednoduchý příklad, který kreslí poloprůhledný obdélník pomocí nově vytvořeného stavu. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Proč je to důležité*: Operátor `gs` (`SetGraphicsState`) říká PDF rendereru, aby použil hodnoty opacity definované v `GS0` pro všechny následující kreslicí příkazy. Pár `grestore`/`gsave` zajišťuje, že ostatní prvky stránky zůstanou nedotčeny. + +## Krok 8 – Uložení upraveného PDF + +Nakonec zapíšete aktualizovaný dokument zpět na disk. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Proč je to důležité*: Uložení dokončí všechny změny, vloží nový grafický stav a vytvoří PDF, které může jakýkoli prohlížeč (Adobe Acrobat, Chrome atd.) zobrazit s požadovanou průhledností. + +### Očekávaný výsledek + +Otevřete `output.pdf` v PDF prohlížeči. Měli byste vidět červený obdélník, jehož obrys je 80 % neprůhledný a výplň 40 % neprůhledná, hladce se prolínající s jakýmkoli podkladovým obsahem. Zbytek stránky zůstane beze změny. + +## Běžné varianty a okrajové případy + +| Situace | Co změnit | Důvod | +|-----------|----------------|--------| +| **Více úrovní opacity** | Vytvořte další grafické stavy (`GS1`, `GS2`, …) s různými hodnotami `CA`/`ca` a odkazujte na ně podle potřeby | Umožňuje jemnou kontrolu nad různými prvky | +| **Různé režimy prolnutí** | Použijte `"Multiply"`, `"Screen"`, `"Overlay"` atd. místo `"Normal"` v položce `BM` | Vytváří umělecké efekty prolnutí | +| **Aplikace na existující proud obsahu** | Vložte `SetGraphicsState` před konkrétní kreslicí operátory, které chcete ovlivnit | Zabrání nechtěné opacity na nesouvisejících objektech | +| **Velké PDF** | Zpracovávejte stránky ve smyčce `foreach (Page p in doc.Pages)`, aby se předešlo načtení celého souboru najednou do paměti | Zlepšuje výkon a snižuje zatížení paměti | +| **Chybějící ExtGState** | Kód v kroku 4 již vytvoří slovník, pokud chybí, takže není potřeba další zpracování | Zajišťuje, že slovník je přítomen | + +### Pro tip + +Když přidáváte mnoho vlastních grafických stavů, udržujte pojmenování konzistentní (`GS0`, `GS1`, …) a v komentáři zdokumentujte účel každého. To usnadní budoucí údržbu, zejména v kolaborativních projektech. + +## Kompletní, spustitelný příklad + +Níže je kompletní program, který můžete zkopírovat, vložit a spustit. Obsahuje všechny kroky, potřebné `using` direktivy a komentáře. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Spusťte program, + +## 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. + +- [Nastavení obrázkových pozadí v PDF pomocí Aspose.PDF pro .NET: Kompletní průvodce](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Jak vytvořit čárkované čáry v PDF pomocí Aspose.PDF pro .NET: Krok za krokem průvodce](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Jak přizpůsobit PDF pomocí Aspose.PDF pro .NET: Nastavení okrajů stránky a kreslení čar](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..a371050c2e 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. | +| [Uložit PDF dokument pomocí Aspose.PDF – kompletní průvodce](./save-pdf-document-with-aspose-pdf-complete-guide/) | Kompletní návod, jak uložit PDF dokument pomocí Aspose.PDF v .NET, včetně nastavení možností a optimalizace výstupu. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/czech/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..75745808d9 --- /dev/null +++ b/pdf/czech/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Uložte PDF dokument pomocí Aspose.PDF, naučte se, jak přidávat stránky + do PDF, vyplňovat pole formuláře PDF a vytvořit PDF s formulářovými poli v jednom + tutoriálu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: cs +lastmod: 2026-08-08 +og_description: Uložte PDF dokument pomocí Aspose.PDF a zjistěte, jak přidávat stránky + do PDF, vyplňovat pole formuláře PDF a vytvářet PDF s formulářovými poli rychle + a spolehlivě. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Uložení PDF dokumentu pomocí Aspose.PDF – krok za krokem +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Uložení PDF dokumentu pomocí Aspose.PDF – kompletní průvodce +url: /cs/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Uložení PDF dokumentu pomocí Aspose.PDF – kompletní průvodce + +Pokud potřebujete **uložit PDF dokument**, který obsahuje interaktivní formulářová pole, tento tutoriál vám přesně ukáže, jak na to. Uvidíte, jak přidat stránky PDF, vytvořit PDF formulář a vyplnit pole PDF formuláře — vše pomocí Aspose.PDF pro .NET. + +V následujících sekcích se naučíte: + +* přidat více stránek do nového PDF, +* vytvořit textové pole formuláře na první stránce, +* umístit widget anotaci pro stejné pole na druhé stránce, +* nastavit hodnotu pole (vyplnit PDF formulářové pole), +* a nakonec **uložit PDF dokument** na disk. + +Žádné externí nástroje nejsou potřeba; kompletní spustitelný kód je zahrnut. + +## Požadavky + +* .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.7.2+). +* Platná licence Aspose.PDF pro .NET nebo bezplatný evaluační klíč. +* Visual Studio 2022 (nebo jakékoli C# IDE). + +Přidejte NuGet balíček: + +```bash +dotnet add package Aspose.PDF +``` + +## Jak přidat stránky PDF + +Prvním krokem je vytvořit prázdný PDF a přidat potřebné stránky. Přidání stránek před definováním formulářových polí zajišťuje, že souřadnice rozvržení jsou přesné. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Proč je to důležité:* Každý objekt `Page` představuje tisknutelné plátno. Přidáním stránek brzy můžete na ně později odkazovat při umisťování formulářových prvků. + +## Jak vytvořit PDF formulář pomocí Aspose.PDF + +PDF formulář se skládá z **definice pole** (logický kontejner) a jedné nebo více **widget anotací** (vizuální reprezentace). Příklad vytváří `TextBoxField` pojmenované **Comments** na první stránce. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Proč je to důležité:* Souřadnice `Rectangle` jsou vyjádřeny v bodech (1 pt = 1/72 in). Upravením hodnot je přizpůsobíte svému návrhu. + +## Vyplnění PDF formulářového pole + +Můžete nastavit hodnotu pole programově před uložením dokumentu. To je jádro **vyplnění PDF formulářového pole**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Pokud potřebujete pole vyplnit později (např. z uživatelského vstupu), jednoduše přiřaďte nový řetězec do `commentsField.Value` před voláním `Save`. + +## Přidání widget anotace pro stejné pole na druhé stránce + +Widget anotace zpřístupní formulářové pole na stránce. Přidáním druhého widgetu se stejné logické pole objeví na obou stránkách, což demonstruje **vytvoření PDF s formulářovými poli**, která se rozprostírají přes více stránek. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Proč je to důležité:* Kolekce `Widgets` může obsahovat libovolný počet vizuálních reprezentací. Uživatelé mohou s polem interagovat na kterékoliv stránce a zadaná hodnota zůstane synchronizována. + +## Připojení pole k anotacím první stránky + +Formulářová pole musí být přidána do kolekce anotací stránky, aby je PDF prohlížeč mohl vykreslit. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Uložení PDF dokumentu + +Nyní, když je formulář plně definován, můžete **uložit PDF dokument** na vámi zvolené místo. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Když otevřete `output.pdf` v Adobe Acrobat Readeru nebo jakémkoli PDF prohlížeči, uvidíte textové pole na stránce 1 a odpovídající pole na stránce 2. Zadání textu do kterékoli z nich aktualizuje stejné podkladové pole. + +## Kompletní, spustitelný příklad + +Níže je celý program, který můžete zkopírovat a vložit do konzolové aplikace. Zkompiluje se a vytvoří popsaný PDF bez jakýchkoli úprav. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Očekávaný výstup:** Soubor pojmenovaný `output.pdf` obsahující dvě stránky. Stránka 1 zobrazuje textové pole označené „Comments“ na souřadnicích (100, 600). Stránka 2 zobrazuje stejné pole na (100, 400). Pole je předvyplněno textem „Enter your feedback here“. Změna textu na kterékoliv stránce aktualizuje stejnou hodnotu při opětovném uložení dokumentu. + +## Časté otázky a řešení okrajových případů + +| Otázka | Odpověď | +|----------|--------| +| *Mohu přidat více než jeden widget pro stejné pole?* | Ano. Přidejte další objekty `WidgetAnnotation` do `commentsField.Widgets`. Každý widget může být umístěn na libovolné stránce. | +| *Co když potřebuji nastavit vzhled pole (písmo, okraj, pozadí)?* | Použijte `commentsField.DefaultAppearance` k určení písma a barvy a nastavte vlastnosti `commentsField.Border` pro styl čáry. | +| *Jak udělat pole jen pro čtení?* | Nastavte `commentsField.ReadOnly = true;`. Pole bude i nadále zobrazovat svou hodnotu, ale uživatel ji nemůže upravovat. | +| *Je možné vyplnit pole po vytvoření PDF?* | Ano. Načtěte uložený PDF pomocí `new Document("output.pdf")`, najděte pole přes `pdfDocument.Form["Comments"]`, přiřaďte novou `Value` a znovu zavolejte `Save`. | +| *Co když PDF musí splňovat standard PDF/A pro archivaci?* | Po vytvoření dokumentu zavolejte `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` před uložením. | + +## Tipy z praxe + +* **Pro tip:** Uchovávejte logický název pole krátký a jedinečný; je to identifikátor, který použijete při programovém vyplňování formuláře později. +* **Pozor na:** Překrývající se obdélníky widgetů. Překrytí způsobuje artefakty při vykreslování v některých prohlížečích. +* **Poznámka k výkonu:** Přidávání mnoha stránek nebo widgetů ve smyčce lze optimalizovat opakovaným použitím jedné instance `Rectangle` a měněním jen jejích souřadnic. + +## Závěr + +Nyní víte, jak **uložit PDF dokument**, který obsahuje plně funkční formulář, jak **vyplnit PDF formulářové pole**, a jak **přidat stránky PDF** a **vytvořit PDF s formulářovými poli** pomocí Aspose.PDF pro .NET. Kompletní příklad demonstruje celý workflow od vytvoření dokumentu až po finální uložení. + +Dále prozkoumejte související témata, jako **přidání zaškrtávacích políček**, **vytvoření rozbalovacích seznamů** nebo **zploštění formuláře** pro distribuci jen pro čtení. Každé z nich staví na stejných principech pokrytých zde a rozšiřuje vaše možnosti automatizace PDF. + +Šť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í 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 PDF s Aspose – Přidat formulářové pole a stránky](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Vytvořit PDF dokument s Aspose – Přidat stránku, textové pole a formulář](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Jak přidat a extrahovat PDF formulářová pole pomocí Aspose.PDF pro .NET: Kompletní průvodce](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/czech/net/programming-with-pdf-pages/_index.md index 08a55ca7f4..ca7495d566 100644 --- a/pdf/czech/net/programming-with-pdf-pages/_index.md +++ b/pdf/czech/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Návody obsahují podrobné pokyny, podrobné příklady kódu a jasná vysvětl | [Aktualizovat rozměry stránky PDF](./update-dimensions/) | Zjistěte, jak snadno aktualizovat rozměry stránek PDF pomocí Aspose.PDF pro .NET v tomto komplexním návodu krok za krokem. | | [Přiblížit na obsah stránky v souboru PDF](./zoom-to-page-contents/) | V tomto komplexním průvodci se naučte, jak přiblížit obsah stránky v souborech PDF pomocí Aspose.PDF pro .NET. Vylepšete své dokumenty PDF podle svých specifických potřeb. | | [Přidat čísla stránek do PDF pomocí C# – Kompletní krok‑za‑krokem průvodce](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Kompletní krok‑za‑krokem průvodce přidáním čísel stránek do PDF pomocí C# a Aspose.PDF pro .NET. | +| [Přidat Batesovo číslování PDF pomocí Aspose – průvodce krok za krokem](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Kompletní průvodce přidáním Batesova číslování do PDF souborů pomocí Aspose.PDF pro .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/czech/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..6e29e81c8b --- /dev/null +++ b/pdf/czech/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Přidat Batesovo číslování PDF pomocí Aspose.Pdf v C#. Tento tutoriál + také ukazuje, jak přidat prázdnou stránku do PDF a generovat PDF programově. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: cs +lastmod: 2026-08-08 +og_description: Přidejte Batesovo číslování PDF pomocí Aspose.Pdf v C#. Naučte se + přidávat prázdnou stránku do PDF, generovat PDF programově a uložit finální dokument + během několika minut. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Přidání Batesova číslování do PDF pomocí Aspose – kompletní průvodce C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Přidání Batesova číslování PDF pomocí Aspose – krok za krokem +url: /cs/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Přidání Batesova číslování PDF pomocí Aspose – krok za krokem + +Přidání Batesova číslování PDF pomocí Aspose.Pdf je jednoduché, jakmile pochopíte základní kroky. Pokud také potřebujete přidat prázdnou stránku PDF nebo generovat PDF programově, tento průvodce pokrývá vše, co potřebujete. + +V tomto tutoriálu budete: + +* Vytvořit nový PDF dokument od nuly. +* Přidat prázdnou stránku PDF, která bude hostit Batesova čísla. +* Nakonfigurovat artefakt Batesova číslování s vlastním prefixem. +* Uložit PDF, aby se čísla objevila v vygenerovaném souboru. + +Na konci budete mít plně funkční C# konzolovou aplikaci, která vytváří PDF obsahující Batesova čísla jako **CASE‑1000**, **CASE‑1001**, … – běžný požadavek pro právní a e‑discovery workflowy. + +## Požadavky + +* .NET 6.0 SDK nebo novější (kód také funguje s .NET Framework 4.8). +* Visual Studio 2022 nebo jakékoli C#‑kompatibilní IDE. +* Platná licence Aspose.Pdf pro .NET (nebo bezplatný evaluační klíč). +* Základní znalost syntaxe C#. + +> **Tip:** Pokud spustíte kód bez licence, Aspose přidá malý vodoznak do výstupního PDF. + +## Krok 1: Nastavení projektu a import Aspose.Pdf + +Vytvořte nový konzolový projekt a přidejte NuGet balíček Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Direktivy `using` potřebné pro příklad jsou: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Tyto jmenné prostory vám poskytují přístup ke třídám `Document`, `Page` a `BatesNumberingArtifact`, které budou použity později. + +## Krok 2: Přidání prázdné stránky PDF + +Batesovo číslo musí být připojeno ke stránce, takže nejprve vytvoříme prázdnou stránku, která přijme artefakt číslování. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Třída `Document` představuje celý PDF soubor, zatímco `Pages.Add()` vloží novou, prázdnou stránku na konec kolekce stránek dokumentu. Protože dokument začíná prázdný, tento volání také vytvoří první stránku. + +## Krok 3: Konfigurace artefaktu Batesova číslování + +Nyní definujeme, jak by Batesova čísla měla vypadat. `BatesNumberingArtifact` vám umožňuje nastavit počáteční číslo, prefix, suffix a možnosti formátování. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Proč je to důležité:** +Nastavení `StartNumber` na **1000** odpovídá typickým konvencím právních spisů. `Prefix` zajistí, že každé číslo bude vypadat jako **CASE‑1000**, **CASE‑1001**, … což usnadňuje vyhledávání a řazení. + +## Krok 4: Připojení artefaktu k stránce + +Artefakt musí být přidán do kolekce `Artifacts` stránky, aby ho Aspose vykreslil na každé stránce během ukládání. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Když je dokument uložen, Aspose automaticky opakuje artefakt na všech stránkách a zvyšuje číslo pro každou následující stránku. + +## Krok 5: (Volitelné) Přidání dalších stránek + +Pokud potřebujete více stránek, jednoduše opakujte `pdfDocument.Pages.Add()`. Artefakt Batesova číslování, který jste připojili v předchozím kroku, se automaticky objeví na každé nové stránce. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Krok 6: Uložení PDF – generování PDF programově + +Nakonec dokument uložíme na disk. V tomto okamžiku jsou Batesova čísla vykreslena na stránkách. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Očekávaný výsledek:** +Otevřete *BatesNumberedDocument.pdf* a uvidíte třístránkové PDF. Každá stránka zobrazuje Batesovo číslo v pravém dolním rohu: + +* Stránka 1 → **CASE‑1000** +* Stránka 2 → **CASE‑1001** +* Stránka 3 → **CASE‑1002** + +Čísla jsou automaticky inkrementována, protože artefakt je připojen ke kolekci stránek. + +## Kompletní, spustitelný příklad + +Spojením všeho dohromady získáte kompletní konzolový program, který můžete zkopírovat, vložit a spustit: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Spusťte program pomocí `dotnet run`. Po dokončení najděte soubor na ploše a ověřte Batesova čísla. + +![Příklad přidání Batesova číslování PDF](/images/bates-numbering.png "Příklad přidání Batesova číslování PDF") + +## Časté otázky a okrajové případy + +### Co když potřebuji jiné písmo nebo pozici? + +`BatesNumberingArtifact` vystavuje vlastnosti jako `FontSize`, `FontColor`, `HorizontalAlignment` a `VerticalAlignment`. Například: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Jak vyloučit konkrétní stránku z číslování? + +Vytvořte samostatný `BatesNumberingArtifact` pro stránky, které chcete číslovat, a přidejte jej jen těmto stránkám. Stránky bez připojeného artefaktu zůstanou nečíslované. + +### Funguje to s existujícími PDF? + +Ano. Místo `new Document()` načtěte existující soubor: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Pak připojte artefakt k požadovaným stránkám a uložte. + +## Závěr + +Nyní víte, jak **přidat Batesovo číslování PDF** pomocí Aspose.Pdf, jak **přidat prázdnou stránku PDF** a jak **generovat PDF programově** v čistém, znovupoužitelném C# řešení. Přístup funguje s libovolným počtem stránek, vlastními prefixy a možnostmi stylování, což vám dává plnou kontrolu nad konečným dokumentem. + +Další kroky, které můžete prozkoumat: + +* Use **create pdf as + +## 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 vašich projektech. + +- [Jak přidat a přizpůsobit čísla 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 prázdnou stránku na konec PDF pomocí Aspose.PDF pro .NET \| Krok za krokem průvodce](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Vytvořit PDF dokument pomocí Aspose.PDF – Přidat stránku, tvar a uložit](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 08079df751..87413d084d 100644 --- a/pdf/czech/net/programming-with-security-and-signatures/_index.md +++ b/pdf/czech/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ Tento tutoriál vám poskytne podrobný přehled metod a technik pro zajištěn | [Podepisujte pomocí čipové karty s použitím pole pro podpis](./sign-with-smart-card-using-signature-field/) | Naučte se, jak bezpečně podepisovat PDF soubory pomocí čipové karty s Aspose.PDF pro .NET. Pro snadnou implementaci postupujte podle našeho podrobného návodu. | | [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# s Aspose.PDF – kompletní průvodce](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Naučte se, jak v C# ověřit digitální podpis PDF pomocí Aspose.PDF, krok za krokem s praktickými ukázkami. | +| [Návod na podpis PDF: ověření digitálního podpisu PDF pomocí Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Naučte se, jak ověřit digitální podpis PDF pomocí Aspose.PDF v .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/czech/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/czech/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..21256915a2 --- /dev/null +++ b/pdf/czech/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-08-08 +description: Návod na digitální podpis PDF, který ukazuje, jak ověřit digitální podpis + PDF pomocí možností ověření podpisu a kódu v C# – rychlý krok‑za‑krokem průvodce. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: cs +lastmod: 2026-08-08 +og_description: Návod na PDF podpis vás provede ověřením digitálního podpisu PDF pomocí + Aspose.PDF. Naučte se konfigurovat možnosti ověření podpisu a zkontrolovat výsledek. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: Tutoriál k PDF podpisu – ověřte digitální podpisy PDF v C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Návod na podpis PDF: ověření digitálního podpisu PDF pomocí Aspose.PDF' +url: /cs/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – ověření digitálního podpisu PDF v C# + +Pokud potřebujete **pdf signature tutorial**, který přesně ukazuje, jak ověřit digitální podpis PDF, tento průvodce vás provede. Uvidíte, jak načíst podepsaný PDF, nakonfigurovat **signature validation options**, spustit ověření a zobrazit výsledek – vše s jasným, spustitelným C# kódem. + +Ověřování podpisu PDF je nezbytné při zpracování smluv, faktur nebo jakýchkoli právně závazných dokumentů. Tento tutoriál vás provede kompletním pracovním postupem, takže můžete integrovat kontrolu podpisů do svých aplikací, aniž byste hádali, které API volání jsou potřeba. + +## Co dosáhnete + +* Načtěte podepsaný PDF soubor pomocí Aspose.PDF. +* Nastavte **signature validation options**, například hash algoritmus. +* Zavolejte metodu `Validate` pro **validate pdf digital signature**. +* Vypište jasnou zprávu „Signature valid“ do konzole. + +**Předpoklady** + +* .NET 6.0 (nebo novější) nainstalováno. +* Visual Studio 2022 (nebo jakékoli C# IDE). +* NuGet balíček Aspose.PDF pro .NET (`Aspose.Pdf`). + +> **Tip:** Použijte nejnovější verzi Aspose.PDF, abyste získali podporu pro algoritmy SHA‑3 a zlepšený výkon ověřování. + +## Krok 1: Instalace NuGet balíčku Aspose.PDF + +Otevřete svůj projekt ve Visual Studio a spusťte následující příkaz v Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Balíček přidá jmenný prostor `Aspose.Pdf`, který obsahuje třídu `Document` a API související s podpisy, jež budete používat. + +## Krok 2: Načtení podepsaného PDF dokumentu + +První řádek kódu vytvoří objekt `Document`, který představuje PDF soubor na disku. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Proč je to důležité:* Třída `Document` parsuje strukturu PDF a zpřístupňuje kolekci `Signatures`, která obsahuje všechny vložené digitální podpisy. Pokud je cesta k souboru nesprávná, vyvolá se výjimka, proto před spuštěním programu ověřte správnost cesty. + +## Krok 3: Konfigurace možností ověření podpisu + +Můžete přizpůsobit proces ověření pomocí třídy `SignatureValidationOptions`. V tomto tutoriálu specifikujeme hash algoritmus, ale můžete také nastavit kontroly odvolání certifikátu, ověření časové razítka a další. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Proč je to důležité:* Hash algoritmus musí odpovídat tomu, který byl použit při vytváření podpisu. Použití nesprávného algoritmu způsobí selhání ověření, i když je podpis jinak správný. + +## Krok 4: Ověření prvního podpisu + +Většina PDF obsahuje jediný podpis, ale kolekce `Signatures` může obsahovat více. Tento příklad ověřuje první položku (`[0]`). Metoda `Validate` vrací Boolean hodnotu indikující úspěch. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* Pokud PDF neobsahuje žádné podpisy, `document.Signatures.Count` bude `0` a přístup k `[0]` vyvolá `IndexOutOfRangeException`. Ochráníte se tím jednoduchou kontrolou: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Krok 5: Zobrazení výsledku ověření + +Nakonec výsledek zapíšete do konzole. Tento krok ukazuje výsledek **check pdf signature** v lidsky čitelném formátu. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Po spuštění programu byste měli vidět: + +``` +Signature valid: True +``` + +Pokud je podpis poškozený, používá nepodporovaný algoritmus nebo je certifikát odvolán, výstup bude `False`. + +## Kompletní, spustitelný příklad + +Zkopírujte následující kód do nového konzolového projektu (`dotnet new console`) a nahraďte `YOUR_DIRECTORY/signed.pdf` cestou k vašemu podepsanému PDF souboru. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Očekávaný výstup + +``` +Signature valid: True +``` + +Pokud ověření podpisu selže, konzole zobrazí `Signature valid: False`. + +## Časté otázky a řešení problémů + +| Otázka | Odpověď | +|----------|--------| +| **Co když PDF používá jiný hash algoritmus?** | Změňte `HashAlgorithm` v `SignatureValidationOptions` tak, aby odpovídal, např. `HashAlgorithm.SHA256`. | +| **Jak ověřím všechny podpisy v PDF s více podpisy?** | Projděte `document.Signatures` a pro každou položku zavolejte `Validate`. | +| **Mohu ověřit řetězec důvěry podpisového certifikátu?** | Nastavte `validationOptions.CheckCertificateRevocation = true` a případně poskytněte vlastní `CertificateStore` zahrnující důvěryhodné kořenové certifikáty. | +| **Co když potřebuji podporu ověření časové razítka?** | Povolením `validationOptions.CheckTimestamp = true`. Aspose.PDF pak ověří vložený token časové razítka. | +| **Existuje způsob, jak získat podrobné chyby ověření?** | Použijte `ValidateEx(validationOptions, out ValidationResult result)`; `result` obsahuje `ErrorMessage` a `ErrorCode` pro každé selhání. | + +## Další kroky + +* Prozkoumejte **validate pdf signature** pro více podpisů iterací přes `document.Signatures`. +* Spojte tento tutoriál s **check pdf signature** ve webovém API pro poskytování ověřování v reálném čase nahraných smluv. +* Prozkoumejte podrobněji **signature validation options**, jako jsou kontroly CRL/OCSP, ověřování časových razítek a vlastní úložiště důvěry. + +Nyní máte kompletní **pdf signature tutorial**, který ukazuje, jak **validate pdf digital signature** pomocí Aspose.PDF v C#. Klidně přizpůsobte kód svému workflow, přidejte logování nebo jej integrujte do větších pipeline pro zpracování dokumentů. Šť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í ukázky kódu s podrobnými vysvětleními krok za krokem, aby vám pomohly zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vlastních projektech. + +- [Digitální podpis Aspose Pdf Net tutoriál](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digitální podpis Aspose Pdf Net tutoriál](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digitální podpis Aspose Pdf Net tutoriál](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/czech/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0a0a59a5af --- /dev/null +++ b/pdf/czech/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-08-08 +description: Ověřte podpis PDF v C# pomocí Aspose.PDF. Naučte se, jak ověřit digitální + podpis PDF a vypsat podpisy PDF během několika řádků kódu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: cs +lastmod: 2026-08-08 +og_description: Ověřte podpis PDF v C# pomocí Aspose.PDF. Tento průvodce vám ukáže, + jak ověřit digitální podpis PDF, vypsat podpisy PDF a efektivně zacházet s kompromitovanými + podpisy. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Ověření podpisu PDF v C# – rychlý tutoriál Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Ověření podpisu PDF v C# s Aspose.PDF – kompletní průvodce +url: /cs/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ověření PDF podpisu v C# s Aspose.PDF – kompletní průvodce + +Pokud potřebujete **ověřit PDF podpis** v .NET aplikaci, tento průvodce vám ukáže stručný způsob, jak to provést pomocí Aspose.PDF. Naučíte se, jak **validovat digitální podpis PDF**, **vypsat PDF podpisy** a detekovat kompromitované podpisy během několika řádků kódu. + +Tutorial pokrývá vše od instalace knihovny až po zpracování okrajových případů, jako jsou nepodepsané dokumenty nebo šifrované PDF. Na konci budete schopni integrovat ověřování podpisů do jakéhokoli C# projektu, čímž zajistíte pravost příchozích PDF souborů. + +## Požadavky + +- .NET 6.0 nebo novější (kód také funguje s .NET Framework 4.6+). +- Základní znalost C# a Visual Studio (nebo libovolného IDE, které preferujete). +- Licence Aspose.PDF for .NET (bezplatná zkušební verze funguje pro hodnocení). + +Pokud splňujete tyto požadavky, jste připraveni začít ověřovat PDF podpisy. + +## Ověření PDF podpisu – nastavení projektu + +1. **Přidejte NuGet balíček Aspose.PDF** + Otevřete konzoli Package Manager a spusťte: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importujte požadované jmenné prostory** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## Načtení PDF dokumentu + +Prvním funkčním krokem je otevřít PDF, které chcete zkontrolovat. Aspose.PDF načte soubor do paměti, což vám umožní dotazovat se na jeho podpisy. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Proč je to důležité** – Načtení dokumentu uvnitř bloku `using` zaručuje, že souborový handle bude okamžitě uvolněn, čímž se předejde problémům se zamčením souboru v dlouho běžících službách. + +## Vypsání PDF podpisů + +Než validujete podpis, možná budete chtít vědět, kolik podpisů je v dokumentu. Tento krok demonstruje schopnost **vypsat PDF podpisy**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Vysvětlení** + +- `document.Signatures` vrací kolekci objektů `Signature`. +- `Count` vám říká, kolik podpisů existuje. +- Každý `Signature` poskytuje metadata jako `Id`, `SignatureType` a `Reason`, která mohou být užitečná pro auditní záznamy. + +**Okrajový případ** – Pokud PDF neobsahuje žádné podpisy, `Count` bude `0` a smyčka se neprovede. Tento scénář můžete ošetřit elegantně: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validace digitálního podpisu PDF – detekce kompromitovaných podpisů + +Nyní, když můžete vyjmenovat podpisy, hlavním úkolem je **ověřit integritu PDF podpisu**. Aspose.PDF poskytuje vlastnost `IsCompromised`, která vrací `true`, když kryptografický hash podpisu již neodpovídá obsahu dokumentu. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Proč to funguje** + +- `Signature.IsCompromised` provádí kompletní kryptografickou validaci pomocí vloženého řetězce certifikátů. +- Operátor LINQ `Any` zastaví kontrolu při prvním kompromitovaném podpisu, což činí kontrolu efektivní i u dokumentů s mnoha podpisy. + +### Zpracování více podpisů jednotlivě + +Pokud potřebujete zjistit, který konkrétní podpis selhal, iterujte místo použití `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Tip:** Uložte výsledek validace spolu s `sig.Id` do databáze pro pozdější forenzní analýzu. + +## Výstup výsledků a zohlednění okrajových případů + +Níže je kompletní spustitelný program, který kombinuje výše uvedené kroky. Načte PDF, vypíše všechny podpisy, ověří je a vytiskne jasný výsledek. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Očekávaný výstup (platné podpisy)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Očekávaný výstup (kompromitovaný podpis)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Časté úskalí a jak se jim vyhnout + +| Problém | Řešení | +|---------|----------| +| PDF je chráněno heslem. | Před přístupem k `Signatures` předávejte heslo pomocí `document.Encrypt.Decrypt(password)`. | +| Není nastavena licence Aspose.PDF. | Použijte `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` aby se odstranily vodoznaky z evaluační verze. | +| Velké PDF způsobují vysokou spotřebu paměti. | Zpracovávejte soubor ve streamovacím režimu (`Document.Load(stream)`) místo načítání celého souboru najednou. | + +## Závěr + +Nyní víte, jak **ověřit PDF podpis** v C# pomocí Aspose.PDF, jak **validovat digitální podpis PDF** a jak **vypsat PDF podpisy** pro reportování nebo auditní účely. Kompletní příklad ukazuje načtení dokumentu, vyjmenování jeho podpisů, kontrolu každého z nich na kompromitaci a ošetření typických okrajových případů. + +Další kroky, které můžete prozkoumat: + +- **Validovat časové razítko** pro zajištění, že podpis byl vytvořen před vypršením platnosti certifikátu. +- **Extrahovat certifikáty podepisujícího** (`sig.Certificate`) pro vlastní validaci důvěryhodného úložiště. +- **Integrovat s ASP.NET Core** pro automatické odmítnutí nahraných PDF, které neprojdou ověřením. + +Neváhejte experimentovat s více podpisy, vlastní logikou validace nebo alternativními PDF knihovnami. Pokud vám tento průvodce přišel užitečný, sdílejte ho se spolupracovníky nebo přidejte své vlastní tipy do komentářů. + +## 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í implementační přístupy ve vašich projektech. + +- [Jak ověřit PDF – Validovat PDF podpis pomocí Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [ověřit PDF podpis v C# – Kompletní průvodce validací digitálního podpisu PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Ověřit digitální podpis](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/czech/net/text-operations/_index.md index 63e3f7cc85..b2f17d0dfb 100644 --- a/pdf/czech/net/text-operations/_index.md +++ b/pdf/czech/net/text-operations/_index.md @@ -164,6 +164,9 @@ Výukový program pro kódování Aspose.PDF Net ### [Stylizace textu v tagovaných PDF souborech pomocí Aspose.PDF pro .NET | Průvodce pro tvorbu přístupných a estetických PDF souborů](./style-text-tagged-pdfs-aspose-pdf-net/) Naučte se, jak upravovat styl textu v tagovaných PDF dokumentech pomocí Aspose.PDF pro .NET. Tato příručka se zabývá instalací, technikami a praktickými aplikacemi pro zlepšení přístupnosti. +### [Jak shrnout PDF pomocí Aspose.Pdf.AI – průvodce](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Naučte se, jak pomocí Aspose.Pdf.AI automaticky vytvořit souhrn obsahu PDF dokumentu v .NET. + ## Další zdroje - [Aspose.PDF pro síťovou dokumentaci](https://docs.aspose.com/pdf/net/) diff --git a/pdf/czech/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/czech/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..58e92946ea --- /dev/null +++ b/pdf/czech/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-08-08 +description: Jak shrnout PDF pomocí Aspose.Pdf.AI – naučte se, jak shrnout PDF pomocí + AI, vygenerovat souhrn PDF a uložit souhrn jako PDF. Kompletní kód a osvědčené postupy. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: cs +lastmod: 2026-08-08 +og_description: Jak vytvořit souhrn PDF pomocí Aspose.Pdf.AI. Tento tutoriál vám ukáže, + jak pomocí AI vytvořit souhrn PDF, vygenerovat souhrn PDF a uložit jej jako PDF + v několika řádcích C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Jak shrnout PDF pomocí Aspose.Pdf.AI – krok za krokem průvodce +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Jak shrnout PDF pomocí Aspose.Pdf.AI – průvodce +url: /cs/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak shrnout PDF pomocí Aspose.Pdf.AI – průvodce + +Pokud potřebujete **jak shrnout PDF** rychle a spolehlivě, můžete nechat AI model udělat těžkou práci. Tento tutoriál vám ukáže přesně, jak shrnout PDF pomocí AI, vygenerovat souhrn PDF a uložit souhrn jako PDF pomocí Aspose.Pdf.AI SDK pro .NET. Dostanete kompletní, spustitelný příklad a vysvětlení každého řádku, abyste mohli řešení přizpůsobit svým projektům. + +Průvodce zahrnuje: + +* Přípravu zdrojové složky a API klíče +* Vytvoření `OpenAIClient`, který komunikuje s modelem +* Konfiguraci možností souhrnu, jako je teplota a cesta k dokumentu +* Sestavení `SummaryCopilot` a asynchronní získání textu souhrnu +* Uložení vygenerovaného souhrnu zpět do PDF souboru + +Nejsou vyžadovány žádné externí služby kromě OpenAI endpointu a kód funguje s .NET 6+ a Aspose.Pdf.AI 23.7 (nebo novějším). + +## Požadavky + +* **.NET 6 SDK** (nebo jakákoli novější verze .NET) +* **Aspose.Pdf.AI pro .NET** – nainstalujte přes NuGet: `dotnet add package Aspose.Pdf.AI` +* **OpenAI API klíč** s přístupem k modelu, který chcete použít (např. `gpt‑4o`) +* PDF soubor, který chcete shrnout (příklad používá `SampleDocument.pdf`) + +Ujistěte se, že složka, kterou zadáte v `dataDirectory`, existuje a že aplikace má oprávnění číst/zapisovat. + +## Krok 1: Nastavení struktury projektu + +Vytvořte konzolový projekt (nebo integrujte kód do existující .NET aplikace). Minimální `Program.cs` vypadá takto: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Proč je tato struktura důležitá + +* **`await using`** automaticky uvolní `OpenAIClient`, čímž uzavře HTTP spojení. +* **`Path.Combine`** vytváří cesty nezávislé na OS, čímž zabraňuje chybám na Windows vs. Linux. +* **Temperature** řídí kreativitu; `0.5` poskytuje vyvážený, faktický souhrn. +* **`GetSummaryAsync`** vrací prostý text, zatímco `SaveSummaryAsync` vytváří správné PDF, které zachovává písma a rozvržení. + +## Krok 2: Pochopení možností souhrnu + +Třída `OpenAISummaryCopilotOptions` vám umožňuje jemně doladit proces shrnování: + +| Option | Purpose | Typical values | +|--------|---------|----------------| +| `WithTemperature(double)` | Řídí náhodnost. `0.0` = deterministické, `1.0` = velmi kreativní. | `0.3‑0.7` pro obchodní dokumenty | +| `WithDocument(string)` | Cesta ke zdrojovému PDF. Musí být čitelný soubor. | Jakákoli absolutní nebo relativní cesta | +| `WithPrompt(string)` *(optional)* | Vlastní výzva pro nasměrování modelu. | “Summarize the key findings in 150 words.” | + +Pokud máte **velké PDF** (více než 10 MB nebo mnoho stránek), zvažte rozdělení dokumentu na menší úseky před shrnováním, aby nedošlo k chybám kvůli limitu tokenů. SDK automaticky neprovádí chunkování; můžete použít `PdfDocument` z `Aspose.Pdf` k extrakci stránek a předávat je po jedné. + +## Krok 3: Spuštění kódu a ověření výstupu + +1. Umístěte `SampleDocument.pdf` do složky `Data`, kterou jste uvedli. +2. Nahraďte `"YOUR_API_KEY"` svým skutečným OpenAI klíčem. +3. Spusťte `dotnet run`. + +V konzoli by se měly zobrazit dvě sekce: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Otevřete `Summary_out.pdf` v libovolném prohlížeči PDF – bude obsahovat stejný souhrnný text, formátovaný výchozím písmem. PDF je plně prohledávatelné, protože SDK vloží text jako standardní PDF stránku. + +## Krok 4: Běžné varianty a ošetření okrajových případů + +### Shrnutí pouze části dokumentu + +Pokud potřebujete **shrnout pdf pomocí ai** pro konkrétní kapitolu, nejprve tuto část extrahujte: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Pak nasměrujte `WithDocument` na `Chapter5.pdf`. + +### Úprava délky souhrnu + +Délku můžete ovlivnit přidáním vlastní výzvy: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Ošetření chyb API + +Síťové výpadky nebo limity kvóty vyvolají `Aspose.Pdf.AI.Exceptions.AIException`. Zabalte volání do `try / catch` bloku: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Uložení souhrnu ve vlastní podobě + +`SaveSummaryAsync` zapisuje prostý text. Pro stylizaci PDF (přidání titulku, záhlaví nebo brandingu) vytvořte nový `PdfDocument` a vložte souhrn ručně: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Krok 5: Tipy na výkon a osvědčené postupy + +* **Znovu použijte `OpenAIClient`** pro více souhrnů ve stejném procesu – vytvoření klienta je levné, ale opětovné použití podkladového `HttpClient` snižuje vyčerpání socketů. +* **Ukládejte souhrn do cache**, pokud se zdrojové PDF nemění; můžete text uložit do databáze a vyhnout se volání API. + +## 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í kódové příklady 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. + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/conversion-export/_index.md b/pdf/dutch/net/conversion-export/_index.md index d41a94665c..2a719af682 100644 --- a/pdf/dutch/net/conversion-export/_index.md +++ b/pdf/dutch/net/conversion-export/_index.md @@ -80,6 +80,9 @@ Een codetutorial voor Aspose.PDF Net ### [PDF naar HTML converteren met aangepaste afbeeldings-URL's met Aspose.PDF .NET: een uitgebreide handleiding](./convert-pdf-html-custom-image-urls-aspose-pdf-net/) Leer hoe u PDF-documenten kunt converteren naar HTML-formaat met Aspose.PDF voor .NET, inclusief het aanpassen van afbeeldings-URL's en het implementeren van een op maat gemaakte strategie voor besparing van bronnen. +### [PDF opslaan als HTML met Aspose.PDF – stapsgewijze handleiding](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Leer hoe u PDF-bestanden opslaat als HTML met Aspose.PDF in .NET, inclusief codevoorbeelden en configuratie‑opties. + ### [Converteer PDF naar PNG met Aspose.PDF .NET: Verbeter lettertype-aanwijzingen voor scherpe tekstweergave](./convert-pdf-png-aspose-net-font-hinting/) Leer hoe u PDF-documenten kunt converteren naar PNG-afbeeldingen van hoge kwaliteit met behulp van Aspose.PDF .NET, waarbij u verzekerd bent van een scherpe tekstweergave dankzij lettertypehints. diff --git a/pdf/dutch/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/dutch/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..41246341d2 --- /dev/null +++ b/pdf/dutch/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-08 +description: PDF opslaan als HTML met Aspose.PDF in C#. Leer hoe je PDF naar HTML + converteert, rasterafbeeldingen overslaat en veelvoorkomende randgevallen afhandelt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: nl +lastmod: 2026-08-08 +og_description: Sla PDF op als HTML met Aspose.PDF. Deze gids laat zien hoe je PDF + naar HTML converteert, rasterafbeeldingen overslaat en veelvoorkomende valkuilen + vermijdt. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: PDF opslaan als HTML met Aspose.PDF – volledige C#‑tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: PDF opslaan als HTML met Aspose.PDF – stapsgewijze handleiding +url: /nl/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF opslaan als HTML met Aspose.PDF – stapsgewijze handleiding + +Als je snel **PDF als HTML wilt opslaan**, laat deze tutorial je precies zien hoe je dat doet met Aspose.PDF voor .NET. Of je nu een document‑viewer webapp bouwt of rapporten exporteert voor SEO‑vriendelijke indexering, je ziet een complete, uitvoerbare oplossing die PDF naar HTML converteert terwijl je fijne controle krijgt over rasterafbeeldingen. + +Naast de primaire taak behandelen we ook de **aspose pdf html conversion** opties die je in staat stellen rasterafbeeldingen over te slaan, CSS‑afhandeling aan te passen en grote documenten efficiënt te beheren. Aan het einde van deze gids heb je een zelfstandige programma dat je in elk .NET‑project kunt gebruiken. + +## Vereisten + +* .NET 6.0 SDK of later (de code werkt ook met .NET Core en .NET Framework) +* Visual Studio 2022 of een IDE die C# ondersteunt +* Een Aspose.PDF for .NET‑licentie (de gratis proefversie werkt voor evaluatie) +* Een PDF‑bestand met de naam `report.pdf` geplaatst in een map die je vanuit code kunt refereren + +Er zijn geen extra NuGet‑pakketten vereist, behalve `Aspose.Pdf`. + +## Stap 1: Installeer het Aspose.PDF NuGet‑pakket + +Open de terminal in je projectmap en voer uit: + +```bash +dotnet add package Aspose.Pdf +``` + +Het pakket voegt de `Aspose.Pdf` namespace toe, die de `Document`‑klasse en het `HtmlSaveOptions`‑type bevat die worden gebruikt voor **convert pdf to html** bewerkingen. + +## Stap 2: Maak een console‑project en voeg using‑directives toe + +Maak een nieuwe console‑applicatie aan als je er nog geen hebt: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Open vervolgens `Program.cs` en voeg de vereiste namespaces toe: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +## Stap 3: Laad het PDF‑document + +De eerste operationele regel leest de bron‑PDF in een `Aspose.Pdf.Document`‑object. Dit object vertegenwoordigt het volledige PDF‑bestand in het geheugen en biedt methoden voor opslaan, bewerken en extraheren van inhoud. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Waarom dit belangrijk is*: Het document één keer laden houdt het geheugengebruik voorspelbaar, vooral voor grote PDF‑bestanden. Als het bestand niet gevonden kan worden, gooit Aspose een `FileNotFoundException`, zorg er dus voor dat het pad correct is. + +## Stap 4: Configureer HTML‑opslaoptopties + +`HtmlSaveOptions` stelt je in staat om nauwkeurig af te stemmen hoe de PDF wordt geconverteerd. In deze tutorial slaan we rasterafbeeldingen over om de output lichtgewicht te houden, maar je kunt de modus wijzigen naar `EmbedAll` als je ze nodig hebt. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Belangrijke punten**: + +* `RasterImagesSavingMode.Skip` vertelt Aspose om bitmap‑afbeeldingen (JPEG, PNG) tijdens de conversie te negeren. Dit is ideaal wanneer de bron‑PDF gescande pagina’s bevat die je niet nodig hebt in de HTML‑weergave. +* Je kunt overschakelen naar `EmbedAll` of `External` als je afbeeldingen als afzonderlijke bestanden wilt opslaan. +* De eigenschap `ResourcesFolder` is alleen relevant wanneer afbeeldingen extern worden opgeslagen. + +## Stap 5: Sla het document op als HTML + +Nu schrijf je het HTML‑bestand naar schijf met behulp van de geconfigureerde opties. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Nadat deze oproep is voltooid, bevat `report.html` de tekstuele inhoud, vector‑graphics en lay‑out die bewaard zijn gebleven van de originele PDF, maar zonder rasterafbeeldingen. Je kunt het bestand in een browser openen om het resultaat te verifiëren. + +## Verwachte output + +Wanneer je `report.html` opent in Chrome of Edge, zou je moeten zien: + +* Alle koppen, alinea's en vector‑vormen correct gerenderd. +* Geen ``‑tags voor rasterafbeeldingen (ze worden weggelaten vanwege de `Skip`‑modus). +* Schone, minimale CSS, ofwel inline of in een apart stylesheet, afhankelijk van de gekozen optie. + +Als je moet bevestigen dat afbeeldingen zijn weggelaten, inspecteer dan de paginabron (`Ctrl+U`). Je zult geen ``‑vermeldingen vinden. + +## Stap 6: Afhandelen van veelvoorkomende randgevallen + +### 6.1 Grote PDF’s (> 100 MB) + +Voor zeer grote bestanden, schakel streaming in om de geheugendruk te verminderen: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming schrijft HTML‑fragmenten direct naar schijf, waardoor het volledige document niet in het geheugen hoeft te worden gehouden. + +### 6.2 Met wachtwoord beveiligde PDF’s + +Als de bron‑PDF versleuteld is, geef dan het wachtwoord op vóór het opslaan: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Pogingen om op te slaan zonder te ontsleutelen veroorzaken een `InvalidPasswordException`. + +### 6.3 Unicode‑tekens + +Aspose.PDF voegt automatisch Unicode‑lettertypen in, maar je kunt een specifiek lettertype forceren voor consistente weergave: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Aangepaste bestandsnaamgeving voor meerdere pagina’s + +Als je elke PDF‑pagina als een afzonderlijk HTML‑bestand wilt, stel dan in: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Dit maakt `report_page_1.html`, `report_page_2.html`, enzovoort, wat nuttig kan zijn voor paginering in webapplicaties. + +## Volledig, uitvoerbaar voorbeeld + +Hieronder staat het volledige programma dat alle besproken stappen bevat. Kopieer het naar `Program.cs`, pas de paden aan en voer `dotnet run` uit. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verificatie**: Na het uitvoeren print de console het succesbericht. Open het gegenereerde HTML‑bestand in een browser om te bevestigen dat tekst en vector‑graphics correct verschijnen en dat rasterafbeeldingen zijn weggelaten. + +## Pro‑tips en valkuilen + +* **Pro tip**: Als je later de rasterafbeeldingen nodig hebt, wijzig `RasterImagesSavingMode` naar `External` en stel `ResourcesFolder` in. Dit maakt een `images` sub‑map met de geëxtraheerde bitmaps. +* **Let op**: Het gebruik van de standaard `Skip`‑modus op PDF’s die sterk afhankelijk zijn van gescande afbeeldingen zal lege gebieden opleveren waar die afbeeldingen horen. Test altijd met een representatieve steekproef van je documenten. +* **Performance tip**: Het hergebruiken van één `HtmlSaveOptions`‑instantie voor meerdere documenten vermindert de overhead van objectcreatie bij batchconversies. +* **Versiecontrole**: De getoonde API werkt met Aspose.PDF voor .NET versie 23.9 en later. Eerdere versies kunnen `HtmlSaveOptions.RasterImagesSavingMode` gebruiken met een iets andere enum‑naam. + +## Conclusie + +Je weet nu hoe je **PDF als HTML kunt opslaan** met Aspose.PDF, hoe je rasterafbeeldingsverwerking kunt beheersen, en hoe je typische uitdagingen zoals grote bestanden, wachtwoordbeveiliging en per‑pagina HTML‑output kunt aanpakken. Deze complete oplossing stelt je in staat om PDF‑naar‑HTML‑conversie in elke C#‑applicatie te integreren met vertrouwen. + +### Wat is het volgende? + +* Verken **aspose pdf html conversion** voor het insluiten van lettertypen en het aanpassen van CSS. +* Combineer deze conversie met een web‑API om HTML op aanvraag te leveren. +* Probeer de omgekeerde richting—**convert pdf to html** en vervolgens terug naar PDF—om de round‑trip‑fideliteit te valideren. + +Voel je vrij om met de opties te experimenteren, en deel je bevindingen in de reacties of op de Aspose‑forums. 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 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 naar HTML converteren in .NET met Aspose.PDF zonder afbeeldingen op te slaan](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/dutch/net/digital-signatures/_index.md index 0f4ee34736..29be3af6a3 100644 --- a/pdf/dutch/net/digital-signatures/_index.md +++ b/pdf/dutch/net/digital-signatures/_index.md @@ -62,6 +62,9 @@ Leer hoe u een PDF-document laadt, converteert naar PDF/X‑4 en de aanwezige ha ### [PDF-handtekening valideren met Aspose – PDF naar HTML converteren](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Leer hoe u een PDF-handtekening valideert en het document naar HTML converteert met Aspose.PDF voor .NET. +### [PDF valideren met Aspose.PDF – controleer geldigheid van PDF-handtekening in C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Leer hoe u een PDF valideert en de handtekeninggeldigheid controleert met Aspose.PDF in C#. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/dutch/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..cf8cfa6d95 --- /dev/null +++ b/pdf/dutch/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: Hoe PDF te valideren met Aspose.PDF en de digitale handtekening van PDF + te valideren. Volg deze stapsgewijze handleiding om de PDF-handtekening snel te + controleren. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: nl +lastmod: 2026-08-08 +og_description: Hoe PDF te valideren met Aspose.PDF. Leer de digitale handtekening + van een PDF te valideren en de geldigheid van de PDF-handtekening te controleren + in een paar regels C#-code. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Hoe PDF te valideren – controleer de geldigheid van PDF‑handtekeningen met + Aspose.PDF in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Hoe PDF te valideren met Aspose.PDF – controleer de geldigheid van PDF-handtekening + in C# +url: /nl/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe PDF te valideren met Aspose.PDF – controleer geldigheid van pdf-handtekening in C# + +Als je **hoe PDF te valideren** bestanden die digitale handtekeningen bevatten, moet, laat deze tutorial je een volledige oplossing zien. Je leert een PDF te laden, een certificaatvalidator te maken, en de geldigheid van pdf-handtekeningen te controleren met Aspose.PDF voor .NET. + +Het valideren van een digitale handtekening in een PDF is een veelvoorkomende eis voor compliance, facturering en veilige documentuitwisseling. Aan het einde van deze gids kun je met vertrouwen verifiëren of een ondertekende PDF betrouwbaar is, en begrijp je hoe je typische randgevallen zoals ontbrekende certificaten of meerdere handtekeningen afhandelt. + +## Vereisten + +Voordat je begint, zorg ervoor dat je het volgende hebt: + +- .NET 6.0 of later geïnstalleerd +- Een IDE zoals Visual Studio 2022 (elke editor die C# ondersteunt werkt) +- Een gelicentieerde kopie van **Aspose.PDF for .NET** (de gratis proefversie werkt voor evaluatie) +- Een ondertekend PDF‑bestand (`signed.pdf`) en, als de handtekening afhankelijk is van een private CA, het bijbehorende vertrouwde certificaat (`trustedCertificate.pfx`) + +Er zijn geen extra NuGet‑pakketten vereist naast `Aspose.PDF`. + +## Stap 1: Installeer Aspose.PDF + +Open een terminal in je projectmap en voer uit: + +```bash +dotnet add package Aspose.PDF +``` + +Het commando voegt de nieuwste Aspose.PDF‑bibliotheek toe, die de `Document`‑ en `CertificateValidator`‑klassen bevat die later worden gebruikt. + +## Stap 2: Laad het PDF‑document + +Het laden van een PDF is de eerste handeling die je uitvoert wanneer je **hoe pdf te laden** programmatically. De `Document`‑constructor accepteert een bestandspad, een stream of een byte‑array. Het gebruik van een volledig pad houdt het voorbeeld duidelijk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Waarom dit belangrijk is:** Het `Document`‑object vertegenwoordigt het volledige PDF‑bestand in het geheugen. Zonder het bestand te laden kun je niet bij de `Signatures`‑collectie, die nodig is om **pdf-handtekening**‑gegevens te **controleren**. + +## Stap 3: Bereid de certificaatvalidator voor + +Een digitale handtekening is alleen vertrouwd als het ondertekeningscertificaat zich tot een root‑certificaat ketent dat je vertrouwt. `CertificateValidator` laat je Aspose.PDF wijzen naar een vertrouwde certificaatopslag of een specifiek PFX‑bestand. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Als je PDF een publieke CA gebruikt die Windows al vertrouwt, kun je `certPath` weglaten en `CertificateValidator` instantiëren met de standaardconstructor. Het opgeven van een aangepast PFX‑bestand is nuttig voor interne PKI‑omgevingen. + +## Stap 4: Valideer de eerste digitale handtekening + +Een PDF kan meerdere handtekeningen bevatten. Voor de eenvoud valideert deze tutorial de eerste handtekening (`Signatures[0]`). De `Validate`‑methode retourneert `true` wanneer de handtekening cryptografisch intact is **en** het ondertekeningscertificaat wordt vertrouwd. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Wat er onder de motorkap gebeurt:** +- De methode controleert de hash van de ondertekende inhoud tegen de handtekeningswaarde. +- Ze bouwt de certificaatketen op met behulp van de opgegeven validator. +- De intrekkingsstatus (CRL/OCSP) wordt geëvalueerd als de validator hiervoor is geconfigureerd. + +### Meerdere handtekeningen verwerken + +Als je PDF meer dan één handtekening bevat, doorloop dan de `Signatures`‑collectie: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Dit patroon laat je **pdf-handtekening** op elke pagina **controleren** en individuele resultaten rapporteren. + +## Stap 5: Geef het validatieresultaat weer + +Schrijf tenslotte het resultaat naar de console. In productiecodelogging zou je het resultaat waarschijnlijk loggen of een uitzondering genereren bij een ongeldige handtekening. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Verwachte console‑output + +``` +Valid +``` + +of + +``` +Invalid +``` + +Het bericht weerspiegelt de booleaanse waarde die door `Validate` wordt geretourneerd. Een “Invalid” resultaat kan duiden op een gemanipuleerd document, een niet‑vertrouwd certificaat, of een verlopen ondertekeningscertificaat. + +## Stap 6: Veelvoorkomende valkuilen en best‑practice‑tips + +### 1. Ontbrekend vertrouwd certificaat +Als je `Invalid` ontvangt en je weet dat de handtekening vertrouwd moet zijn, controleer dan of het juiste root‑certificaat aan `CertificateValidator` is geleverd. Gebruik de overload die een `X509Certificate2Collection` accepteert voor meerdere roots. + +### 2. Handtekening met externe referenties +Sommige handtekeningen dekken externe inhoud (bijv. een bijgevoegd bestand). Zorg ervoor dat de externe bronnen toegankelijk zijn; anders faalt de hash‑verificatie. + +### 3. Tijdstempelvalidatie +Een handtekening kan een tijdstempel‑token bevatten. Om deze te valideren, configureer je de validator om de tijdstempel‑autoriteit (TSA)‑certificaten te controleren: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Prestaties bij grote PDF's +Het laden van een PDF met honderden pagina's kan veel geheugen verbruiken. Als je alleen handtekeninggegevens nodig hebt, gebruik dan `PdfFileEditor` om het handtekening‑woordenboek te extraheren zonder pagina's te renderen. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread‑veiligheid +`Document`‑instanties zijn niet thread‑safe. Maak een nieuw `Document` per thread aan wanneer je veel PDF's parallel valideert. + +## Volledig, uitvoerbaar voorbeeld + +Hieronder vind je het complete programma dat je kunt kopiëren, plakken en uitvoeren nadat je de bestandspaden hebt bijgewerkt. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Het uitvoeren van het programma** print een regel voor elke handtekening, duidelijk aangevend of de PDF slaagt voor de **validate pdf digital signature**‑controle. + +## Conclusie + +Je weet nu **hoe PDF te valideren** bestanden die digitale handtekeningen bevatten met behulp van Aspose.PDF voor .NET. De tutorial behandelde het laden van een PDF, het configureren van een certificaatvalidator, het controleren van pdf-handtekeninggeldigheid, het afhandelen van meerdere handtekeningen en het oplossen van veelvoorkomende problemen. + +Verken vervolgens gerelateerde onderwerpen zoals **hoe PDF te ondertekenen**, **hoe tijdstempel‑tokens toe te voegen**, en **hoe ondertekende inhoud te extraheren**. Deze uitbreidingen stellen je in staat een volledige end‑to‑end veilige documentworkflow in C# te bouwen. + +--- + + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met 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 PDF te verifiëren – PDF-handtekening valideren met Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Hoe PDF-handtekeninginformatie te extraheren met Aspose.PDF .NET: Een stapsgewijze gids](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Hoe PDF-digitale handtekeningen te verwijderen met Aspose.PDF .NET | Complete gids](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/dutch/net/document-conversion/_index.md index fafa691fa4..be4b17289d 100644 --- a/pdf/dutch/net/document-conversion/_index.md +++ b/pdf/dutch/net/document-conversion/_index.md @@ -36,7 +36,8 @@ leert hoe u conversie-instellingen opgeeft, tekst en afbeeldingen extraheert, de | [PDF naar HTML](./pdf-to-html/) | Leer hoe je PDF naar HTML converteert met Aspose.PDF voor .NET met deze stapsgewijze handleiding. Perfect voor ontwikkelaars en content creators. | | [PDF naar PDFA](./pdf-to-pdfa/) Leer hoe u PDF-bestanden naar PDF/A-formaat kunt converteren met Aspose.PDF voor .NET met deze stapsgewijze tutorial. | | [PDF naar PDFA3b](./pdf-to-pdfa3b/) | Leer hoe u moeiteloos PDF-bestanden naar PDF/A-3B-formaat kunt converteren met Aspose.PDF voor .NET in deze stapsgewijze handleiding. | -| [PDF naar PDF/X‑4 converteren in C# – Stapsgewijze ASP.NET PDF-tutorial](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Leer hoe u PDF-bestanden naar PDF/X‑4-formaat converteert met Aspose.PDF voor .NET in C#. | +| [PDF naar PDF/X‑4 converteren in C# – Stapsgewijze ASP.NET PDF-tutorial](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Leer hoe u PDF-bestanden naar PDF/X‑4-formaat converteert met Aspose.PDF voor .NET in C#. | +| [pdfx4-conversietutorial – PDF-standaard instellen en PDF converteren met Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Leer hoe u de PDF‑X‑4‑standaard instelt en PDF-bestanden converteert met Aspose.PDF voor .NET. | | [PDF naar PNG-lettertypehints](./pdf-to-png-font-hinting/) | Leer hoe u PDF naar PNG kunt converteren met lettertypehints met Aspose.PDF voor .NET in een eenvoudige stapsgewijze handleiding. | | [PDF naar PPT](./pdf-to-ppt/) | Leer hoe u PDF naar PPT converteert met Aspose.PDF voor .NET met deze stapsgewijze handleiding. Eenvoudig, efficiënt en perfect voor presentaties. | | [PDF naar SVG](./pdf-to-svg/) | Leer in deze stapsgewijze tutorial hoe u PDF-bestanden naar SVG-formaat converteert met Aspose.PDF voor .NET. Perfect voor ontwikkelaars en ontwerpers. | diff --git a/pdf/dutch/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/dutch/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..b779880d89 --- /dev/null +++ b/pdf/dutch/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,226 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4-conversietutorial die laat zien hoe je de PDF-standaard instelt + op PDF/X‑4 en PDF converteert met Aspose voor betrouwbare formaatconversie. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: nl +lastmod: 2026-08-08 +og_description: pdfx4-conversietutorial legt uit hoe je de PDF-standaard instelt op + PDF/X‑4 en een betrouwbare PDF-conversie uitvoert met Aspose in C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4-conversietutorial – PDF-standaard instellen en PDF converteren met + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 conversietutorial – PDF-standaard instellen en PDF converteren met Aspose +url: /nl/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversietutorial – PDF-standaard instellen en PDF converteren met Aspose + +Als je een **pdfx4 conversion tutorial** nodig hebt, leidt deze gids je door het volledige proces van het instellen van de PDF-standaard op PDF/X‑4 en het converteren van een PDF met Aspose. Of je nu print‑klare bestanden voorbereidt of zorgt voor langdurige archiefconformiteit, je leert een betrouwbare **aspose pdf format conversion** workflow die werkt met .NET 6 en later. + +De tutorial behandelt alles, van projectconfiguratie tot het afhandelen van randgevallen zoals ontbrekende bronbestanden of niet‑ondersteunde functies. Aan het einde van het artikel heb je een zelfstandige C#‑programma dat een PDF/X‑4‑conforme file produceert, klaar voor downstream‑workflows. + +## Vereisten + +- .NET 6 SDK of nieuwer geïnstalleerd ([download here](https://dotnet.microsoft.com/download)) +- Een geldige Aspose.PDF for .NET licentie (de gratis proefversie werkt voor testen) +- Visual Studio 2022, VS Code, of een IDE die .NET-ontwikkeling ondersteunt +- Een bron‑PDF‑bestand dat je wilt converteren (plaats het in een bekende map) + +Deze vereisten zorgen ervoor dat de code zonder extra configuratie draait. + +## Stap 1: Maak een nieuw .NET console‑project + +Open een terminal en voer de volgende commando's uit om een console‑app met de naam `PdfX4Converter` te genereren: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Voeg het Aspose.PDF NuGet‑pakket toe: + +```bash +dotnet add package Aspose.Pdf +``` + +Het `Aspose.Pdf`‑pakket levert de `Document`‑klasse en `PdfFormatConversionOptions` die nodig zijn voor **convert pdf pdfx4**‑operaties. + +## Stap 2: Schrijf de conversiecode + +Open `Program.cs` (of `Program.cs` als je de nieuwe top‑level statements gebruikt) en vervang de inhoud door het volledige voorbeeld hieronder. De code toont **set pdf standard** naar PDF/X‑4, voert de conversie uit en bevat foutafhandeling voor veelvoorkomende valkuilen. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Waarom elk onderdeel belangrijk is + +- **Argument validation** voorkomt dat het programma crasht wanneer de gebruiker een bestandspad vergeet. +- **`Document` loading** geeft een duidelijke uitzondering als de bron‑PDF ontbreekt of corrupt is, wat essentieel is voor een robuuste **convert pdf using aspose**‑ervaring. +- **`PdfFormatConversionOptions`** is waar je **set pdf standard** toepast. Door `PdfStandard.PdfX4` toe te wijzen, past Aspose automatisch de kleurruimtes aan, embedt vereiste lettertypen en schrijft de benodigde PDF/X‑4‑metadata. +- **`FontEmbeddingMode.EmbedAll`** zorgt ervoor dat elk lettertype dat in de bron‑PDF wordt gebruikt, wordt ingebed, een veelvoorkomende eis voor print‑klare PDF's. +- **`doc.Convert`** voert de daadwerkelijke **aspose pdf format conversion** uit. De methode schrijft het nieuwe bestand in één oproep, waardoor de workflow wordt vereenvoudigd. + +## Stap 3: Voer de converter uit + +Build het project en voer het uit met de bron‑ en bestemmingspaden: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Als alles werkt, print de console: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Je kunt nu `output_pdfx4.pdf` openen in elke PDF‑viewer die PDF/X‑4 ondersteunt (bijv. Adobe Acrobat Pro) en de conformiteit verifiëren via *File → Properties → Standards*. + +## Stap 4: Verifieer PDF/X‑4‑conformiteit (optioneel) + +Voor productie‑pipelines wil je de output mogelijk programmatisch valideren. Aspose biedt een `PdfComplianceChecker`‑klasse (beschikbaar in het `Aspose.Pdf`‑pakket) die als volgt kan worden gebruikt: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Het uitvoeren van dit fragment na de conversie geeft je een expliciet geslaagd/niet‑geslaagd resultaat, wat nuttig is voor geautomatiseerde CI/CD‑pipelines. + +## Stap 5: Veelvoorkomende valkuilen en best‑practice‑tips + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| Ontbrekende lettertypen in de bron‑PDF | Lettertypen worden gerefereerd maar niet ingebed, waardoor conversiewaarschuwingen ontstaan | Gebruik `FontEmbeddingMode.EmbedAll` zoals hierboven getoond | +| Bron‑PDF bevat transparante objecten die niet zijn toegestaan in PDF/X‑4 | PDF/X‑4 staat bepaalde transparantie‑blends niet toe | Pre‑process de PDF met `doc.ProcessTransparentObjects()` vóór de conversie | +| Grote bestanden veroorzaken OutOfMemoryException | Het volledige document wordt in het geheugen geladen | Stream de bron met `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licentie niet toegepast | Proefversie voegt watermerken toe | Roep `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` aan vóór elk gebruik van de Aspose‑API | + +Het toepassen van deze tips zorgt voor een soepele **convert pdf pdfx4**‑ervaring in productieomgevingen. + +## Stap 6: De tutorial uitbreiden + +Zodra je de basis **pdfx4 conversion tutorial** onder de knie hebt, kun je het volgende verkennen: + +- **Batch conversion**: doorloop een map met PDF's en converteer elk naar PDF/X‑4. +- **Metadata injection**: voeg XMP‑metadata toe die vereist is door specifieke drukkerijen. +- **Color profile management**: koppel ICC‑profielen met `doc.ColorSpace = ColorSpace.DeviceRGB;` vóór de conversie. + +Al deze uitbreidingen bouwen voort op dezelfde **aspose pdf format conversion**‑basis die hier wordt gedemonstreerd. + +## Conclusie + +Deze **pdfx4 conversion tutorial** heeft je laten zien hoe je **set pdf standard** naar PDF/X‑4 instelt, een betrouwbare **convert pdf using Aspose** uitvoert en het resultaat verifieert. Je hebt nu een compleet, uitvoerbaar C#‑programma dat kan worden geïntegreerd in grotere document‑verwerkings‑pipelines of als zelfstandige tool kan worden gebruikt. Experimenteer met batch‑verwerking, metadata‑afhandeling of alternatieve PDF‑standaarden (PDF/A‑2b, PDF/UA) om je expertise in **aspose pdf format conversion** te verdiepen. + +Veel programmeerplezier, en geniet van het vertrouwen dat komt met PDF/X‑4‑conforme output! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met stapsgewijze uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [PDF/A naar Standaard PDF converteren met Aspose.PDF .NET : Een uitgebreide gids](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Hoe een vervaldatum instellen op PDF's met Aspose.PDF voor .NET (C# tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Uitgebreide gids: PDF naar TIFF converteren met Aspose.PDF .NET voor naadloze documentconversie](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/dutch/net/document-creation/_index.md b/pdf/dutch/net/document-creation/_index.md index 2dfc114aae..11b81d5e2c 100644 --- a/pdf/dutch/net/document-creation/_index.md +++ b/pdf/dutch/net/document-creation/_index.md @@ -23,6 +23,9 @@ Leer hoe u professionele PDF-boekjes maakt met Aspose.PDF voor .NET. Deze tutori ### [PDF-document maken met Aspose.PDF – een stapsgewijze handleiding](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Leer stap voor stap hoe u een PDF-document maakt met Aspose.PDF in .NET. +### [PDF-document maken in C# met Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Leer hoe u een PDF-document maakt in C# met Aspose.PDF. + ### [PDF's maken van XML en XSLT met Aspose.PDF .NET: een stapsgewijze handleiding](./aspose-pdf-net-xml-xslt-to-pdfs-guide/) Leer hoe u XML-gegevens naar PDF-formaat converteert met Aspose.PDF voor .NET met XSLT-transformaties. Deze handleiding behandelt de installatie, binding en aanpassing. diff --git a/pdf/dutch/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/dutch/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..d37b09cebf --- /dev/null +++ b/pdf/dutch/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Maak een pdf-document in C# met Aspose.Pdf. Leer hoe je een lege pdf-pagina + toevoegt, een alinea aan een pdf toevoegt en tekst in een pdf positioneert met precieze + coördinaten. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: nl +lastmod: 2026-08-08 +og_description: Maak snel een pdf‑document in C#. Deze tutorial laat zien hoe je een + lege pdf‑pagina toevoegt, een alinea aan een pdf toevoegt en tekst positioneert + in een pdf met Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: PDF-document maken in C# met Aspose.Pdf – volledige gids +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: PDF-document maken in C# met Aspose.Pdf +url: /nl/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF‑document maken in C# met Aspose.Pdf + +Als je **programmeer­matig een pdf‑document** wilt maken, laat deze gids je precies zien hoe. Met Aspose.Pdf voor .NET kun je een lege pdf‑pagina toevoegen, een alinea in een pdf invoegen en tekst in een pdf positioneren met pixel‑perfecte nauwkeurigheid — alles in een paar regels C#‑code. + +Aan het einde van de tutorial heb je een volledig functioneel PDF‑bestand dat een notitie bevat op de door jou opgegeven coördinaten. Geen externe tools, geen handmatige bewerking — alleen schone, herhaalbare code die je in elk .NET‑project kunt gebruiken. + +## Wat je leert + +* Hoe je **pdf‑document maakt** met Aspose.Pdf. +* De juiste manier om **lege pdf‑pagina toe te voegen** en waarom er eerst een pagina moet bestaan voordat je inhoud toevoegt. +* Hoe je **alinea toevoegt aan pdf** en een aangepast tag (handig voor latere extractie of styling) koppelt. +* De techniek om **tekst te positioneren in pdf** met de `Position`‑klasse. +* Hoe je het resultaat opslaat op schijf en de output verifieert. + +**Prerequisites** + +* .NET 6.0 of hoger (de code werkt ook met .NET Framework 4.7+). +* Een geldige Aspose.Pdf for .NET‑licentie of een gratis evaluatiesleutel. +* Een IDE zoals Visual Studio 2022 of VS Code met de C#‑extensie. + +> **Pro tip:** Als je een gratis evaluatie gebruikt, bevat de gegenereerde PDF een klein watermerk. Registreer een licentie om dit te verwijderen. + +## Hoe maak je een pdf‑document met Aspose.Pdf + +De eerste stap is het instantieren van de `Document`‑klasse. Dit object vertegenwoordigt het volledige PDF‑bestand en geeft je toegang tot pagina’s, resources en opslaan‑opties. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Het aanmaken van het document **schrijft nog niets** naar schijf; het bereidt alleen een in‑memory representatie voor die je kunt manipuleren. Deze aanpak houdt de API snel en geheugen‑efficiënt. + +## Lege pdf‑pagina toevoegen met Aspose.Pdf + +Een PDF moet minimaal één pagina bevatten voordat je inhoud kunt plaatsen. Een lege pagina toevoegen is één enkele methode‑aanroep: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +De `Add()`‑methode maakt een pagina met standaardgrootte (A4) en oriëntatie (staand). Als je een andere grootte nodig hebt, geef je een `PageSize`‑instantie door aan `Add()`. + +## Alinea toevoegen aan pdf en een notitie instellen + +Nu de pagina bestaat, kun je een `Paragraph`‑object maken dat de zichtbare tekst bevat. De alinea kan ook een aangepast tag dragen, wat handig is wanneer je later het element programmatically wilt lokaliseren of stylen. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Waarom een tag gebruiken? + +Tags zijn metadata die met het PDF‑element meereizen. Ze kunnen later worden opgevraagd met `Document.FindObject()` of worden gebruikt door downstream PDF‑processors die op tags vertrouwen voor toegankelijkheid of indexering. + +## Tekst positioneren in pdf met precieze coördinaten + +De standaardplaatsing van een alinea is de linkerbovenhoek van de paginamarge. Om de tekst naar een exacte locatie te verplaatsen, stel je de `Position`‑eigenschap in op het tag van de alinea: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Coördinaten worden gemeten in points (1 point = 1/72 inch). Het origineel (0,0) bevindt zich links‑onder in de pagina, wat overeenkomt met de meeste PDF‑rendering‑engines. Pas de waarden van `X` en `Y` aan om aan je layout‑behoeften te voldoen. + +Na het positioneren voeg je de alinea toe aan de collectie van de pagina: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Het pdf‑document opslaan + +Tot slot schrijf je de in‑memory PDF naar een bestand. Je kunt het uitvoerpad, het formaat en zelfs encryptie‑opties opgeven. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Wanneer het programma eindigt, bevat `output.pdf` één pagina met de tekst **Important note** geplaatst nabij de rechterbovenhoek (X = 50, Y = 750). Open het bestand in een PDF‑viewer om de plaatsing te verifiëren. + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*Afbeeldings‑alt‑tekst: gegenereerd PDF‑document gemaakt met C# Aspose.Pdf waarin een gepositioneerde notitie wordt getoond* (bevat primaire zoekterm). + +## Volledig, uitvoerbaar voorbeeld + +Alle onderdelen samenvoegend, hier is een complete console‑applicatie die je kunt kopiëren, bouwen en uitvoeren: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Verwachte output** wanneer je het programma draait: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Het openen van `output.pdf` toont één pagina met de tekst **Important note** gepositioneerd op de door jou gespecificeerde coördinaten. + +## Veelvoorkomende variaties en randgevallen + +| Scenario | Wat te wijzigen | Waarom het belangrijk is | +|----------|----------------|--------------------------| +| **Andere paginagrootte** | `pdfDocument.Pages.Add(PageSize.A5)` | Kleinere pagina’s verkleinen de bestandsgrootte en passen beter op mobiele schermen. | +| **Meerdere notities** | Loop over een collectie strings en maak voor elk een `Paragraph` aan, waarbij je de `Y`‑coördinaat verhoogt. | Maakt batch‑generatie van bullet‑style notities mogelijk. | +| **Unicode‑tekens** | Zorg dat het bronbestand is opgeslagen als UTF‑8 en stel `noteParagraph.Text = "重要なメモ"` in | Aspose.Pdf ondersteunt Unicode out‑of‑the‑box, maar de bestands‑encoding moet overeenkomen. | +| **Wachtwoord‑beveiligde PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Voegt beveiliging toe voor vertrouwelijke notities. | +| **Hoge resolutie‑output** | Stel `pdfDocument.PageInfo.Width` en `Height` in op grotere waarden vóór het toevoegen van inhoud. | Handig voor het afdrukken van grootformaat‑PDF’s. | + +## Tips voor productiegebruik + +* **Hergebruik de `Document`‑instantie** bij het genereren van veel PDF’s in één request om GC‑druk te verminderen. +* **Dispose‑objecten** (`pdfDocument.Dispose()`) als je veel documenten in een lus maakt. +* **Valideer coördinaten**: de `Y`‑waarde mag de paginahoogte niet overschrijden; anders wordt de tekst afgesneden. +* **Gebruik `TextFragmentAbsorber`** om later de notitie op basis van zijn tag (`/P`) te extraheren als je de inhoud wilt teruglezen. + +## Conclusie + +Je weet nu hoe je **pdf‑document maakt** met Aspose.Pdf, **lege pdf‑pagina toevoegt**, **alinea toevoegt aan pdf**, **een notitie toevoegt aan pdf**, en **tekst precies positioneert in pdf**. Het volledige voorbeeld toont een schone, herhaalbare workflow die je kunt uitbreiden voor facturen, rapporten of elke document‑automatiseringstaak. + +Ga vervolgens aan de slag met gerelateerde onderwerpen zoals **afbeeldingen toevoegen aan pdf**, **tabellen bouwen met Aspose.Pdf**, of **digitale handtekeningen toepassen**. Elk van deze bouwt voort op dezelfde kernconcepten die hier behandeld zijn, zodat je klaar bent voor complexere PDF‑generatietaken. + +Happy coding! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat complete 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. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/dutch/net/images-graphics/_index.md b/pdf/dutch/net/images-graphics/_index.md index fd8b6acd20..e5bf6108ad 100644 --- a/pdf/dutch/net/images-graphics/_index.md +++ b/pdf/dutch/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Leer hoe u visueel aantrekkelijke PDF-documenten maakt door alinea's te extraher ### [Teken transparante vormen in PDF's met Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Een codetutorial voor Aspose.PDF Net +### [PDF-opaciteit instellen in C# met Aspose.PDF – volledige handleiding](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Leer hoe u de doorzichtigheid van PDF-pagina's of elementen kunt aanpassen met Aspose.PDF voor .NET in C#. + ### [Efficiënte PDF-afbeeldingsidentificatie met Aspose.PDF voor .NET](./master-image-identification-aspose-pdf-net/) Leer hoe u grijswaarden- en RGB-afbeeldingen in PDF's kunt identificeren met Aspose.PDF voor .NET. Deze tutorial behandelt installatie, beeldextractie en prestatietips. diff --git a/pdf/dutch/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/dutch/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..df3920a4f8 --- /dev/null +++ b/pdf/dutch/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: PDF-opaciteit instellen in C# met Aspose.PDF – leer hoe je de stroketransparantie + en vultransparantie kunt aanpassen met een paar regels code. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: nl +lastmod: 2026-08-08 +og_description: Stel PDF‑opaciteit in C# snel in. Deze gids laat zien hoe je de lijn‑ + en vultransparantie kunt aanpassen met de graphics‑state‑API van Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: PDF‑opaciteit instellen in C# met Aspose.PDF – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: PDF-opaciteit instellen in C# met Aspose.PDF – volledige gids +url: /nl/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-opaciteit instellen in C# met Aspose.PDF – volledige gids + +Als je **PDF-opaciteit** moet instellen voor specifieke tekenbewerkingen, laat deze tutorial je precies zien hoe je dat doet met Aspose.PDF voor .NET. Of je nu watermerken, half‑transparante overlays of aangepaste graphics maakt, je leert een beknopte, productie‑klare aanpak. + +In de volgende secties behandelen we alles, van het laden van een PDF tot het bewerken van de graphics state, het toevoegen van een nieuwe opaciteitsdefinitie, en het opslaan van het resultaat. Er is geen externe documentatie nodig—alleen de onderstaande code en een korte uitleg van elke stap. + +## Vereisten + +* .NET 6.0 of later (de code werkt ook met .NET Framework 4.7+) +* Een geldige Aspose.PDF for .NET-licentie (de gratis proefversie werkt voor evaluatie) +* Een invoer‑PDF‑bestand (`input.pdf`) in een map waar je lees‑/schrijftoegang tot hebt +* Visual Studio 2022 of een andere C#‑IDE naar keuze + +## Stap 1 – Laad het PDF‑document (Aspose.PDF voor .NET) + +De eerste taak is het openen van de bestaande PDF. Aspose.PDF vertegenwoordigt een PDF‑bestand met de `Document`‑klasse, die je volledige toegang geeft tot pagina's, resources en low‑level objecten. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Waarom dit belangrijk is*: Het laden van het document maakt een in‑memory model aan dat je veilig kunt aanpassen. De `using`‑statement zorgt ervoor dat de bestands‑handle automatisch wordt vrijgegeven nadat we klaar zijn. + +## Stap 2 – Haal de eerste pagina op die je wilt bewerken + +Opaciteit wordt per pagina gedefinieerd via het resource‑woordenboek van de pagina. Hier richten we ons op de eerste pagina, maar je kunt door `doc.Pages` itereren voor een batch‑bewerking. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Waarom dit belangrijk is*: Elke pagina heeft zijn eigen `Resources`‑collectie, die graphics states, lettertypen, afbeeldingen, enz. opslaat. Het aanpassen van de juiste pagina zorgt ervoor dat het opaciteitseffect verschijnt waar je het verwacht. + +## Stap 3 – Open het resource‑woordenboek van de pagina voor bewerking + +Aspose.PDF biedt een `DictionaryEditor`‑helper om low‑level PDF‑woordenboeken te manipuleren zonder de bestandsstructuur te breken. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Waarom dit belangrijk is*: Directe bewerking van de COS‑ (Content Object System) woordenboeken van de PDF is de enige manier om een aangepaste graphics state in te voegen. De editor abstraheert de low‑level syntaxis terwijl de PDF geldig blijft. + +## Stap 4 – Haal het bestaande ExtGState‑woordenboek op + +Het **ExtGState** (external graphics state) woordenboek bevat opaciteit, blend‑mode, lijndikte, enz. Als het niet bestaat, maakt Aspose.PDF het automatisch aan wanneer je een nieuw item toevoegt. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Waarom dit belangrijk is*: Zonder een `ExtGState`‑item kun je later in de content‑stream van de pagina geen aangepaste opaciteit refereren. Deze stap garandeert dat de container aanwezig is. + +## Stap 5 – Maak een nieuwe graphics state met de gewenste opaciteit + +Een graphics state is een verzameling parameters. Voor opaciteit stellen we `CA` (stroke opacity) en `ca` (fill opacity) in. We stellen ook een blend‑mode (`BM`) in om te bepalen hoe transparante pixels interageren met onderliggende inhoud. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Waarom dit belangrijk is*: `CA` en `ca` accepteren waarden van 0 (volledig transparant) tot 1 (volledig ondoorzichtig). Pas deze getallen aan om het gewenste visuele effect te bereiken. De blend‑mode `"Normal"` is het meest gebruikelijk, maar je kunt experimenteren met `"Multiply"` of `"Screen"` voor artistieke effecten. + +## Stap 6 – Registreer de nieuwe graphics state in de ExtGState‑collectie + +Elke graphics state moet een unieke naam hebben (bijv. `GS0`). We voegen ons woordenboek toe aan de `ExtGState`‑collectie en werken vervolgens de resources van de pagina bij. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Waarom dit belangrijk is*: Door de state te benoemen (`GS0`), kun je later in de content‑stream van de pagina refereren met de `gs`‑operator. Als je meerdere opaciteitsniveaus nodig hebt, maak dan extra items (`GS1`, `GS2`, …). + +## Stap 7 – Pas de graphics state toe op teken‑commando's (optioneel) + +Als je de opaciteit meteen op bestaande inhoud wilt toepassen, moet je de content‑stream van de pagina bewerken. Hieronder staat een eenvoudig voorbeeld dat een half‑transparante rechthoek tekent met de nieuw aangemaakte state. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Waarom dit belangrijk is*: De `gs`‑operator (`SetGraphicsState`) vertelt de PDF‑renderer om de opaciteitswaarden gedefinieerd in `GS0` te gebruiken voor alle volgende teken‑commando's. Het `grestore`/`gsave`‑paar zorgt ervoor dat andere paginacomponenten onaangetast blijven. + +## Stap 8 – Sla de aangepaste PDF op + +Tot slot schrijf je het bijgewerkte document terug naar de schijf. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Waarom dit belangrijk is*: Opslaan maakt alle wijzigingen definitief, embedt de nieuwe graphics state, en produceert een PDF die elke viewer (Adobe Acrobat, Chrome, enz.) kan weergeven met de beoogde transparantie. + +### Verwacht resultaat + +Open `output.pdf` in een PDF‑viewer. Je zou een rode rechthoek moeten zien waarvan de omtrek 80 % ondoorzichtig is en de vulling 40 % ondoorzichtig, die soepel mengt met eventuele achtergrondinhoud. De rest van de pagina blijft ongewijzigd. + +## Veelvoorkomende variaties en randgevallen + +| Situatie | Wat te wijzigen | Reden | +|-----------|----------------|--------| +| **Meerdere opaciteitsniveaus** | Maak extra graphics states (`GS1`, `GS2`, …) met verschillende `CA`/`ca`‑waarden en verwijs er waar nodig naar | Biedt fijnmazige controle over verschillende elementen | +| **Verschillende blend‑modi** | Gebruik `"Multiply"`, `"Screen"`, `"Overlay"` etc., in plaats van `"Normal"` in het `BM`‑item | Geeft artistieke meng‑effecten | +| **Toepassen op een bestaande content‑stream** | Voeg `SetGraphicsState` in vóór de specifieke teken‑operatoren die je wilt beïnvloeden | Voorkomt ongewenste opaciteit op niet‑gerelateerde objecten | +| **Grote PDF's** | Verwerk pagina's in een `foreach (Page p in doc.Pages)`‑lus om te voorkomen dat het hele bestand in één keer in het geheugen wordt geladen | Verbeterde prestaties en minder geheugenbelasting | +| **Geen bestaande ExtGState** | De code in Stap 4 maakt er al een aan als deze ontbreekt, dus extra handling is niet nodig | Garandeert dat het woordenboek aanwezig is | + +### Pro‑tip + +Wanneer je veel aangepaste graphics states toevoegt, houd de naamgeving consistent (`GS0`, `GS1`, …) en documenteer het doel van elk in een commentaarblok. Dit maakt toekomstig onderhoud eenvoudiger, vooral in samenwerkingsprojecten. + +## Volledig, uitvoerbaar voorbeeld + +Hieronder staat het volledige programma dat je kunt kopiëren, plakken en uitvoeren. Het bevat alle stappen, benodigde `using`‑directieven en commentaren. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Voer het programma uit, + +## 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. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..fcb73f4653 100644 --- a/pdf/dutch/net/programming-with-forms/_index.md +++ b/pdf/dutch/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Deze tutorials bieden ook gedetailleerde codevoorbeelden, duidelijke uitleg en i | [Bijschrift voor keuzerondje instellen](./set-radio-button-caption/) Leer hoe u keuzerondjes in PDF's instelt met Aspose.PDF voor .NET. Deze stapsgewijze handleiding begeleidt u bij het laden, wijzigen en opslaan van uw PDF-formulieren. | | [Tekstvak](./text-box/) | Ontdek hoe u moeiteloos tekstvakken aan PDF's toevoegt met Aspose.PDF voor .NET met deze stapsgewijze handleiding. Verbeter de gebruikersinteractie. | | [Hoe PDF maken met Aspose – Formulierveld en pagina's toevoegen](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Leer hoe u met Aspose.PDF voor .NET een PDF maakt, formuliervelden toevoegt en pagina's beheert in deze stapsgewijze tutorial. | +| [PDF-document opslaan met Aspose.PDF – volledige gids](./save-pdf-document-with-aspose-pdf-complete-guide/) | Leer stap voor stap hoe u PDF-documenten opslaat met Aspose.PDF voor .NET in deze volledige gids. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/dutch/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..92cfc4b501 --- /dev/null +++ b/pdf/dutch/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: PDF-document opslaan met Aspose.PDF, leer hoe je pagina's aan een PDF + toevoegt, PDF-formuliervelden invult en een PDF met formulieren maakt in één tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: nl +lastmod: 2026-08-08 +og_description: Sla PDF‑document op met Aspose.PDF en ontdek hoe je PDF‑pagina’s kunt + toevoegen, PDF‑formuliervelden kunt invullen en snel en betrouwbaar PDF’s met formuliervelden + kunt maken. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: PDF-document opslaan met Aspose.PDF – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: PDF-document opslaan met Aspose.PDF – volledige gids +url: /nl/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-document opslaan met Aspose.PDF – volledige gids + +Als je een **PDF-document wilt opslaan** dat interactieve formuliervelden bevat, laat deze tutorial je precies zien hoe. Je ziet hoe je pagina's toevoegt aan een PDF, een PDF-formulier maakt en een PDF-formulierveld invult — allemaal met Aspose.PDF voor .NET. + +In de volgende secties leer je: + +* meerdere pagina's toevoegen aan een nieuwe PDF, +* een tekstvakformulierveld op de eerste pagina maken, +* een widget‑annotatie voor hetzelfde veld op een tweede pagina plaatsen, +* de waarde van het veld instellen (PDF-formulierveld invullen), +* en tenslotte **PDF-document opslaan** op schijf. + +Er zijn geen externe tools nodig; de volledige, uitvoerbare code is inbegrepen. + +## Vereisten + +* .NET 6.0 of later (de code werkt ook met .NET Framework 4.7.2+). +* Een geldige Aspose.PDF voor .NET-licentie of een gratis evaluatiesleutel. +* Visual Studio 2022 (of een andere C# IDE). + +Voeg het NuGet‑pakket toe: + +```bash +dotnet add package Aspose.PDF +``` + +## Hoe pagina's toevoegen aan PDF + +De eerste stap is het maken van een lege PDF en de benodigde pagina's toevoegen. Het toevoegen van pagina's voordat formuliervelden worden gedefinieerd, zorgt ervoor dat de lay-outcoördinaten nauwkeurig zijn. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Waarom dit belangrijk is:* Elk `Page`‑object vertegenwoordigt een afdrukbare canvas. Door pagina's vroeg toe te voegen, kun je later naar hen verwijzen bij het positioneren van formulierelementen. + +## Hoe een PDF‑formulier maken met Aspose.PDF + +Een PDF‑formulier bestaat uit een **velddefinitie** (de logische container) en één of meer **widget‑annotaties** (de visuele weergave). Het voorbeeld maakt een `TextBoxField` met de naam **Comments** op de eerste pagina. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Waarom dit belangrijk is:* De `Rectangle`‑coördinaten worden uitgedrukt in punten (1 pt = 1/72 in). Pas de waarden aan om bij je ontwerp te passen. + +## PDF‑formulierveld invullen + +Je kunt de waarde van het veld programmatisch instellen voordat het document wordt opgeslagen. Dit is de kern van **PDF‑formulierveld invullen**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Als je het veld later moet invullen (bijv. vanuit gebruikersinvoer), wijs dan eenvoudig een nieuwe string toe aan `commentsField.Value` voordat je `Save` aanroept. + +## Een widget‑annotatie toevoegen voor hetzelfde veld op de tweede pagina + +Een widget‑annotatie maakt het formulierveld zichtbaar op een pagina. Door een tweede widget toe te voegen, verschijnt hetzelfde logische veld op beide pagina's, wat **PDF maken met formuliervelden** toont die zich over meerdere pagina's uitstrekken. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Waarom dit belangrijk is:* De `Widgets`‑collectie kan een willekeurig aantal visuele weergaven bevatten. Gebruikers kunnen met het veld op beide pagina's interactie hebben, en de ingevoerde waarde blijft gesynchroniseerd. + +## Het veld koppelen aan de annotaties van de eerste pagina + +Formuliervelden moeten worden toegevoegd aan de annotatiecollectie van een pagina zodat de PDF‑viewer ze kan weergeven. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDF-document opslaan + +Nu het formulier volledig is gedefinieerd, kun je **PDF-document opslaan** op een locatie naar keuze. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Wanneer je `output.pdf` opent in Adobe Acrobat Reader of een andere PDF‑viewer, zie je een tekstvak op pagina 1 en een overeenkomend vak op pagina 2. Typen in een van de vakken werkt het onderliggende veld bij. + +## Volledig, uitvoerbaar voorbeeld + +Hieronder staat het volledige programma dat je kunt kopiëren‑plakken in een console‑applicatie. Het compileert en produceert de beschreven PDF zonder aanpassingen. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Verwachte output:** Een bestand genaamd `output.pdf` met twee pagina's. Pagina 1 toont een tekstvak met het label “Comments” op coördinaten (100, 600). Pagina 2 toont hetzelfde veld op (100, 400). Het veld is vooraf ingevuld met “Enter your feedback here”. Het wijzigen van de tekst op een van de pagina's werkt dezelfde waarde bij wanneer het document opnieuw wordt opgeslagen. + +## Veelgestelde vragen en afhandeling van randgevallen + +| Vraag | Antwoord | +|----------|--------| +| *Kan ik meer dan één widget voor hetzelfde veld toevoegen?* | Ja. Voeg extra `WidgetAnnotation`‑objecten toe aan `commentsField.Widgets`. Elke widget kan op elke pagina worden geplaatst. | +| *Wat als ik het uiterlijk van het veld moet instellen (lettertype, rand, achtergrond)?* | Gebruik `commentsField.DefaultAppearance` om een lettertype en kleur op te geven, en stel de `commentsField.Border`‑eigenschappen in voor de lijntstijl. | +| *Hoe maak ik het veld alleen‑lezen?* | Stel `commentsField.ReadOnly = true;` in. Het veld toont nog steeds zijn waarde, maar kan niet door de gebruiker worden bewerkt. | +| *Is het mogelijk het veld in te vullen nadat de PDF is gemaakt?* | Ja. Laad de opgeslagen PDF met `new Document("output.pdf")`, vind het veld via `pdfDocument.Form["Comments"]`, wijs een nieuwe `Value` toe, en roep opnieuw `Save` aan. | +| *Wat als de PDF moet voldoen aan PDF/A voor archivering?* | Na het bouwen van het document, roep `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` aan vóór het opslaan. | + +## Tips uit de praktijk + +* **Pro tip:** Houd de logische veldnaam kort en uniek; het is de identifier die je later gebruikt bij het programmatisch invullen van het formulier. +* **Let op:** Overlappende widget‑rechthoeken. Overlappingen veroorzaken weergave‑artefacten in sommige viewers. +* **Prestatie‑opmerking:** Het toevoegen van veel pagina's of widgets in een strakke lus kan geoptimaliseerd worden door één `Rectangle`‑instantie te hergebruiken en alleen de coördinaten aan te passen. + +## Conclusie + +Je weet nu hoe je een **PDF-document kunt opslaan** dat een volledig functioneel formulier bevat, hoe je een **PDF‑formulierveld kunt invullen**, en hoe je **pagina's aan PDF kunt toevoegen** en **PDF met formuliervelden kunt maken** met Aspose.PDF voor .NET. Het volledige voorbeeld toont de end‑to‑end workflow van het maken van het document tot de uiteindelijke opslag. + +Verken vervolgens gerelateerde onderwerpen zoals **checkboxen toevoegen**, **dropdown‑lijsten maken**, of **het formulier flatten** voor distributie als alleen‑lezen. Elk van deze bouwt voort op dezelfde principes die hier behandeld zijn en breidt je PDF‑automatiseringsmogelijkheden uit. + +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 stapsgewijze uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe 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/) +- [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 PDF‑formuliervelden toevoegen en extraheren met Aspose.PDF voor .NET: Een uitgebreide gids](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/dutch/net/programming-with-pdf-pages/_index.md index 9f6349af22..ae9ebdaa41 100644 --- a/pdf/dutch/net/programming-with-pdf-pages/_index.md +++ b/pdf/dutch/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Tutorials bevatten stapsgewijze instructies, gedetailleerde codevoorbeelden en d | [PDF-pagina-afmetingen bijwerken](./update-dimensions/) | Ontdek hoe u moeiteloos PDF-paginaafmetingen kunt bijwerken met Aspose.PDF voor .NET in deze uitgebreide, stapsgewijze handleiding. | | [Zoom naar pagina-inhoud in PDF-bestand](./zoom-to-page-contents/) | Leer in deze uitgebreide handleiding hoe u kunt inzoomen op pagina-inhoud in PDF-bestanden met Aspose.PDF voor .NET. Verbeter uw PDF-documenten naar uw specifieke behoeften. | | [Paginanummers toevoegen aan PDF met C# – Volledige stapsgewijze handleiding](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Leer hoe u paginanummers aan een PDF kunt toevoegen met C# en Aspose.PDF voor .NET in een gedetailleerde stap‑voor‑stap handleiding. | +| [Bates-nummers toevoegen aan PDF met Aspose – stapsgewijze handleiding](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Leer hoe u Bates‑nummering aan PDF‑bestanden toevoegt met Aspose.PDF voor .NET in deze stapsgewijze handleiding. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/dutch/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..623b8450bf --- /dev/null +++ b/pdf/dutch/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Bates-nummering toevoegen aan PDF met Aspose.Pdf in C#. Deze tutorial + laat ook zien hoe je een lege pagina aan een PDF toevoegt en een PDF programmatically + genereert. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: nl +lastmod: 2026-08-08 +og_description: Batesnummering toevoegen aan PDF met Aspose.Pdf in C#. Leer hoe je + een lege PDF-pagina toevoegt, PDF programmatically genereert en het uiteindelijke + document binnen enkele minuten opslaat. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Bates-nummers toevoegen aan PDF met Aspose – volledige C#-gids +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Bates‑nummering toevoegen aan PDF met Aspose – stapsgewijze handleiding +url: /nl/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Bates‑nummers toevoegen aan pdf met Aspose – stap‑voor‑stap gids + +Bates‑nummers toevoegen aan pdf met Aspose.Pdf is eenvoudig zodra je de kernstappen begrijpt. Als je ook een lege pagina pdf moet toevoegen of pdf programmatisch moet genereren, behandelt deze gids alles wat je nodig hebt. + +In deze tutorial zul je: + +* Een nieuw PDF‑document vanaf nul maken. +* Een lege pdf‑pagina toevoegen die de Bates‑nummers zal bevatten. +* Het Bates‑nummering‑artifact configureren met een aangepast voorvoegsel. +* De PDF opslaan zodat de nummers in het gegenereerde bestand verschijnen. + +Aan het einde heb je een volledig functionele C# console‑applicatie die een PDF produceert met Bates‑nummers zoals **CASE‑1000**, **CASE‑1001**, … – een veelvoorkomende eis voor juridische en e‑discovery‑werkstromen. + +## Vereisten + +* .NET 6.0 SDK of later (de code werkt ook met .NET Framework 4.8). +* Visual Studio 2022 of een andere C#‑compatibele IDE. +* Een geldige Aspose.Pdf for .NET‑licentie (of een gratis evaluatiesleutel). +* Basiskennis van C#‑syntaxis. + +> **Pro tip:** Als je de code zonder licentie uitvoert, voegt Aspose een klein watermerk toe aan de uitvoer‑PDF. + +## Stap 1: Het project instellen en Aspose.Pdf importeren + +Maak een nieuw console‑project aan en voeg het Aspose.Pdf‑NuGet‑pakket toe: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +De `using`‑directieven die voor het voorbeeld nodig zijn: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Deze namespaces geven je toegang tot de `Document`, `Page` en `BatesNumberingArtifact`‑klassen die later worden gebruikt. + +## Stap 2: Een lege pdf‑pagina toevoegen + +Een Bates‑nummer moet aan een pagina worden gekoppeld, dus we maken eerst een lege pagina die het nummer‑artifact zal ontvangen. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +De `Document`‑klasse vertegenwoordigt het volledige PDF‑bestand, terwijl `Pages.Add()` een nieuwe, lege pagina toevoegt aan het einde van de paginaverzameling van het document. Omdat het document leeg begint, maakt deze aanroep ook de eerste pagina aan. + +## Stap 3: Het Bates‑nummering‑artifact configureren + +Nu definiëren we hoe de Bates‑nummers eruit moeten zien. De `BatesNumberingArtifact` stelt je in staat om het startnummer, voorvoegsel, achtervoegsel en opmaakopties in te stellen. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Waarom dit belangrijk is:** +Het instellen van `StartNumber` op **1000** komt overeen met de gebruikelijke conventies voor juridische dossiers. Het `Prefix` zorgt ervoor dat elk nummer verschijnt als **CASE‑1000**, **CASE‑1001**, …, wat zoeken en sorteren vergemakkelijkt. + +## Stap 4: Het artifact aan de pagina koppelen + +Het artifact moet worden toegevoegd aan de `Artifacts`‑collectie van de pagina zodat Aspose het bij het opslaan op elke pagina rendert. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Wanneer het document wordt opgeslagen, herhaalt Aspose het artifact automatisch op alle pagina's en verhoogt het nummer voor elke volgende pagina. + +## Stap 5: (Optioneel) Extra pagina's toevoegen + +Als je meer pagina's nodig hebt, herhaal dan eenvoudig `pdfDocument.Pages.Add()`. Het Bates‑nummering‑artifact dat je in de vorige stap hebt gekoppeld, verschijnt automatisch op elke nieuwe pagina. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Stap 6: De PDF opslaan – pdf programmatisch genereren + +Sla tenslotte het document op schijf op. Dit is het moment waarop de Bates‑nummers op de pagina's worden gerenderd. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Verwacht resultaat:** +Open *BatesNumberedDocument.pdf* en je ziet een PDF van drie pagina's. Elke pagina toont een Bates‑nummer in de rechter‑onderhoek: + +* Pagina 1 → **CASE‑1000** +* Pagina 2 → **CASE‑1001** +* Pagina 3 → **CASE‑1002** + +De nummers worden automatisch verhoogd omdat het artifact is gekoppeld aan de paginaverzameling. + +## Volledig, uitvoerbaar voorbeeld + +Alles samenvoegend, hier is een compleet console‑programma dat je kunt kopiëren, plakken en uitvoeren: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Voer het programma uit met `dotnet run`. Na uitvoering, zoek het bestand op je bureaublad en controleer de Bates‑nummers. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Veelgestelde vragen en randgevallen + +### Wat als ik een ander lettertype of een andere positie nodig heb? + +De `BatesNumberingArtifact` biedt eigenschappen zoals `FontSize`, `FontColor`, `HorizontalAlignment` en `VerticalAlignment`. Bijvoorbeeld: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Hoe sluit ik een specifieke pagina uit van nummering? + +Maak een apart `BatesNumberingArtifact` voor de pagina's die je wilt nummeren en voeg het alleen aan die pagina's toe. Pagina's zonder gekoppeld artifact blijven ongenummerd. + +### Werkt dit met bestaande PDF's? + +Ja. In plaats van `new Document()`, laad een bestaand bestand: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Koppel vervolgens het artifact aan de gewenste pagina's en sla op. + +## Conclusie + +Je weet nu hoe je **bates numbering pdf** kunt toevoegen met Aspose.Pdf, hoe je **blank page pdf** kunt toevoegen, en hoe je **pdf programmatisch kunt genereren** in een schone, herbruikbare C#‑oplossing. De aanpak werkt met elk aantal pagina's, aangepaste voorvoegsels en stijlopties, waardoor je volledige controle over het uiteindelijke document hebt. + +Volgende stappen die je kunt verkennen: + +* Use **create pdf as + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [How to 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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 dfdea93583..9d4ff6b4dd 100644 --- a/pdf/dutch/net/programming-with-security-and-signatures/_index.md +++ b/pdf/dutch/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,8 @@ De tutorial geeft u een gedetailleerd overzicht van methoden en technieken om de | [PDF-handtekeningen controleren in C# – Hoe ondertekende PDF-bestanden te lezen](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Leer hoe u ondertekende PDF-bestanden kunt lezen en handtekeningen kunt verifiëren met Aspose.PDF voor .NET in C#. | | [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# met Aspose.PDF – volledige gids](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Leer hoe u PDF-handtekeningen kunt verifiëren in C# met Aspose.PDF via een volledige stap‑voor‑stap gids. | +| [PDF-handtekening tutorial: een digitale PDF-handtekening valideren met Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Leer hoe u een digitale handtekening in een PDF kunt valideren met Aspose.PDF voor .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/dutch/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/dutch/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..d91b9a4e98 --- /dev/null +++ b/pdf/dutch/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: pdf-handtekening tutorial die laat zien hoe je een PDF‑digitale handtekening + valideert met behulp van handtekeningvalidatie‑opties en C#‑code – snelle stapsgewijze + gids +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: nl +lastmod: 2026-08-08 +og_description: De pdf-handtekening‑tutorial leidt je door het valideren van een digitale + PDF-handtekening met Aspose.PDF. Leer hoe je de opties voor handtekeningvalidatie + kunt configureren en het resultaat kunt controleren. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: pdf-handtekening tutorial – valideer PDF digitale handtekeningen in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'pdf-handtekening tutorial: valideer een digitale PDF-handtekening met Aspose.PDF' +url: /nl/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf-handtekening tutorial – valideer een PDF digitale handtekening in C# + +Als je een **pdf signature tutorial** nodig hebt die precies laat zien hoe je een PDF digitale handtekening valideert, dan biedt deze gids alles wat je nodig hebt. Je ziet hoe je een ondertekende PDF laadt, **signature validation options** configureert, de validatie uitvoert en het resultaat weergeeft — allemaal met duidelijke, uitvoerbare C# code. + +Het valideren van een PDF-handtekening is essentieel wanneer je contracten, facturen of andere juridisch bindende documenten verwerkt. Deze tutorial doorloopt de volledige workflow, zodat je handtekeningcontroles kunt integreren in je eigen applicaties zonder te hoeven raden welke API‑aanroepen nodig zijn. + +## Wat je zult bereiken + +* Een ondertekend PDF‑bestand laden met Aspose.PDF. +* **signature validation options** instellen, zoals het hash‑algoritme. +* De `Validate`‑methode aanroepen om **validate pdf digital signature**. +* Een duidelijke “Signature valid”‑melding naar de console schrijven. + +**Voorwaarden** + +* .NET 6.0 (of later) geïnstalleerd. +* Visual Studio 2022 (of een andere C# IDE). +* Aspose.PDF for .NET NuGet‑pakket (`Aspose.Pdf`). + +> **Pro tip:** Gebruik de nieuwste Aspose.PDF‑versie voor ondersteuning van SHA‑3‑algoritmen en verbeterde validatie‑prestaties. + +## Stap 1: Installeer het Aspose.PDF NuGet‑pakket + +Open je project in Visual Studio en voer de volgende opdracht uit in de Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Het pakket voegt de `Aspose.Pdf`‑namespace toe, die de `Document`‑klasse en de handtekening‑gerelateerde API’s bevat die je zult gebruiken. + +## Stap 2: Laad het ondertekende PDF‑document + +De eerste code‑regel maakt een `Document`‑object aan dat het PDF‑bestand op schijf vertegenwoordigt. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Waarom dit belangrijk is:* De `Document`‑klasse parseert de PDF‑structuur en maakt de `Signatures`‑collectie beschikbaar die alle ingebedde digitale handtekeningen bevat. Als het bestandspad onjuist is, wordt er een uitzondering gegooid, controleer dus het pad voordat je het programma uitvoert. + +## Stap 3: Configureer signature validation options + +Je kunt het validatieproces aanpassen met de `SignatureValidationOptions`‑klasse. In deze tutorial geven we het hash‑algoritme op, maar je kunt ook certificaat‑intrekkingscontroles, tijdstempel‑verificatie en meer instellen. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Waarom dit belangrijk is:* Het hash‑algoritme moet overeenkomen met het algoritme dat bij het maken van de handtekening is gebruikt. Het gebruik van een niet‑overeenkomend algoritme zorgt ervoor dat de validatie mislukt, zelfs als de handtekening verder correct is. + +## Stap 4: Valideer de eerste handtekening + +De meeste PDF‑bestanden bevatten één handtekening, maar de `Signatures`‑collectie kan er meerdere bevatten. Dit voorbeeld valideert de eerste entry (`[0]`). De `Validate`‑methode retourneert een Boolean die succes aangeeft. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Randgeval:* Als de PDF geen handtekeningen bevat, is `document.Signatures.Count` `0` en leidt het benaderen van `[0]` tot een `IndexOutOfRangeException`. Bescherm hiertegen met een eenvoudige controle: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Stap 5: Toon het validatieresultaat + +Schrijf tenslotte het resultaat naar de console. Deze stap toont het **check pdf signature**‑resultaat in een mens‑leesbaar formaat. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Wanneer je het programma uitvoert, zou je moeten zien: + +``` +Signature valid: True +``` + +Als de handtekening beschadigd is, een niet‑ondersteund algoritme gebruikt, of het certificaat is ingetrokken, zal de output `False` zijn. + +## Volledig, uitvoerbaar voorbeeld + +Kopieer de volgende code naar een nieuw console‑project (`dotnet new console`) en vervang `YOUR_DIRECTORY/signed.pdf` door het pad naar je ondertekende PDF‑bestand. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Verwachte output + +``` +Signature valid: True +``` + +Als de handtekening de validatie niet doorstaat, zal de console `Signature valid: False` weergeven. + +## Veelgestelde vragen en probleemoplossing + +| Vraag | Antwoord | +|----------|--------| +| **Wat als de PDF een ander hash‑algoritme gebruikt?** | Wijzig `HashAlgorithm` in `SignatureValidationOptions` zodat deze overeenkomt, bijvoorbeeld `HashAlgorithm.SHA256`. | +| **Hoe valideer ik alle handtekeningen in een PDF met meerdere handtekeningen?** | Loop door `document.Signatures` en roep `Validate` aan voor elke entry. | +| **Kan ik de trust‑chain van het ondertekeningscertificaat verifiëren?** | Stel `validationOptions.CheckCertificateRevocation = true` in en geef eventueel een aangepaste `CertificateStore` op om vertrouwde root‑certificaten op te nemen. | +| **Wat als ik timestamp‑validatie moet ondersteunen?** | Schakel `validationOptions.CheckTimestamp = true` in. Aspose.PDF zal dan het ingebedde timestamp‑token verifiëren. | +| **Is er een manier om gedetailleerde validatiefouten te krijgen?** | Gebruik `ValidateEx(validationOptions, out ValidationResult result)`; `result` bevat `ErrorMessage` en `ErrorCode` voor elke fout. | + +## Volgende stappen + +* Verken **validate pdf signature** voor meerdere handtekeningen door over `document.Signatures` te itereren. +* Combineer deze tutorial met **check pdf signature** in een web‑API om realtime verificatie te bieden voor geüploade contracten. +* Duik dieper in **signature validation options** zoals CRL/OCSP‑controles, timestamp‑validatie en aangepaste trust‑stores. + +Je hebt nu een volledige **pdf signature tutorial** die laat zien hoe je **validate pdf digital signature** kunt uitvoeren met Aspose.PDF in C#. Voel je vrij om de code aan te passen aan je eigen workflow, logging toe te voegen, of het te integreren in grotere document‑verwerkings‑pijplijnen. Veel programmeerplezier! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met 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. + +- [Digitale Handtekening Aspose Pdf Net Tutorial](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digitale Handtekening Aspose Pdf Net Tutorial](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Digitale Handtekening Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/dutch/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..da77c4bc7b --- /dev/null +++ b/pdf/dutch/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: Controleer PDF-handtekening in C# met Aspose.PDF. Leer hoe je een digitale + PDF-handtekening kunt valideren en PDF-handtekeningen kunt opsommen in slechts een + paar regels code. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: nl +lastmod: 2026-08-08 +og_description: Controleer PDF-handtekening in C# met Aspose.PDF. Deze gids laat zien + hoe je digitale PDF-handtekeningen valideert, PDF-handtekeningen opsomt en gecompromitteerde + handtekeningen efficiënt afhandelt. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: PDF-handtekening verifiëren in C# – snelle Aspose.PDF tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: PDF-handtekening verifiëren in C# met Aspose.PDF – volledige gids +url: /nl/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-handtekening verifiëren in C# met Aspose.PDF – volledige gids + +Als je een **PDF-handtekening wilt verifiëren** in een .NET‑applicatie, laat deze gids je een beknopte manier zien om dit te doen met Aspose.PDF. Je leert hoe je **digitale handtekening PDF kunt valideren**, **PDF-handtekeningen kunt opsommen**, en gecompromitteerde handtekeningen kunt detecteren in slechts een paar regels code. + +De tutorial behandelt alles, van het installeren van de bibliotheek tot het afhandelen van randgevallen zoals niet‑ondertekende documenten of versleutelde PDF‑bestanden. Aan het einde kun je handtekeningverificatie integreren in elk C#‑project, zodat de authenticiteit van binnenkomende PDF‑bestanden wordt gegarandeerd. + +**Prerequisites** + +- .NET 6.0 of later (de code werkt ook met .NET Framework 4.6+). +- Basiskennis van C# en Visual Studio (of een IDE naar keuze). +- Een Aspose.PDF for .NET‑licentie (de gratis proefversie werkt voor evaluatie). + +Als je aan deze eisen voldoet, ben je klaar om PDF‑handtekeningen te gaan verifiëren. + +## PDF-handtekening verifiëren – project opzetten + +1. **Voeg het Aspose.PDF NuGet‑pakket toe** + Open de Package Manager Console en voer uit: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importeer de vereiste namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## PDF-document laden + +De eerste functionele stap is het openen van de PDF die je wilt inspecteren. Aspose.PDF leest het bestand in het geheugen, waardoor je de handtekeningen kunt opvragen. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Waarom dit belangrijk is** – Het laden van het document binnen een `using`‑blok garandeert dat de bestandshandle snel wordt vrijgegeven, waardoor bestandsvergrendelingsproblemen in langdurige services worden voorkomen. + +## PDF-handtekeningen opsommen + +Voordat je een handtekening valideert, wil je misschien weten hoeveel handtekeningen er aanwezig zijn. Deze stap toont de **list PDF signatures**‑functionaliteit. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Uitleg** + +- `document.Signatures` retourneert een collectie van `Signature`‑objecten. +- `Count` geeft aan hoeveel handtekeningen er bestaan. +- Elke `Signature` toont metadata zoals `Id`, `SignatureType` en `Reason`, wat nuttig kan zijn voor audit‑logboeken. + +**Valkuil** – Als de PDF geen handtekeningen heeft, is `Count` `0` en wordt de lus niet uitgevoerd. Je kunt dit scenario netjes afhandelen: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Digitale handtekening PDF valideren – gecompromitteerde handtekeningen detecteren + +Nu je handtekeningen kunt opsommen, is de kernopdracht om de **verify PDF signature**‑integriteit te controleren. Aspose.PDF biedt de eigenschap `IsCompromised`, die `true` teruggeeft wanneer de cryptografische hash van de handtekening niet meer overeenkomt met de documentinhoud. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Waarom dit werkt** + +- `Signature.IsCompromised` voert een volledige cryptografische validatie uit met behulp van de ingebedde certificaatketen. +- De `Any`‑LINQ‑operator stopt bij de eerste gecompromitteerde handtekening, waardoor de controle efficiënt blijft, zelfs bij documenten met veel handtekeningen. + +### Meerdere handtekeningen afzonderlijk afhandelen + +Als je wilt weten welke specifieke handtekening is mislukt, itereer dan in plaats van `Any` te gebruiken: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** Sla het validatieresultaat samen met `sig.Id` op in een database voor later forensisch onderzoek. + +## Resultaten weergeven en randgevallen overwegen + +Hieronder vind je een compleet, uitvoerbaar programma dat de bovenstaande stappen combineert. Het laadt een PDF, somt alle handtekeningen op, valideert ze en geeft een duidelijk resultaat weer. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Verwachte output (geldige handtekeningen)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Verwachte output (gecompromitteerde handtekening)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Veelvoorkomende valkuilen en hoe ze te vermijden + +| Valkuil | Oplossing | +|---------|----------| +| De PDF is met een wachtwoord beveiligd. | Geef het wachtwoord door via `document.Encrypt.Decrypt(password)` voordat je `Signatures` benadert. | +| Er is geen Aspose.PDF‑licentie ingesteld. | Gebruik `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` om evaluatiewatermerken te vermijden. | +| Grote PDF‑bestanden veroorzaken hoog geheugenverbruik. | Verwerk het bestand in streaming‑modus (`Document.Load(stream)`) in plaats van het hele bestand in één keer te laden. | + +## Conclusie + +Je weet nu hoe je **PDF-handtekening kunt verifiëren** in C# met Aspose.PDF, hoe je **digitale handtekening PDF kunt valideren**, en hoe je **PDF-handtekeningen kunt opsommen** voor rapportage‑ of auditdoeleinden. Het volledige voorbeeld laat zien hoe je een document laadt, de handtekeningen opsomt, elke handtekening controleert op compromittering en typische randgevallen afhandelt. + +Volgende stappen die je kunt verkennen: + +- **Timestamp‑tokens valideren** om te verzekeren dat een handtekening is gemaakt vóórdat een certificaat is verlopen. +- **Ondertekenaar‑certificaten extraheren** (`sig.Certificate`) voor aangepaste trust‑store‑validatie. +- **Integreren met ASP.NET Core** om automatisch geüploade PDF‑bestanden die de verificatie niet doorstaan te weigeren. + +Voel je vrij om te experimenteren met meerdere handtekeningen, aangepaste validatielogica of alternatieve PDF‑bibliotheken. Als je deze gids nuttig vond, deel hem dan met teamgenoten of voeg je eigen tips toe in de reacties. + +## 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. + +- [Hoe PDF te verifiëren – PDF-handtekening valideren met Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [PDF-handtekening verifiëren in C# – Complete gids om digitale handtekening PDF te valideren](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net digitale handtekening verifiëren](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/dutch/net/text-operations/_index.md index 4fbb54bb0b..28d70c7ec8 100644 --- a/pdf/dutch/net/text-operations/_index.md +++ b/pdf/dutch/net/text-operations/_index.md @@ -164,6 +164,9 @@ Een codetutorial voor Aspose.PDF Net ### [Stijltekst in gelabelde PDF's met Aspose.PDF voor .NET | Handleiding voor toegankelijke en esthetische PDF-creatie](./style-text-tagged-pdfs-aspose-pdf-net/) Leer hoe u tekst in gelabelde PDF-documenten kunt stylen met Aspose.PDF voor .NET. Deze handleiding behandelt de installatie, technieken en praktische toepassingen om de toegankelijkheid te verbeteren. +### [Hoe PDF samen te vatten met Aspose.Pdf.AI – handleiding](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Leer hoe u met Aspose.Pdf.AI automatisch samenvattingen van PDF-documenten genereert in .NET. + ## Aanvullende bronnen - [Aspose.PDF voor Netdocumentatie](https://docs.aspose.com/pdf/net/) diff --git a/pdf/dutch/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/dutch/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..4e6b706e38 --- /dev/null +++ b/pdf/dutch/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Hoe PDF samenvatten met Aspose.Pdf.AI – leer hoe je PDF kunt samenvatten + met AI, een PDF‑samenvatting genereert en de samenvatting opslaat als PDF. Complete + code en best practices. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: nl +lastmod: 2026-08-08 +og_description: Hoe PDF samen te vatten met Aspose.Pdf.AI. Deze tutorial laat zien + hoe je PDF kunt samenvatten met AI, een PDF‑samenvatting genereert en de samenvatting + opslaat als PDF in een paar regels C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Hoe PDF samen te vatten met Aspose.Pdf.AI – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Hoe PDF samen te vatten met Aspose.Pdf.AI – gids +url: /nl/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe PDF samen te vatten met Aspose.Pdf.AI – gids + +Als je **hoe PDF samen te vatten** snel en betrouwbaar nodig hebt, kun je een AI‑model het zware werk laten doen. Deze tutorial laat je precies zien hoe je PDF kunt samenvatten met AI, een PDF‑samenvatting genereert, en de samenvatting opslaat als PDF met behulp van de Aspose.Pdf.AI SDK voor .NET. Je krijgt een volledig, uitvoerbaar voorbeeld en een uitleg van elke regel zodat je de oplossing kunt aanpassen aan je eigen projecten. + +De gids behandelt: + +* Het voorbereiden van de bronmap en API‑sleutel +* Het maken van een `OpenAIClient` die met het model communiceert +* Het configureren van samenvattingsopties zoals temperature en documentpad +* Het bouwen van een `SummaryCopilot` en asynchroon ophalen van de samenvattingstekst +* Het opslaan van de gegenereerde samenvatting terug naar een PDF‑bestand + +Er zijn geen externe services nodig buiten het OpenAI‑endpoint, en de code werkt met .NET 6+ en Aspose.Pdf.AI 23.7 (of later). + +## Vereisten + +* **.NET 6 SDK** (of een nieuwere .NET‑versie) +* **Aspose.Pdf.AI for .NET** – installeren via NuGet: `dotnet add package Aspose.Pdf.AI` +* Een **OpenAI API‑sleutel** met toegang tot het model dat je wilt gebruiken (bijv. `gpt‑4o`) +* Een PDF‑bestand dat je wilt samenvatten (het voorbeeld gebruikt `SampleDocument.pdf`) + +Zorg ervoor dat de map die je opgeeft in `dataDirectory` bestaat en dat de applicatie lees‑/schrijfrechten heeft. + +## Stap 1: Projectstructuur opzetten + +Maak een console‑project (of integreer de code in een bestaand .NET‑app). De minimale `Program.cs` ziet er als volgt uit: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Waarom deze structuur belangrijk is + +* **`await using`** verwijdert de `OpenAIClient` automatisch, waardoor HTTP‑verbindingen worden vrijgegeven. +* **`Path.Combine`** bouwt OS‑onafhankelijke paden, waardoor bugs op Windows versus Linux worden voorkomen. +* **Temperature** regelt de creativiteit; `0.5` geeft een evenwichtige, feitelijke samenvatting. +* **`GetSummaryAsync`** retourneert platte tekst, terwijl `SaveSummaryAsync` een correcte PDF maakt die lettertypen en lay‑out behoudt. + +## Stap 2: Begrijp de samenvattingsopties + +De `OpenAISummaryCopilotOptions`‑klasse laat je het samenvattingsproces fijn afstemmen: + +| Optie | Doel | Typische waarden | +|--------|------|------------------| +| `WithTemperature(double)` | Regelt willekeur. `0.0` = deterministisch, `1.0` = zeer creatief. | `0.3‑0.7` voor zakelijke documenten | +| `WithDocument(string)` | Pad naar de bron‑PDF. Moet een leesbaar bestand zijn. | Elke absolute of relatieve pad | +| `WithPrompt(string)` *(optional)* | Aangepaste prompt om het model te sturen. | “Summarize the key findings in 150 words.” | + +Als je **grote PDF‑bestanden** hebt (groter dan 10 MB of veel pagina’s), overweeg dan het document op te splitsen in kleinere stukken vóór het samenvatten om token‑limiet‑fouten te voorkomen. De SDK splitst niet automatisch; je kunt `PdfDocument` uit `Aspose.Pdf` gebruiken om pagina’s te extraheren en ze één voor één te verwerken. + +## Stap 3: Voer de code uit en controleer de output + +1. Plaats `SampleDocument.pdf` in de `Data`‑map die je hebt opgegeven. +2. Vervang `"YOUR_API_KEY"` door je echte OpenAI‑sleutel. +3. Voer `dotnet run` uit. + +Je zou twee secties in de console moeten zien: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Open `Summary_out.pdf` met een PDF‑viewer – deze bevat dezelfde samenvattingstekst, opgemaakt met een standaardlettertype. De PDF is volledig doorzoekbaar omdat de SDK de tekst als een standaard PDF‑pagina inbedt. + +## Stap 4: Veelvoorkomende variaties en afhandeling van randgevallen + +### Alleen een deel van het document samenvatten + +Als je **pdf met ai samenvatten** voor een specifiek hoofdstuk nodig hebt, extraheer dat bereik eerst: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Wijs vervolgens `WithDocument` naar `Chapter5.pdf`. + +### De lengte van de samenvatting aanpassen + +Je kunt de lengte beïnvloeden door een aangepaste prompt toe te voegen: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API‑fouten afhandelen + +Netwerkstoringen of quotalimieten veroorzaken `Aspose.Pdf.AI.Exceptions.AIException`. Plaats de aanroep in een `try / catch`‑blok: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### De samenvatting opslaan in een aangepaste lay‑out + +`SaveSummaryAsync` schrijft platte tekst. Om de PDF te stylen (titel, header of branding toevoegen), maak je een nieuw `PdfDocument` aan en voeg je de samenvatting handmatig in: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Stap 5: Prestatietips en best practices + +* **Herbruik de `OpenAIClient`** voor meerdere samenvattingen in hetzelfde proces – een client aanmaken is goedkoop, maar het hergebruiken van de onderliggende `HttpClient` vermindert socket‑uitputting. +* **Cache de samenvatting** als de bron‑PDF niet verandert; je kunt de tekst in een database opslaan en de API overslaan. + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden gedemonstreerd. Elke bron bevat volledige werkende code‑voorbeelden met 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 specifieke PDF‑pagina's te extraheren en op te slaan met Aspose.PDF voor .NET - Een uitgebreide gids](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Hoe PDF‑bijlagen te extraheren en op te slaan met Aspose.PDF .NET: Een uitgebreide gids](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Hoe HTML naar PDF te converteren met Aspose.PDF .NET: Een volledige gids](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/conversion-export/_index.md b/pdf/english/net/conversion-export/_index.md index 6512642a31..a73d5340f3 100644 --- a/pdf/english/net/conversion-export/_index.md +++ b/pdf/english/net/conversion-export/_index.md @@ -24,7 +24,7 @@ Learn advanced techniques for converting PDFs to Excel using Aspose.PDF for .NET Master Aspose.PDF for .NET to convert XML data into PDF seamlessly. Learn efficient loading, binding, and saving techniques with practical examples. ### [Comprehensive Guide to Convert XML to PDF Using Aspose.PDF .NET for Developers](./convert-xml-pdf-aspose-net-guide/) -Learn how to convert XML data into professional PDF documents using Aspose.PDF for .NET. This guide covers installation, conversion processes, and practical applications. +Learn how to convert XML data into professional PDF documents using Aspose.PDF .NET. This guide covers installation, conversion processes, and practical applications. ### [Comprehensive Guide: Convert PDF to HTML Using Aspose.PDF .NET with Custom Strategies](./convert-pdf-html-aspose-dotnet-custom-strategies/) Learn how to convert PDFs to HTML with custom strategies using Aspose.PDF for .NET. Maintain high fidelity, handle images, fonts, and CSS effectively. @@ -80,6 +80,8 @@ A code tutorial for Aspose.PDF Net ### [Convert PDF to HTML with Custom Image URLs Using Aspose.PDF .NET: A Comprehensive Guide](./convert-pdf-html-custom-image-urls-aspose-pdf-net/) Learn how to convert PDF documents to HTML format using Aspose.PDF for .NET, including customizing image URLs and implementing a tailored resource-saving strategy. +### [Save PDF as HTML with Aspose.PDF – step‑by‑step guide](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + ### [Convert PDF to PNG with Aspose.PDF .NET: Enhance Font Hinting for Sharp Text Rendering](./convert-pdf-png-aspose-net-font-hinting/) Learn how to convert PDF documents into high-quality PNG images using Aspose.PDF .NET, ensuring sharp text rendering through font hinting. @@ -96,13 +98,13 @@ Learn how to convert PDF pages to high-quality TIFF images using Aspose.PDF for Learn how to convert complex PDF documents into editable TeX format using Aspose.PDF for .NET. This guide covers installation, conversion steps, and performance optimization. ### [Convert PDF to Word Using Aspose.PDF .NET: A Comprehensive Guide](./convert-pdf-word-aspose-net/) -Learn how to seamlessly convert PDF files to DOC and DOCX formats using Aspose.PDF for .NET. Master advanced conversion techniques with our step-by-step guide. +Learn how to seamlessly convert PDF files to DOC and DOCX formats using Aspose.PDF .NET. Master advanced conversion techniques with our step-by-step guide. ### [Convert PDF to XML Using Aspose.PDF for .NET: Step-by-Step Guide](./convert-pdf-to-xml-aspose-pdf-net/) Learn how to convert PDF files to XML format with Aspose.PDF for .NET. Enhance data integration and processing capabilities. ### [Convert PDF/A to Standard PDF Using Aspose.PDF .NET: A Comprehensive Guide](./convert-pdf-a-standard-pdf-aspose-net/) -Learn how to seamlessly convert PDF/A documents into standard PDFs using Aspose.PDF for .NET with this step-by-step guide. +Learn how to seamlessly convert PDF/A documents into standard PDFs using Aspose.PDF .NET with this step-by-step guide. ### [Convert PDFs to Interactive HTML with Custom CSS Using Aspose.PDF .NET](./convert-pdfs-to-html-custom-css-aspose-pdf-net/) Learn how to transform PDF documents into interactive, web-friendly HTML formats using Aspose.PDF .NET, complete with custom CSS styling. @@ -141,7 +143,7 @@ Learn how to crop specific regions of a PDF page and convert them into images us Learn how to efficiently export data from applications to PDF using Aspose.PDF for .NET. This guide covers setup, code examples in C#, and key features. ### [Export PDF Annotations with Aspose.PDF .NET: A Comprehensive Guide](./export-annotations-aspose-pdf-net/) -Learn how to efficiently export annotations from PDFs using Aspose.PDF for .NET. This guide covers setup, implementation, and best practices. +Learn how to efficiently export annotations from PDFs using Aspose.PDF .NET. This guide covers setup, implementation, and best practices. ### [Export PDF Data to XML with Aspose.PDF for .NET: A Step-by-Step Guide](./export-pdf-data-to-xml-aspose-dotnet-guide/) Learn how to efficiently export PDF form data into structured XML using Aspose.PDF for .NET, a powerful library designed for PDF manipulation. @@ -241,4 +243,4 @@ Learn how to convert PDF documents to TIFF images using Aspose.PDF for .NET. Mas {{< /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/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/english/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..d6a5fa038f --- /dev/null +++ b/pdf/english/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-08-08 +description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: en +lastmod: 2026-08-08 +og_description: Save PDF as HTML using Aspose.PDF. This guide shows you how to convert + PDF to HTML, skip raster images, and avoid common pitfalls. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Save PDF as HTML with Aspose.PDF – complete C# tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Save PDF as HTML with Aspose.PDF – step‑by‑step guide +url: /net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save PDF as HTML with Aspose.PDF – step‑by‑step guide + +If you need to **save PDF as HTML** quickly, this tutorial shows you exactly how to do it with Aspose.PDF for .NET. Whether you are building a document‑viewer web app or exporting reports for SEO‑friendly indexing, you’ll see a complete, runnable solution that converts PDF to HTML while giving you fine‑grained control over raster images. + +In addition to the primary task, we’ll also cover the **aspose pdf html conversion** options that let you skip raster images, adjust CSS handling, and manage large documents efficiently. By the end of this guide you’ll have a self‑contained program you can drop into any .NET project. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 SDK or later (the code works with .NET Core and .NET Framework as well) +* Visual Studio 2022 or any IDE that supports C# +* An Aspose.PDF for .NET license (the free trial works for evaluation) +* A PDF file named `report.pdf` placed in a folder you can reference from code + +No additional NuGet packages are required beyond `Aspose.Pdf`. + +## Step 1: Install the Aspose.PDF NuGet package + +Open the terminal in your project folder and run: + +```bash +dotnet add package Aspose.Pdf +``` + +The package adds the `Aspose.Pdf` namespace, which contains the `Document` class and the `HtmlSaveOptions` type used for **convert pdf to html** operations. + +## Step 2: Create a console project and add using directives + +Create a new console application if you don’t already have one: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Then open `Program.cs` and add the required namespaces: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +These directives give you access to the core PDF API and the HTML save options that control the **aspose convert pdf html** process. + +## Step 3: Load the PDF document + +The first operational line reads the source PDF into an `Aspose.Pdf.Document` object. This object represents the entire PDF file in memory and provides methods for saving, editing, and extracting content. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Why this matters*: Loading the document once keeps memory usage predictable, especially for large PDFs. If the file cannot be found, Aspose throws a `FileNotFoundException`, so ensure the path is correct. + +## Step 4: Configure HTML save options + +`HtmlSaveOptions` lets you fine‑tune how the PDF is converted. In this tutorial we skip raster images to keep the output lightweight, but you can change the mode to `EmbedAll` if you need them. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Key points**: + +* `RasterImagesSavingMode.Skip` tells Aspose to ignore bitmap images (JPEG, PNG) during conversion. This is ideal when the source PDF contains scanned pages you don’t need in the HTML view. +* You can switch to `EmbedAll` or `External` if you want images saved as separate files. +* The `ResourcesFolder` property becomes relevant only when images are saved externally. + +## Step 5: Save the document as HTML + +Now you write the HTML file to disk using the configured options. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +After this call finishes, `report.html` contains the textual content, vector graphics, and layout preserved from the original PDF, but without any raster images. You can open the file in a browser to verify the result. + +## Expected output + +When you open `report.html` in Chrome or Edge, you should see: + +* All headings, paragraphs, and vector shapes rendered correctly. +* No `` tags for raster images (they are omitted because of `Skip` mode). +* Clean, minimal CSS either inline or in a separate stylesheet, depending on the option you chose. + +If you need to confirm that images were omitted, inspect the page source (`Ctrl+U`). You will find no `` entries. + +## Step 6: Handle common edge cases + +### 6.1 Large PDFs (> 100 MB) + +For very large files, enable streaming to reduce memory pressure: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming writes HTML chunks directly to disk, preventing the entire document from being held in memory. + +### 6.2 Password‑protected PDFs + +If the source PDF is encrypted, supply the password before saving: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Attempting to save without decrypting throws an `InvalidPasswordException`. + +### 6.3 Unicode characters + +Aspose.PDF automatically embeds Unicode fonts, but you can force a specific font for consistent rendering: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Custom file naming for multiple pages + +If you want each PDF page as a separate HTML file, set: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +This creates `report_page_1.html`, `report_page_2.html`, etc., which can be useful for pagination in web applications. + +## Full, runnable example + +Below is the complete program that incorporates all the steps discussed. Copy it into `Program.cs`, adjust the paths, and run `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verification**: After running, the console prints the success message. Open the generated HTML file in a browser to confirm that text and vector graphics appear correctly and that raster images are omitted. + +## Pro tips and pitfalls + +* **Pro tip**: If you later need the raster images, change `RasterImagesSavingMode` to `External` and set `ResourcesFolder`. This creates an `images` sub‑folder with the extracted bitmaps. +* **Watch out for**: Using the default `Skip` mode on PDFs that rely heavily on scanned images will produce blank areas where those images belong. Always test with a representative sample of your documents. +* **Performance tip**: Re‑using a single `HtmlSaveOptions` instance for multiple documents reduces object‑creation overhead in batch conversions. +* **Version check**: The API shown works with Aspose.PDF for .NET version 23.9 and later. Earlier versions may use `HtmlSaveOptions.RasterImagesSavingMode` with a slightly different enum name. + +## Conclusion + +You now know how to **save PDF as HTML** using Aspose.PDF, how to control raster image handling, and how to address typical challenges such as large files, password protection, and per‑page HTML output. This complete solution lets you integrate PDF‑to‑HTML conversion into any C# application with confidence. + +### What’s next? + +* Explore **aspose pdf html conversion** for embedding fonts and customizing CSS. +* Combine this conversion with a web API to serve HTML on demand. +* Try the opposite direction—**convert pdf to html** and then back to PDF—to validate round‑trip fidelity. + +Feel free to experiment with the options, and share your findings in the comments or on the Aspose forums. 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. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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-with-aspose-pdf-step-by-step-guide/og-image.png b/pdf/english/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..86a02d3020597e817022321b1cba09134be6dfc6 GIT binary patch literal 48326 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 literal 0 HcmV?d00001 diff --git a/pdf/english/net/digital-signatures/_index.md b/pdf/english/net/digital-signatures/_index.md index 76758a05ac..33dac4cb90 100644 --- a/pdf/english/net/digital-signatures/_index.md +++ b/pdf/english/net/digital-signatures/_index.md @@ -59,6 +59,9 @@ Learn how to load a PDF in C#, convert it to PDF/X‑4 format, and list its digi ### [Validate PDF Signature with Aspose – Convert PDF to HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Learn how to validate a PDF signature using Aspose and convert the PDF to HTML in a single workflow. +### [How to validate PDF with Aspose.PDF – check pdf signature validity in C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Learn how to validate a PDF's digital signature using Aspose.PDF in C#. + ## Additional Resources - [Aspose.PDF for Net Documentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..b01c49d939 --- /dev/null +++ b/pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: en +lastmod: 2026-08-08 +og_description: How to validate PDF using Aspose.PDF. Learn to validate pdf digital + signature and check pdf signature validity in a few lines of C# code. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: How to validate PDF – check pdf signature validity with Aspose.PDF in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: How to validate PDF with Aspose.PDF – check pdf signature validity in C# +url: /net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to validate PDF with Aspose.PDF – check pdf signature validity in C# + +If you need to **how to validate PDF** files that contain digital signatures, this tutorial shows you a complete solution. You’ll learn to load a PDF, create a certificate validator, and check pdf signature validity with Aspose.PDF for .NET. + +Validating a PDF digital signature is a common requirement for compliance, invoicing, and secure document exchange. By the end of this guide you can confidently verify whether a signed PDF is trustworthy, and you’ll understand how to handle typical edge cases such as missing certificates or multiple signatures. + +## Prerequisites + +Before you start, make sure you have: + +- .NET 6.0 or later installed +- An IDE such as Visual Studio 2022 (any editor that supports C# works) +- A licensed copy of **Aspose.PDF for .NET** (the free trial works for evaluation) +- A signed PDF file (`signed.pdf`) and, if the signature relies on a private CA, the corresponding trusted certificate (`trustedCertificate.pfx`) + +No additional NuGet packages are required beyond `Aspose.PDF`. + +## Step 1: Install Aspose.PDF + +Open a terminal in your project folder and run: + +```bash +dotnet add package Aspose.PDF +``` + +The command adds the latest Aspose.PDF library, which contains the `Document` and `CertificateValidator` classes used later. + +## Step 2: Load the PDF document + +Loading a PDF is the first operation you perform when you **how to load pdf** programmatically. The `Document` constructor accepts a file path, a stream, or a byte array. Using a full path keeps the example clear. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Why this matters:** The `Document` object represents the entire PDF file in memory. Without loading the file, you cannot access its `Signatures` collection, which is required to **check pdf signature** data. + +## Step 3: Prepare the certificate validator + +A digital signature is trusted only if the signing certificate chains to a root that you trust. `CertificateValidator` lets you point Aspose.PDF at a trusted certificate store or a specific PFX file. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +If your PDF uses a public CA that Windows already trusts, you can omit the `certPath` and instantiate `CertificateValidator` with its default constructor. Providing a custom PFX is useful for internal PKI environments. + +## Step 4: Validate the first digital signature + +A PDF may contain multiple signatures. For simplicity, this tutorial validates the first signature (`Signatures[0]`). The `Validate` method returns `true` when the signature is cryptographically intact **and** the signing certificate is trusted. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**What happens under the hood:** +- The method checks the hash of the signed content against the signature value. +- It builds the certificate chain using the provided validator. +- Revocation status (CRL/OCSP) is evaluated if the validator is configured for it. + +### Handling multiple signatures + +If your PDF contains more than one signature, iterate over the `Signatures` collection: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +This pattern lets you **check pdf signature** on every page and report individual results. + +## Step 5: Output the validation result + +Finally, write the outcome to the console. In production code you would likely log the result or raise an exception for an invalid signature. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +or + +``` +Invalid +``` + +The message reflects the boolean returned by `Validate`. An “Invalid” result may indicate a tampered document, an untrusted certificate, or an expired signing certificate. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +If you receive `Invalid` and you know the signature should be trusted, verify that the correct root certificate is supplied to `CertificateValidator`. Use the overload that accepts a `X509Certificate2Collection` for multiple roots. + +### 2. Signature with external references +Some signatures cover external content (e.g., an attached file). Ensure the external resources are accessible; otherwise the hash verification fails. + +### 3. Time‑stamp validation +A signature may include a time‑stamp token. To validate it, configure the validator to check the time‑stamp authority (TSA) certificates: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +Loading a multi‑hundred‑page PDF can consume memory. If you only need signature data, use `PdfFileEditor` to extract the signature dictionary without rendering pages. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +`Document` instances are not thread‑safe. Create a new `Document` per thread when validating many PDFs in parallel. + +## Full, runnable example + +Below is the complete program you can copy, paste, and run after updating the file paths. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Running the program** prints a line for each signature, clearly indicating whether the PDF passes the **validate pdf digital signature** check. + +## Conclusion + +You now know **how to validate PDF** files that contain digital signatures using Aspose.PDF for .NET. The tutorial covered loading a PDF, configuring a certificate validator, checking pdf signature validity, handling multiple signatures, and troubleshooting common issues. + +Next, explore related topics such as **how to sign PDF**, **how to add timestamp tokens**, and **how to extract signed content**. These extensions let you build a full end‑to‑end secure document workflow in C#. + +--- + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/og-image.png b/pdf/english/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..3eead24c8054499e8411082f019a5d2c8bcd0771 GIT binary patch literal 46925 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%0A6E@DJrQD0ro`$*4gv?#DF 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + +If you need a **pdfx4 conversion tutorial**, this guide walks you through the complete process of setting the PDF standard to PDF/X‑4 and converting a PDF using Aspose. Whether you are preparing print‑ready files or ensuring long‑term archival compliance, you’ll learn a reliable **aspose pdf format conversion** workflow that works with .NET 6 and later. + +The tutorial covers everything from project setup to handling edge cases such as missing source files or unsupported features. By the end of the article you will have a self‑contained C# program that produces a PDF/X‑4 compliant file ready for downstream workflows. + +## Prerequisites + +Before you start, make sure you have: + +- .NET 6 SDK or newer installed ([download here](https://dotnet.microsoft.com/download)) +- A valid Aspose.PDF for .NET license (the free trial works for testing) +- Visual Studio 2022, VS Code, or any IDE that supports .NET development +- A source PDF file you want to convert (place it in a known folder) + +These requirements ensure the code runs without additional configuration. + +## Step 1: Create a new .NET console project + +Open a terminal and run the following commands to scaffold a console app named `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Add the Aspose.PDF NuGet package: + +```bash +dotnet add package Aspose.Pdf +``` + +The `Aspose.Pdf` package provides the `Document` class and `PdfFormatConversionOptions` needed for **convert pdf pdfx4** operations. + +## Step 2: Write the conversion code + +Open `Program.cs` (or `Program.cs` if you are using the new top‑level statements) and replace its contents with the full example below. The code demonstrates **set pdf standard** to PDF/X‑4, performs the conversion, and includes error handling for common pitfalls. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Why each part matters + +- **Argument validation** prevents the program from crashing when the user forgets a file path. +- **`Document` loading** throws a clear exception if the source PDF is missing or corrupted, which is essential for a robust **convert pdf using aspose** experience. +- **`PdfFormatConversionOptions`** is where you **set pdf standard**. By assigning `PdfStandard.PdfX4`, Aspose automatically adjusts color spaces, embeds required fonts, and writes the necessary PDF/X‑4 metadata. +- **`FontEmbeddingMode.EmbedAll`** ensures every font used in the source PDF is embedded, a common requirement for print‑ready PDFs. +- **`doc.Convert`** performs the actual **aspose pdf format conversion**. The method writes the new file in one call, simplifying the workflow. + +## Step 3: Run the converter + +Build the project and execute it with the source and destination paths: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +If everything works, the console prints: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +You can now open `output_pdfx4.pdf` in any PDF viewer that supports PDF/X‑4 (e.g., Adobe Acrobat Pro) and verify compliance via *File → Properties → Standards*. + +## Step 4: Verify PDF/X‑4 compliance (optional) + +For production pipelines you may want to programmatically validate the output. Aspose provides a `PdfComplianceChecker` class (available in the `Aspose.Pdf` package) that can be used as follows: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Running this snippet after conversion gives you an explicit pass/fail result, which is useful for automated CI/CD pipelines. + +## Step 5: Common pitfalls and best‑practice tips + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| Missing fonts in the source PDF | Fonts are referenced but not embedded, causing conversion warnings | Use `FontEmbeddingMode.EmbedAll` as shown above | +| Source PDF contains transparent objects not allowed in PDF/X‑4 | PDF/X‑4 disallows certain transparency blends | Pre‑process the PDF with `doc.ProcessTransparentObjects()` before conversion | +| Large files cause OutOfMemoryException | The whole document is loaded into memory | Stream the source using `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| License not applied | Trial version adds watermarks | Call `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` before any Aspose API usage | + +Applying these tips ensures a smooth **convert pdf pdfx4** experience in production environments. + +## Step 6: Extending the tutorial + +Once you master the basic **pdfx4 conversion tutorial**, you can explore: + +- **Batch conversion**: loop through a folder of PDFs and convert each to PDF/X‑4. +- **Metadata injection**: add XMP metadata required by specific print houses. +- **Color profile management**: attach ICC profiles using `doc.ColorSpace = ColorSpace.DeviceRGB;` before conversion. + +All of these extensions build on the same **aspose pdf format conversion** foundation demonstrated here. + +## Conclusion + +This **pdfx4 conversion tutorial** showed you how to **set pdf standard** to PDF/X‑4, perform a reliable **convert pdf using Aspose**, and verify the result. You now have a complete, runnable C# program that can be integrated into larger document‑processing pipelines or used as a standalone utility. Experiment with batch processing, metadata handling, or alternative PDF standards (PDF/A‑2b, PDF/UA) to deepen your expertise in **aspose pdf format conversion**. + +Happy coding, and enjoy the confidence that comes with PDF/X‑4 compliant output! + + +## 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. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/og-image.png b/pdf/english/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..4d16b2ddccd0742db1ef6fd561c41537a8c8d1c1 GIT binary patch literal 48401 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 iM}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create pdf document in C# with Aspose.Pdf + +If you need to **create pdf document** programmatically, this guide shows you exactly how. Using Aspose.Pdf for .NET you can add a blank page pdf, insert a paragraph to pdf, and position text in pdf with pixel‑perfect accuracy—all in a few lines of C# code. + +You’ll finish the tutorial with a fully functional PDF file that contains a note placed at the coordinates you specify. No external tools, no manual editing—just clean, repeatable code you can drop into any .NET project. + +## What you’ll learn + +* How to **create pdf document** with Aspose.Pdf. +* The correct way to **add blank page pdf** and why a page must exist before adding content. +* How to **add paragraph to pdf** and attach a custom tag (useful for later extraction or styling). +* The technique to **position text in pdf** using the `Position` class. +* How to save the result to disk and verify the output. + +**Prerequisites** + +* .NET 6.0 or later (the code also works with .NET Framework 4.7+). +* A valid Aspose.Pdf for .NET license or a free evaluation key. +* An IDE such as Visual Studio 2022 or VS Code with the C# extension. + +> **Pro tip:** If you use a free evaluation, the generated PDF will contain a small watermark. Register a license to remove it. + +## How to create pdf document with Aspose.Pdf + +The first step is to instantiate the `Document` class. This object represents the entire PDF file and gives you access to pages, resources, and saving options. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Creating the document does **not** write anything to disk yet; it only prepares an in‑memory representation that you can manipulate. This approach keeps the API fast and memory‑efficient. + +## Add blank page pdf using Aspose.Pdf + +A PDF must contain at least one page before you can place any content. Adding a blank page is a single method call: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +The `Add()` method creates a page with default size (A4) and orientation (portrait). If you need a different size, pass a `PageSize` instance to `Add()`. + +## Add paragraph to pdf and set a note + +Now that the page exists, you can create a `Paragraph` object that holds the visible text. The paragraph can also carry a custom tag, which is handy when you later need to locate or style the element programmatically. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Why use a tag? + +Tags are metadata that travel with the PDF element. They can be queried later with `Document.FindObject()` or used by downstream PDF processors that rely on tags for accessibility or indexing. + +## Position text in pdf with precise coordinates + +The default placement of a paragraph is the top‑left corner of the page margin. To move the text to an exact location, set the `Position` property on the paragraph’s tag: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Coordinates are measured in points (1 point = 1/72 inch). The origin (0,0) is at the bottom‑left of the page, which matches most PDF rendering engines. Adjust `X` and `Y` values to fit your layout needs. + +After positioning, add the paragraph to the page’s collection: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Save the pdf document + +Finally, write the in‑memory PDF to a file. You can specify the output path, format, and even encryption options. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +When the program finishes, `output.pdf` contains a single page with the text **Important note** placed near the top‑right corner (X = 50, Y = 750). Open the file in any PDF viewer to verify the placement. + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*Image alt text: Generated PDF document created with C# Aspose.Pdf showing positioned note* (includes primary keyword). + +## Full, runnable example + +Putting all the pieces together, here is a complete console application you can copy, build, and run: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Expected output** when you run the program: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Opening `output.pdf` shows a single page with the text **Important note** positioned at the coordinates you specified. + +## Common variations and edge cases + +| Scenario | What to change | Why it matters | +|----------|----------------|----------------| +| **Different page size** | `pdfDocument.Pages.Add(PageSize.A5)` | Smaller pages reduce file size and fit mobile screens. | +| **Multiple notes** | Loop over a collection of strings and create a `Paragraph` for each, incrementing the `Y` coordinate. | Allows batch generation of bullet‑style notes. | +| **Unicode characters** | Ensure the source file is saved as UTF‑8 and set `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf supports Unicode out of the box, but the file encoding must match. | +| **Password‑protected PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Adds security for confidential notes. | +| **High‑resolution output** | Set `pdfDocument.PageInfo.Width` and `Height` to larger values before adding content. | Useful for printing large‑format PDFs. | + +## Tips for production use + +* **Reuse the `Document` instance** when generating many PDFs in a single request to reduce GC pressure. +* **Dispose objects** (`pdfDocument.Dispose()`) if you create many documents in a loop. +* **Validate coordinates**: the `Y` value cannot exceed the page height; otherwise the text will be clipped. +* **Use `TextFragmentAbsorber`** to later extract the note by its tag (`/P`) if you need to read back the content. + +## Conclusion + +You now know how to **create pdf document** with Aspose.Pdf, **add blank page pdf**, **add paragraph to pdf**, **how to add note pdf**, and **position text in pdf** precisely. The complete example demonstrates a clean, repeatable workflow that you can extend for invoices, reports, or any document‑automation scenario. + +Next, explore related topics such as **adding images to pdf**, **building tables with Aspose.Pdf**, or **applying digital signatures**. Each of these builds on the same core concepts covered here, so you’ll be ready to tackle more sophisticated PDF generation tasks. + +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. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/document-creation/create-pdf-document-in-c-with-aspose-pdf/og-image.png b/pdf/english/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..1d1dc041bea87ab21122f383d1c32633ee8be193 GIT binary patch literal 46087 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 N(tS0#Lg?e?{{>=TD6;?n literal 0 HcmV?d00001 diff --git a/pdf/english/net/images-graphics/_index.md b/pdf/english/net/images-graphics/_index.md index 22270e8057..946d2f3940 100644 --- a/pdf/english/net/images-graphics/_index.md +++ b/pdf/english/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Learn how to render complex LaTeX scripts into PDF documents using Aspose.PDF fo ### [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](./aspose-pdf-net-set-image-backgrounds/) Learn how to enhance your PDF documents by setting image backgrounds using Aspose.PDF for .NET. This guide covers setup, implementation, and optimization tips. +### [Set PDF opacity in C# with Aspose.PDF – complete guide](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Learn how to set PDF opacity using Aspose.PDF for .NET in C#, with clear step-by-step code examples. + ## Additional Resources - [Aspose.PDF for Net Documentation](https://docs.aspose.com/pdf/net/) @@ -178,4 +181,4 @@ Learn how to enhance your PDF documents by setting image backgrounds using Aspos {{< /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/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/english/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..7ac21d400a --- /dev/null +++ b/pdf/english/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-08 +description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke and + fill transparency with a few lines of code. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: en +lastmod: 2026-08-08 +og_description: Set PDF opacity in C# quickly. This guide shows you how to modify + stroke and fill transparency using Aspose.PDF's graphics state API. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Set PDF opacity in C# with Aspose.PDF – step‑by‑step tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Set PDF opacity in C# with Aspose.PDF – complete guide +url: /net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Set PDF opacity in C# with Aspose.PDF – complete guide + +If you need to **set PDF opacity** for specific drawing operations, this tutorial shows you exactly how to do it with Aspose.PDF for .NET. Whether you’re creating watermarks, semi‑transparent overlays, or custom graphics, you’ll learn a concise, production‑ready approach. + +In the following sections we’ll cover everything from loading a PDF to editing its graphics state, adding a new opacity definition, and saving the result. No external documentation is required—just the code below and a brief explanation of each step. + +## Prerequisites + +Before you start, make sure you have: + +* .NET 6.0 or later (the code also works with .NET Framework 4.7+) +* A valid Aspose.PDF for .NET license (the free trial works for evaluation) +* An input PDF file (`input.pdf`) located in a folder you can read/write +* Visual Studio 2022 or any C# IDE you prefer + +## Step 1 – Load the PDF document (Aspose.PDF for .NET) + +The first task is to open the existing PDF. Aspose.PDF represents a PDF file with the `Document` class, which gives you full access to pages, resources, and low‑level objects. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Why this matters*: Loading the document creates an in‑memory model that you can safely modify. The `using` statement ensures the file handle is released automatically after we finish. + +## Step 2 – Get the first page you want to edit + +Opacity is defined per‑page through the page’s resource dictionary. Here we target the first page, but you can loop through `doc.Pages` for a batch operation. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Why this matters*: Each page has its own `Resources` collection, which stores graphics states, fonts, images, etc. Modifying the right page ensures the opacity effect appears where you expect. + +## Step 3 – Open the page’s resource dictionary for editing + +Aspose.PDF provides a `DictionaryEditor` helper to manipulate low‑level PDF dictionaries without breaking the file structure. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Why this matters*: Directly editing the PDF’s COS (Content Object System) dictionaries is the only way to inject a custom graphics state. The editor abstracts the low‑level syntax while keeping the PDF valid. + +## Step 4 – Retrieve the existing ExtGState dictionary + +The **ExtGState** (external graphics state) dictionary holds opacity, blend mode, line width, etc. If it doesn’t exist, Aspose.PDF creates it automatically when you add a new entry. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Why this matters*: Without an `ExtGState` entry you cannot reference a custom opacity later in the page content stream. This step guarantees the container is present. + +## Step 5 – Create a new graphics state with the desired opacity + +A graphics state is a collection of parameters. For opacity we set `CA` (stroke opacity) and `ca` (fill opacity). We also set a blend mode (`BM`) to control how transparent pixels interact with underlying content. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Why this matters*: `CA` and `ca` accept values from 0 (completely transparent) to 1 (fully opaque). Adjust these numbers to achieve the visual effect you need. The blend mode `"Normal"` is the most common, but you can experiment with `"Multiply"` or `"Screen"` for artistic effects. + +## Step 6 – Register the new graphics state in the ExtGState collection + +Every graphics state must have a unique name (e.g., `GS0`). We add our dictionary to the `ExtGState` collection, then update the page’s resources. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Why this matters*: By naming the state (`GS0`), you can reference it later in the page’s content stream using the `gs` operator. If you need multiple opacity levels, create additional entries (`GS1`, `GS2`, …). + +## Step 7 – Apply the graphics state to drawing commands (optional) + +If you want to apply the opacity immediately to existing content, you must edit the page’s content stream. Below is a simple example that draws a semi‑transparent rectangle using the newly created state. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Why this matters*: The `gs` operator (`SetGraphicsState`) tells the PDF renderer to use the opacity values defined in `GS0` for any subsequent drawing commands. The `grestore`/`gsave` pair ensures other page elements remain unaffected. + +## Step 8 – Save the modified PDF + +Finally, write the updated document back to disk. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Why this matters*: Saving finalizes all changes, embeds the new graphics state, and produces a PDF that any viewer (Adobe Acrobat, Chrome, etc.) can display with the intended transparency. + +### Expected result + +Open `output.pdf` in a PDF viewer. You should see a red rectangle whose outline is 80 % opaque and whose fill is 40 % opaque, blending smoothly with any background content. The rest of the page remains unchanged. + +## Common variations and edge cases + +| Situation | What to change | Reason | +|-----------|----------------|--------| +| **Multiple opacity levels** | Create additional graphics states (`GS1`, `GS2`, …) with different `CA`/`ca` values and reference them where needed | Allows fine‑grained control over different elements | +| **Different blend modes** | Use `"Multiply"`, `"Screen"`, `"Overlay"` etc., instead of `"Normal"` in the `BM` entry | Produces artistic blending effects | +| **Applying to an existing content stream** | Insert `SetGraphicsState` before the specific drawing operators you want to affect | Prevents unwanted opacity on unrelated objects | +| **Large PDFs** | Process pages in a `foreach (Page p in doc.Pages)` loop to avoid loading the entire file into memory at once | Improves performance and reduces memory pressure | +| **No existing ExtGState** | The code in Step 4 already creates one if missing, so no extra handling is required | Guarantees the dictionary is present | + +### Pro tip + +When you add many custom graphics states, keep the naming consistent (`GS0`, `GS1`, …) and document the purpose of each in a comment block. This makes future maintenance easier, especially in collaborative projects. + +## Full, runnable example + +Below is the complete program you can copy, paste, and run. It includes all steps, necessary `using` directives, and comments. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Run the program, + + +## 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. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/og-image.png b/pdf/english/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..9c41b5701f9ba6fc8de3edb350f85d316299501d GIT binary patch literal 50728 zcmbTe1yo#3w=GIY2qZv&1PuaCdJy2?W>R?iSo#0s(@%TX1*RzD2(O zKX;sW-g)obyT=}*o88^DcU7%gYp%Iw5%57y67~7(=WuXvsPEs2DZ;@$DTRZBcSeE- zS6az-k>TJv4&I9iE4$9@&O5ncN)jU;*7fQz?*Ez>5YBk=a&Eq`$?ozWce6X>!6MOVl zINnZ*OJe`?mW1TVKX0D+{PX(xGx|So(9s{B2^{bu|Gd6^i}cSMB&0|Gym>_W&#R*) zis9c&hujv;5Up_aZsDGHcr-5AQQv;z|NZr)ylmz8BDhArHju*lPmAa^l(dW2)QS>4 z@9H2*68}x>>?;R9MRXyWBt}`mQL|h||2!v&21L1;Ljhchu)oQX`2sp9{0HTv0E-&? zpJ%IQZY2GuXaD_U|ChcGO|$q6W{|r4)2sihCjR^3+x&wovN06S^H1YCcnkj;-~aLy z|D}nyIBjqLnXa&k_1PMPfM|lh9aodm!2PF}pJ8KST6ZB)5v+>)yEIB^(SwfY-0jPn z6oKO4cAu?rQ8^=f`JVrKxKM5WHG}mu|DN`L<}|Hg*(RQ{q}u%NOr6W({WHVwREeW) zWHD*Tjk4yNLGzo+InO)D{&wUojxX20Ea%^5k;bR**q!Mvp#3-(yB-Y>-!(RN)j2YF zWP+<>{K2G#6mdL7{Y}y9@imIC_Ftho*LWj<%bTH(NHc`r%J{=Q^Fw*~8sTFRG4IcD z=;;_Q2*BTId{2G+pFaB4f?V(R!6)v)O4AAu{?Dzpp6+RRn)m4K4UMd5u6;UJO>vHu z>XYzyZbtoeT7wBN7uz(y_z2w-*a8$AM%&(z_Y+9wgOWR&-K4VF?{IdTa)4WMRfE1fQ&L_x`iVW)ZKI0CutVc zGzC3<4Arb0=nig@_>pinl3ywk7O7u~Y~#NU(|x{jXJuU|MBPfLfePCA{JC_eKzln# z=JNmr>r!-fz@re~q=$QLZVnk@!mX;M4Vn3bmj`YK?~1HGeYk1YBxDht7A+yY{15)Z zqUMc3LatizZZ88}#s%}}lxJ*YtisvPQdnW9q1j&0Qn>{kj%$F-sufn9U)}LkHcA*t zeKBcGb2SZH`qDsvuOyCE&JQQKPtC%}Q59m{D=-vPI|eY10dz5Zn` za{=is>rIcYq8`rDXQ+1Im&Dzy5<5qKjfI&h9XK@_SP9%! zp+bqv=)b0uE&~b}uT$_?*Y*s0XoCg4IrzPQKsCl#8!@Rye@&A$`Nhv%H#vUVfth@* zBew`7&%F4Pfa)OT+$_aau6*OlHUE1X)@8k)XSx5b#y& z@7^wFu}Wit3z>#DoPK8YzCGj{qbM@wHH8t!2^N!lYVwlpBV#0VHMQmSoE!zMKYP?y zX}j^p=bN)a<=Ifsbi_0Z)vwRl?_cF^?b6T_-l&M{(j zq`4{$U7ym#&q}*_c~h0i+gQ2UhH70&ba$vZZ4Ek-)19H3n9;tj;uEq8u9ttk9e+=* zyl@q`#n-qnQb$8q#e@pbhC8Js3tf_%`c6JZ|5dQEx33)ss

|@p_J_jABCXE${Uc+43f9FJTl_*v`DKf2 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 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..9e69cc5c87 100644 --- a/pdf/english/net/programming-with-forms/_index.md +++ b/pdf/english/net/programming-with-forms/_index.md @@ -50,6 +50,7 @@ These tutorials also provide detailed code examples, clear explanations, and ill | [Set Field Limit](./set-field-limit/) | Learn how to set field limits in PDF forms using Aspose.PDF for .NET with this step-by-step tutorial. Enhance user experience and data integrity. | | [Set Java Script](./set-java-script/) | Unlock the power of Aspose.PDF for .NET. Learn how to set up JavaScript on form fields with our step-by-step guide. | | [Set Radio Button Caption](./set-radio-button-caption/) | Learn how to set radio button captions in PDFs using Aspose.PDF for .NET. This step-by-step guide walks you through loading, modifying, and saving your PDF forms. | +| [Save PDF document with Aspose.PDF – complete guide](./save-pdf-document-with-aspose-pdf-complete-guide/) | Learn how to save PDF documents using Aspose.PDF for .NET in this comprehensive step-by-step guide. | | [Text Box](./text-box/) | Discover how to effortlessly add text boxes to PDFs using Aspose.PDF for .NET with this step-by-step guide. Enhance user interaction. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..1f7840c158 --- /dev/null +++ b/pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: en +lastmod: 2026-08-08 +og_description: Save PDF document with Aspose.PDF and discover how to add pages PDF, + populate PDF form field, and create PDF with form fields quickly and reliably. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Save PDF document with Aspose.PDF – step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Save PDF document with Aspose.PDF – complete guide +url: /net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save PDF document with Aspose.PDF – complete guide + +If you need to **save PDF document** that contains interactive form fields, this tutorial shows you exactly how. You’ll see how to add pages PDF, create a PDF form, and populate a PDF form field—all with Aspose.PDF for .NET. + +In the following sections you’ll learn to: + +* add multiple pages to a new PDF, +* create a text box form field on the first page, +* place a widget annotation for the same field on a second page, +* set the field’s value (populate PDF form field), +* and finally **save PDF document** to disk. + +No external tools are required; the complete, runnable code is included. + +## Prerequisites + +* .NET 6.0 or later (the code also works with .NET Framework 4.7.2+). +* A valid Aspose.PDF for .NET license or a free evaluation key. +* Visual Studio 2022 (or any C# IDE). + +Add the NuGet package: + +```bash +dotnet add package Aspose.PDF +``` + +## How to add pages PDF + +The first step is to create an empty PDF and add the pages you need. Adding pages before defining form fields ensures that the layout coordinates are accurate. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Why this matters:* Each `Page` object represents a printable canvas. By adding pages early you can reference them later when positioning form elements. + +## How to create PDF form with Aspose.PDF + +A PDF form consists of a **field definition** (the logical container) and one or more **widget annotations** (the visual representation). The example creates a `TextBoxField` named **Comments** on the first page. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Why this matters:* The `Rectangle` coordinates are expressed in points (1 pt = 1/72 in). Adjust the values to fit your design. + +## Populate PDF form field + +You can set the field’s value programmatically before the document is saved. This is the core of **populate PDF form field**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +If you need to fill the field later (e.g., from user input), simply assign a new string to `commentsField.Value` before calling `Save`. + +## Add a widget annotation for the same field on the second page + +A widget annotation makes the form field visible on a page. By adding a second widget, the same logical field appears on both pages, demonstrating **create PDF with form fields** that span multiple pages. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Why this matters:* The `Widgets` collection can hold any number of visual representations. Users can interact with the field on either page, and the entered value stays synchronized. + +## Attach the field to the first page annotations + +Form fields must be added to a page’s annotation collection so that the PDF viewer can render them. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Save PDF document + +Now that the form is fully defined, you can **save PDF document** to a location of your choice. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +When you open `output.pdf` in Adobe Acrobat Reader or any PDF viewer, you’ll see a text box on page 1 and a matching box on page 2. Typing into either box updates the same underlying field. + +## Complete, runnable example + +Below is the full program you can copy‑paste into a console application. It compiles and produces the described PDF without any modifications. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Expected output:** A file named `output.pdf` containing two pages. Page 1 shows a text box labeled “Comments” at coordinates (100, 600). Page 2 shows the same field at (100, 400). The field is pre‑filled with “Enter your feedback here”. Changing the text on either page updates the same value when the document is saved again. + +## Common questions and edge‑case handling + +| Question | Answer | +|----------|--------| +| *Can I add more than one widget for the same field?* | Yes. Append additional `WidgetAnnotation` objects to `commentsField.Widgets`. Each widget can be placed on any page. | +| *What if I need to set the field’s appearance (font, border, background)?* | Use `commentsField.DefaultAppearance` to specify a font and color, and set `commentsField.Border` properties for line style. | +| *How do I make the field read‑only?* | Set `commentsField.ReadOnly = true;`. The field will still display its value but cannot be edited by the user. | +| *Is it possible to populate the field after the PDF is created?* | Yes. Load the saved PDF with `new Document("output.pdf")`, locate the field via `pdfDocument.Form["Comments"]`, assign a new `Value`, and call `Save` again. | +| *What if the PDF must conform to PDF/A for archiving?* | After building the document, call `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` before saving. | + +## Tips from the field + +* **Pro tip:** Keep the logical field name short and unique; it’s the identifier you’ll use when programmatically filling the form later. +* **Watch out for:** Overlapping widget rectangles. Overlaps cause rendering artifacts in some viewers. +* **Performance note:** Adding many pages or widgets in a tight loop can be optimized by reusing a single `Rectangle` instance and only changing its coordinates. + +## Conclusion + +You now know how to **save PDF document** that contains a fully functional form, how to **populate PDF form field**, and how to **how to add pages PDF** and **create PDF with form fields** using Aspose.PDF for .NET. The complete example demonstrates the end‑to‑end workflow from document creation to final save. + +Next, explore related topics such as **adding check boxes**, **creating drop‑down lists**, or **flattening the form** for read‑only distribution. Each of those builds on the same principles covered here and expands your PDF automation capabilities. + +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 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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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/save-pdf-document-with-aspose-pdf-complete-guide/og-image.png b/pdf/english/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5840361044a62c7a7ad055a714e021cced8318 GIT binary patch literal 49962 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 diff --git a/pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..02b01f2a32 --- /dev/null +++ b/pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also shows + how to add blank page pdf and generate pdf programmatically. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: en +lastmod: 2026-08-08 +og_description: Add bates numbering pdf with Aspose.Pdf in C#. Learn to add blank + page pdf, generate pdf programmatically, and save the final document in minutes. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Add bates numbering pdf with Aspose – complete C# guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Add bates numbering pdf with Aspose – step‑by‑step guide +url: /net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add bates numbering pdf with Aspose – step‑by‑step guide + +Add bates numbering pdf with Aspose.Pdf is straightforward once you understand the core steps. If you also need to add blank page pdf or generate pdf programmatically, this guide covers everything you need. + +In this tutorial you will: + +* Create a new PDF document from scratch. +* Add a blank page pdf that will host the Bates numbers. +* Configure the Bates numbering artifact with a custom prefix. +* Save the PDF so the numbers appear on the generated file. + +By the end you will have a fully functional C# console application that produces a PDF containing Bates numbers like **CASE‑1000**, **CASE‑1001**, … – a common requirement for legal and e‑discovery workflows. + +## Prerequisites + +* .NET 6.0 SDK or later (the code also works with .NET Framework 4.8). +* Visual Studio 2022 or any C#‑compatible IDE. +* A valid Aspose.Pdf for .NET license (or a free evaluation key). +* Basic familiarity with C# syntax. + +> **Pro tip:** If you run the code without a license, Aspose will add a small watermark to the output PDF. + +## Step 1: Set up the project and import Aspose.Pdf + +Create a new console project and add the Aspose.Pdf NuGet package: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +The `using` directives required for the example are: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +These namespaces give you access to the `Document`, `Page`, and `BatesNumberingArtifact` classes used later. + +## Step 2: Add a blank page pdf + +A Bates number must be attached to a page, so we first create a blank page that will receive the numbering artifact. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +The `Document` class represents the whole PDF file, while `Pages.Add()` inserts a new, empty page at the end of the document’s page collection. Because the document starts empty, this call also creates the first page. + +## Step 3: Configure the Bates numbering artifact + +Now we define how the Bates numbers should look. The `BatesNumberingArtifact` lets you set the start number, prefix, suffix, and formatting options. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Why this matters:** +Setting `StartNumber` to **1000** matches typical legal case file conventions. The `Prefix` ensures each number appears as **CASE‑1000**, **CASE‑1001**, … which is easier to search and sort. + +## Step 4: Attach the artifact to the page + +The artifact must be added to the page’s `Artifacts` collection so that Aspose renders it on every page during saving. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +When the document is saved, Aspose automatically repeats the artifact on all pages, incrementing the number for each subsequent page. + +## Step 5: (Optional) Add additional pages + +If you need more pages, simply repeat `pdfDocument.Pages.Add()`. The Bates numbering artifact you attached in the previous step will automatically appear on each new page. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Step 6: Save the PDF – generate pdf programmatically + +Finally, persist the document to disk. This is the point where the Bates numbers are rendered onto the pages. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Expected result:** +Open *BatesNumberedDocument.pdf* and you will see a three‑page PDF. Each page displays a Bates number in the bottom‑right corner: + +* Page 1 → **CASE‑1000** +* Page 2 → **CASE‑1001** +* Page 3 → **CASE‑1002** + +The numbers are automatically incremented because the artifact is attached to the page collection. + +## Full, runnable example + +Putting everything together, here is a complete console program you can copy, paste, and run: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Run the program with `dotnet run`. After execution, locate the file on your desktop and verify the Bates numbers. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Common questions and edge cases + +### What if I need a different font or position? + +The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, `HorizontalAlignment`, and `VerticalAlignment`. For example: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### How do I exclude a specific page from numbering? + +Create a separate `BatesNumberingArtifact` for the pages you want to number and add it only to those pages. Pages without an attached artifact will remain unnumbered. + +### Does this work with existing PDFs? + +Yes. Instead of `new Document()`, load an existing file: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Then attach the artifact to the desired pages and save. + +## Conclusion + +You now know how to **add bates numbering pdf** using Aspose.Pdf, how to **add blank page pdf**, and how to **generate pdf programmatically** in a clean, reusable C# solution. The approach works with any number of pages, custom prefixes, and styling options, giving you full control over the final document. + +Next steps you might explore: + +* Use **create pdf as + + +## 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 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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/og-image.png b/pdf/english/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..0968dcd279f87bc86610cfe72d33d57594a13c73 GIT binary patch literal 47905 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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 fdaea022ac..3b4aa78dd6 100644 --- a/pdf/english/net/programming-with-security-and-signatures/_index.md +++ b/pdf/english/net/programming-with-security-and-signatures/_index.md @@ -34,6 +34,8 @@ The tutorial gives you a detailed overview of methods and techniques to ensure t | [Sign With Smart Card Using Pdf File Signature](./sign-with-smart-card-using-pdf-file-signature/) | Learn how to sign PDF files using a smart card with Aspose.PDF for .NET. Follow this step-by-step guide for secure digital signatures. | | [Sign With Smart Card Using Signature Field](./sign-with-smart-card-using-signature-field/) | Learn how to securely sign PDFs using a smart card with Aspose.PDF for .NET. Follow our step-by-step guide for easy implementation. | | [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. | +| [Verify PDF signature in C# with Aspose.PDF – complete guide](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Learn how to verify PDF signatures in C# using Aspose.PDF. Step-by-step guide for developers. | +| [pdf signature tutorial: validate a PDF digital signature with Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Learn how to validate a PDF digital signature using Aspose.PDF for .NET. 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. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..7332915d65 --- /dev/null +++ b/pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-08-08 +description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: en +lastmod: 2026-08-08 +og_description: pdf signature tutorial walks you through validating a PDF digital + signature with Aspose.PDF. Learn to configure signature validation options and check + the result. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: pdf signature tutorial – validate PDF digital signatures in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' +url: /net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – validate a PDF digital signature in C# + +If you need a **pdf signature tutorial** that shows exactly how to validate a PDF digital signature, this guide has you covered. You’ll see how to load a signed PDF, configure **signature validation options**, run the validation, and display the result—all with clear, runnable C# code. + +Validating a PDF signature is essential when you process contracts, invoices, or any legally binding document. This tutorial walks through the complete workflow, so you can integrate signature checks into your own applications without guessing which API calls are required. + +## What you’ll accomplish + +By the end of this tutorial you will: + +* Load a signed PDF file using Aspose.PDF. +* Set up **signature validation options** such as the hash algorithm. +* Call the `Validate` method to **validate pdf digital signature**. +* Output a clear “Signature valid” message to the console. + +**Prerequisites** + +* .NET 6.0 (or later) installed. +* Visual Studio 2022 (or any C# IDE). +* Aspose.PDF for .NET NuGet package (`Aspose.Pdf`). + +> **Pro tip:** Use the latest Aspose.PDF version to get support for SHA‑3 algorithms and improved validation performance. + +## Step 1: Install the Aspose.PDF NuGet package + +Open your project in Visual Studio and run the following command in the Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +The package adds the `Aspose.Pdf` namespace, which contains the `Document` class and the signature‑related APIs you’ll use. + +## Step 2: Load the signed PDF document + +The first line of code creates a `Document` object that represents the PDF file on disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* The `Document` class parses the PDF structure, exposing the `Signatures` collection that holds all embedded digital signatures. If the file path is incorrect, an exception is thrown, so verify the path before running the program. + +## Step 3: Configure signature validation options + +You can tailor the validation process with the `SignatureValidationOptions` class. In this tutorial we specify the hash algorithm, but you can also set certificate revocation checks, timestamp verification, and more. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* The hash algorithm must match the one used when the signature was created. Using a mismatched algorithm causes the validation to fail even if the signature is otherwise correct. + +## Step 4: Validate the first signature + +Most PDFs contain a single signature, but the `Signatures` collection can hold many. This example validates the first entry (`[0]`). The `Validate` method returns a Boolean indicating success. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* If the PDF has no signatures, `document.Signatures.Count` will be `0` and accessing `[0]` throws an `IndexOutOfRangeException`. Guard against this with a simple check: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Step 5: Display the validation result + +Finally, write the outcome to the console. This step demonstrates the **check pdf signature** result in a human‑readable format. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +When you run the program, you should see: + +``` +Signature valid: True +``` + +If the signature is corrupted, uses an unsupported algorithm, or the certificate is revoked, the output will be `False`. + +## Full, runnable example + +Copy the following code into a new console project (`dotnet new console`) and replace `YOUR_DIRECTORY/signed.pdf` with the path to your signed PDF file. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Expected output + +``` +Signature valid: True +``` + +If the signature fails validation, the console will display `Signature valid: False`. + +## Common questions and troubleshooting + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## Next steps + +* Explore **validate pdf signature** for multiple signatures by iterating over `document.Signatures`. +* Combine this tutorial with **check pdf signature** in a web API to provide real‑time verification for uploaded contracts. +* Dive deeper into **signature validation options** such as CRL/OCSP checks, timestamp validation, and custom trust stores. + +You now have a complete **pdf signature tutorial** that shows how to **validate pdf digital signature** using Aspose.PDF in C#. Feel free to adapt the code for your own workflow, add logging, or integrate it into larger document‑processing pipelines. 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. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/og-image.png b/pdf/english/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1e7540db8e4a4c1dbae0c8d2ac4d7acbe125b0 GIT binary patch literal 46481 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 VoMw5HGI{(w4}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verify PDF signature in C# with Aspose.PDF – complete guide + +If you need to **verify PDF signature** in a .NET application, this guide shows you a concise way to do it with Aspose.PDF. You’ll learn how to **validate digital signature PDF**, **list PDF signatures**, and detect compromised signatures in just a few lines of code. + +The tutorial covers everything from installing the library to handling edge cases such as unsigned documents or encrypted PDFs. By the end you’ll be able to integrate signature verification into any C# project, ensuring the authenticity of incoming PDF files. + +**Prerequisites** + +- .NET 6.0 or later (the code also works with .NET Framework 4.6+). +- Basic familiarity with C# and Visual Studio (or any IDE you prefer). +- An Aspose.PDF for .NET license (the free trial works for evaluation). + +If you meet these requirements, you’re ready to start verifying PDF signatures. + +## Verify PDF signature – set up the project + +1. **Add the Aspose.PDF NuGet package** + Open the Package Manager Console and run: + + ```bash + Install-Package Aspose.PDF + ``` + + This brings in the `Aspose.Pdf` assembly and its dependencies. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` gives you the `Any` extension used later, while `Aspose.Pdf` contains the `Document` and `Signature` classes. + +## Load the PDF document + +The first functional step is to open the PDF you want to inspect. Aspose.PDF reads the file into memory, enabling you to query its signatures. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – Loading the document inside a `using` block guarantees that the file handle is released promptly, preventing file‑lock issues in long‑running services. + +## List PDF signatures + +Before you validate a signature, you might want to know how many signatures are present. This step demonstrates the **list PDF signatures** capability. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` returns a collection of `Signature` objects. +- `Count` tells you how many signatures exist. +- Each `Signature` exposes metadata such as `Id`, `SignatureType`, and `Reason`, which can be useful for audit logs. + +**Edge case** – If the PDF has no signatures, `Count` will be `0` and the loop will not execute. You can handle this scenario gracefully: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validate digital signature PDF – detect compromised signatures + +Now that you can enumerate signatures, the core task is to **verify PDF signature** integrity. Aspose.PDF provides the `IsCompromised` property, which returns `true` when the signature’s cryptographic hash no longer matches the document content. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised` performs a full cryptographic validation using the embedded certificate chain. +- The `Any` LINQ operator stops at the first compromised signature, making the check efficient even for documents with many signatures. + +### Handling multiple signatures individually + +If you need to know which specific signature failed, iterate instead of using `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** Store the validation result together with `sig.Id` in a database for later forensic analysis. + +## Output results and consider edge cases + +Below is a complete, runnable program that combines the steps above. It loads a PDF, lists all signatures, validates them, and prints a clear result. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Common pitfalls and how to avoid them + +| Pitfall | Solution | +|---------|----------| +| The PDF is password‑protected. | Pass the password via `document.Encrypt.Decrypt(password)` before accessing `Signatures`. | +| No Aspose.PDF license is set. | Use `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` to avoid evaluation watermarks. | +| Large PDFs cause high memory usage. | Process the file in a streaming mode (`Document.Load(stream)`) instead of loading the whole file at once. | + +## Conclusion + +You now know how to **verify PDF signature** in C# using Aspose.PDF, how to **validate digital signature PDF**, and how to **list PDF signatures** for reporting or audit purposes. The complete example demonstrates loading a document, enumerating its signatures, checking each one for compromise, and handling typical edge cases. + +Next steps you might explore: + +- **Validate timestamp tokens** to ensure a signature was created before a certificate expired. +- **Extract signer certificates** (`sig.Certificate`) for custom trust‑store validation. +- **Integrate with ASP.NET Core** to automatically reject uploaded PDFs that fail verification. + +Feel free to experiment with multiple signatures, custom validation logic, or alternative PDF libraries. If you found this guide helpful, share it with teammates or add your own tips in the comments + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/og-image.png b/pdf/english/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..827d59a229deb9008d8693d38ed5b65e72a68e7b GIT binary patch literal 51833 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

=wE4wsXN&o-`3d$1Arm~e9Ex_l*;OdF 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ë%2N0gVU7@hjvavHNQ+KGj90o(NR;{eAcGQfrWwDtR)a%^WPFJ&G7<7n|C_l z>$yAuc(%mEaZy?Byf1YgnBTUUccC7=Dn`SQ+2UlKS|qj~1T;SvhE_g(LfPiZ)wr5~ z<&ytnQ@DQ+sa&BM3S-6)ms1giDVt* z%0%F?_jURGduJ!7-x|J**gIoiWns8q)l?+d%$_}^U%>upcd;*s@j)~d?dxWl-e@zK zsHNr(q*OUsuldiUwzSl8_9ol10e`2+6ViOT9MmfW`?}lyb>e=)=v{?p1H1gNs|&4U zqP0fOn}Ws&;RmxfiyvLN1oGJVncqWBNXf9i2btr)v6C&8%O%GkU;qGsNuzBrUaFT{ z(WPI%-l_EASp)!qIE~Hx2R{X*0@uQyojV7Ib0Dk_zaoOLaoZM7# WzVoWRHwL`q33U~1<}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..d8be4d131b --- /dev/null +++ b/pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: en +lastmod: 2026-08-08 +og_description: How to summarize PDF with Aspose.Pdf.AI. This tutorial shows you how + to summarize PDF with AI, generate a PDF summary, and save summary as PDF in a few + lines of C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: How to summarize PDF with Aspose.Pdf.AI – step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: How to summarize PDF with Aspose.Pdf.AI – guide +url: /net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to summarize PDF with Aspose.Pdf.AI – guide + +If you need to **how to summarize PDF** quickly and reliably, you can let an AI model do the heavy lifting. This tutorial shows you exactly how to summarize PDF with AI, generate a PDF summary, and save summary as PDF using the Aspose.Pdf.AI SDK for .NET. You’ll get a complete, runnable example and an explanation of every line so you can adapt the solution to your own projects. + +The guide covers: + +* Preparing the source folder and API key +* Creating an `OpenAIClient` that talks to the model +* Configuring summary options such as temperature and document path +* Building a `SummaryCopilot` and retrieving the summary text asynchronously +* Saving the generated summary back to a PDF file + +No external services beyond the OpenAI endpoint are required, and the code works with .NET 6+ and Aspose.Pdf.AI 23.7 (or later). + +## Prerequisites + +* **.NET 6 SDK** (or any newer .NET version) +* **Aspose.Pdf.AI for .NET** – install via NuGet: `dotnet add package Aspose.Pdf.AI` +* An **OpenAI API key** with access to the model you want to use (e.g., `gpt‑4o`) +* A PDF file you want to summarize (the example uses `SampleDocument.pdf`) + +Make sure the folder you specify in `dataDirectory` exists and that the application has read/write permissions. + +## Step 1: Set up the project structure + +Create a console project (or integrate the code into any existing .NET app). The minimal `Program.cs` looks like this: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Why this structure matters + +* **`await using`** disposes the `OpenAIClient` automatically, releasing HTTP connections. +* **`Path.Combine`** builds OS‑independent paths, preventing bugs on Windows vs. Linux. +* **Temperature** controls creativity; `0.5` gives a balanced, factual summary. +* **`GetSummaryAsync`** returns plain text, while `SaveSummaryAsync` creates a proper PDF that preserves fonts and layout. + +## Step 2: Understand the summary options + +The `OpenAISummaryCopilotOptions` class lets you fine‑tune the summarization process: + +| Option | Purpose | Typical values | +|--------|---------|----------------| +| `WithTemperature(double)` | Controls randomness. `0.0` = deterministic, `1.0` = very creative. | `0.3‑0.7` for business documents | +| `WithDocument(string)` | Path to the source PDF. Must be a readable file. | Any absolute or relative path | +| `WithPrompt(string)` *(optional)* | Custom prompt to guide the model. | “Summarize the key findings in 150 words.” | + +If you have **large PDFs** (over 10 MB or many pages), consider splitting the document into smaller chunks before summarization to avoid token‑limit errors. The SDK does not automatically chunk; you can use `PdfDocument` from `Aspose.Pdf` to extract pages and feed them one by one. + +## Step 3: Run the code and verify the output + +1. Place `SampleDocument.pdf` inside the `Data` folder you referenced. +2. Replace `"YOUR_API_KEY"` with your real OpenAI key. +3. Execute `dotnet run`. + +You should see two sections in the console: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Open `Summary_out.pdf` with any PDF viewer – it will contain the same summary text, formatted with a default font. The PDF is fully searchable because the SDK embeds the text as a standard PDF page. + +## Step 4: Common variations and edge‑case handling + +### Summarize only a portion of the document + +If you need to **summarize pdf with ai** for a specific chapter, extract that range first: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Then point `WithDocument` to `Chapter5.pdf`. + +### Adjusting the length of the summary + +You can influence length by adding a custom prompt: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Handling API errors + +Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. Wrap the call in a `try / catch` block: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Saving the summary in a custom layout + +`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, or branding), create a new `PdfDocument` and insert the summary manually: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Step 5: Performance tips and best practices + +* **Reuse the `OpenAIClient`** for multiple summaries in the same process – creating a client is cheap, but re‑using the underlying `HttpClient` reduces socket exhaustion. +* **Cache the summary** if the source PDF does not change; you can store the text in a database and skip the API + + +## 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 Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/og-image.png b/pdf/english/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..9dcee1cb518db0b2f143ef14cac703ab347fa631 GIT binary patch literal 46243 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 literal 0 HcmV?d00001 diff --git a/pdf/french/net/conversion-export/_index.md b/pdf/french/net/conversion-export/_index.md index 9e25122269..092d3bf841 100644 --- a/pdf/french/net/conversion-export/_index.md +++ b/pdf/french/net/conversion-export/_index.md @@ -224,8 +224,8 @@ Maîtrisez la conversion PDF en HTML avec Aspose.PDF pour .NET. Améliorez l'acc ### [Conversion PDF en HTML avec Aspose.PDF pour .NET](./pdf-to-html-conversion-aspose-dot-net/) Un tutoriel de code pour Aspose.PDF Net -### [Conversion PDF en TIFF dans .NET avec Aspose.PDF : guide étape par étape](./pdf-to-tiff-conversion-aspose-pdf-net/) -Apprenez à convertir des documents PDF en images TIFF avec Aspose.PDF pour .NET. Maîtrisez les profondeurs de couleurs personnalisées et les techniques avancées de traitement d'image. +### [Enregistrer un PDF en HTML avec Aspose.PDF – guide étape par étape](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Apprenez à convertir un PDF en HTML en suivant un guide complet avec Aspose.PDF pour .NET, incluant les meilleures pratiques et le code C#. ## Ressources supplémentaires diff --git a/pdf/french/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/french/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..ee2f66fc7f --- /dev/null +++ b/pdf/french/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-08 +description: Enregistrez un PDF au format HTML avec Aspose.PDF en C#. Découvrez comment + convertir un PDF en HTML, ignorer les images raster et gérer les cas limites courants. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: fr +lastmod: 2026-08-08 +og_description: Enregistrez le PDF au format HTML avec Aspose.PDF. Ce guide vous montre + comment convertir un PDF en HTML, ignorer les images raster et éviter les pièges + courants. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Enregistrer le PDF en HTML avec Aspose.PDF – tutoriel complet C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Enregistrer un PDF au format HTML avec Aspose.PDF – guide étape par étape +url: /fr/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Enregistrer un PDF en HTML avec Aspose.PDF – guide étape par étape + +Si vous devez **enregistrer un PDF en HTML** rapidement, ce tutoriel vous montre exactement comment le faire avec Aspose.PDF pour .NET. Que vous construisiez une application web de visualisation de documents ou que vous exportiez des rapports pour un indexation SEO‑friendly, vous verrez une solution complète et exécutable qui convertit le PDF en HTML tout en vous offrant un contrôle fin sur les images raster. + +En plus de la tâche principale, nous couvrirons également les options de **aspose pdf html conversion** qui vous permettent d’ignorer les images raster, d’ajuster la gestion du CSS et de gérer efficacement les gros documents. À la fin de ce guide, vous disposerez d’un programme autonome que vous pourrez intégrer à n’importe quel projet .NET. + +## Prérequis + +* .NET 6.0 SDK ou version ultérieure (le code fonctionne également avec .NET Core et .NET Framework) +* Visual Studio 2022 ou tout IDE supportant C# +* Une licence Aspose.PDF pour .NET (l’essai gratuit fonctionne pour l’évaluation) +* Un fichier PDF nommé `report.pdf` placé dans un dossier que vous pouvez référencer depuis le code + +Aucun paquet NuGet supplémentaire n’est requis au-delà de `Aspose.Pdf`. + +## Étape 1 : Installer le paquet NuGet Aspose.PDF + +Ouvrez le terminal dans le dossier de votre projet et exécutez : + +```bash +dotnet add package Aspose.Pdf +``` + +Le paquet ajoute l’espace de noms `Aspose.Pdf`, qui contient la classe `Document` et le type `HtmlSaveOptions` utilisé pour les opérations de **convert pdf to html**. + +## Étape 2 : Créer un projet console et ajouter les directives using + +Créez une nouvelle application console si vous n’en avez pas déjà une : + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Ensuite, ouvrez `Program.cs` et ajoutez les espaces de noms requis : + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Ces directives vous donnent accès à l’API PDF de base et aux options de sauvegarde HTML qui contrôlent le processus **aspose convert pdf html**. + +## Étape 3 : Charger le document PDF + +La première ligne opérationnelle lit le PDF source dans un objet `Aspose.Pdf.Document`. Cet objet représente l’ensemble du fichier PDF en mémoire et fournit des méthodes pour enregistrer, modifier et extraire le contenu. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Pourquoi c’est important* : Charger le document une seule fois rend l’utilisation de la mémoire prévisible, surtout pour les gros PDF. Si le fichier est introuvable, Aspose lève une `FileNotFoundException`, assurez‑vous donc que le chemin est correct. + +## Étape 4 : Configurer les options de sauvegarde HTML + +`HtmlSaveOptions` vous permet d’ajuster finement la façon dont le PDF est converti. Dans ce tutoriel, nous ignorons les images raster pour alléger la sortie, mais vous pouvez changer le mode en `EmbedAll` si vous en avez besoin. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Points clés** : + +* `RasterImagesSavingMode.Skip` indique à Aspose d’ignorer les images bitmap (JPEG, PNG) pendant la conversion. C’est idéal lorsque le PDF source contient des pages numérisées dont vous n’avez pas besoin dans la vue HTML. +* Vous pouvez passer à `EmbedAll` ou `External` si vous souhaitez que les images soient enregistrées comme fichiers séparés. +* La propriété `ResourcesFolder` ne devient pertinente que lorsque les images sont enregistrées de façon externe. + +## Étape 5 : Enregistrer le document en HTML + +Vous écrivez maintenant le fichier HTML sur le disque en utilisant les options configurées. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Après l’exécution de cet appel, `report.html` contient le contenu textuel, les graphiques vectoriels et la mise en page préservés du PDF original, mais sans aucune image raster. Vous pouvez ouvrir le fichier dans un navigateur pour vérifier le résultat. + +## Résultat attendu + +Lorsque vous ouvrez `report.html` dans Chrome ou Edge, vous devriez voir : + +* Tous les titres, paragraphes et formes vectorielles rendus correctement. +* Aucun tag `` pour les images raster (ils sont omis en raison du mode `Skip`). +* Un CSS propre et minimal, soit en ligne, soit dans une feuille de style séparée, selon l’option que vous avez choisie. + +Si vous devez confirmer que les images ont été omises, inspectez le source de la page (`Ctrl+U`). Vous ne trouverez aucune entrée ``. + +## Étape 6 : Gérer les cas limites courants + +### 6.1 Gros PDF (> 100 Mo) + +Pour les fichiers très volumineux, activez le streaming afin de réduire la pression sur la mémoire : + +```csharp +htmlOpts.Streaming = true; +``` + +Le streaming écrit les fragments HTML directement sur le disque, empêchant le document complet d’être chargé en mémoire. + +### 6.2 PDF protégés par mot de passe + +Si le PDF source est chiffré, fournissez le mot de passe avant l’enregistrement : + +```csharp +doc.Decrypt("yourPassword"); +``` + +Tenter d’enregistrer sans déchiffrer lève une `InvalidPasswordException`. + +### 6.3 Caractères Unicode + +Aspose.PDF intègre automatiquement les polices Unicode, mais vous pouvez forcer une police spécifique pour un rendu cohérent : + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Nom de fichier personnalisé pour plusieurs pages + +Si vous souhaitez que chaque page PDF soit enregistrée comme un fichier HTML distinct, définissez : + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Cela crée `report_page_1.html`, `report_page_2.html`, etc., ce qui peut être utile pour la pagination dans les applications web. + +## Exemple complet et exécutable + +Voici le programme complet qui intègre toutes les étapes abordées. Copiez‑le dans `Program.cs`, ajustez les chemins, et exécutez `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Vérification** : Après l’exécution, la console affiche le message de succès. Ouvrez le fichier HTML généré dans un navigateur pour confirmer que le texte et les graphiques vectoriels s’affichent correctement et que les images raster sont omises. + +## Astuces et pièges + +* **Astuce** : Si vous avez besoin plus tard des images raster, changez `RasterImagesSavingMode` en `External` et définissez `ResourcesFolder`. Cela crée un sous‑dossier `images` contenant les bitmaps extraits. +* **Attention** : Utiliser le mode `Skip` par défaut sur des PDF qui dépendent fortement d’images numérisées produira des zones vides où ces images devraient se trouver. Testez toujours avec un échantillon représentatif de vos documents. +* **Astuce de performance** : Réutiliser une seule instance de `HtmlSaveOptions` pour plusieurs documents réduit la surcharge de création d’objets lors de conversions en lot. +* **Vérification de version** : L’API présentée fonctionne avec Aspose.PDF pour .NET version 23.9 et ultérieure. Les versions antérieures peuvent utiliser `HtmlSaveOptions.RasterImagesSavingMode` avec un nom d’énumération légèrement différent. + +## Conclusion + +Vous savez maintenant comment **enregistrer un PDF en HTML** avec Aspose.PDF, comment contrôler la gestion des images raster, et comment relever les défis typiques tels que les gros fichiers, la protection par mot de passe et la génération d’un HTML par page. Cette solution complète vous permet d’intégrer la conversion PDF‑vers‑HTML dans n’importe quelle application C# en toute confiance. + +### Et après ? + +* Explorez **aspose pdf html conversion** pour l’intégration de polices et la personnalisation du CSS. +* Combinez cette conversion avec une API web pour servir le HTML à la demande. +* Essayez la direction opposée—**convert pdf to html** puis reconvertissez en PDF—pour valider la fidélité du processus aller‑retour. + +N’hésitez pas à expérimenter avec les options, et partagez vos découvertes dans les commentaires ou sur les forums Aspose. 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. + +- [Convertir un PDF en HTML avec .NET en utilisant Aspose.PDF sans enregistrer les images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [Conversion PDF vers 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/) +- [Convertir un PDF en HTML avec des URL d’images personnalisées en utilisant Aspose.PDF .NET : Guide complet](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/french/net/digital-signatures/_index.md index 8e465d0557..01f293422c 100644 --- a/pdf/french/net/digital-signatures/_index.md +++ b/pdf/french/net/digital-signatures/_index.md @@ -59,6 +59,9 @@ Apprenez à charger un PDF, le convertir au format PDF/X‑4 et à répertorier ### [Valider la signature PDF avec Aspose – Convertir le PDF en HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Découvrez comment valider une signature PDF et convertir le document en HTML avec Aspose.PDF pour .NET. +### [Comment valider un PDF avec Aspose.PDF – vérifier la validité de la signature PDF en C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Apprenez à valider la signature d'un PDF en C# avec Aspose.PDF, étape par étape. + ## Ressources supplémentaires - [Aspose.PDF pour la documentation réseau](https://docs.aspose.com/pdf/net/) diff --git a/pdf/french/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/french/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..96facf91eb --- /dev/null +++ b/pdf/french/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Comment valider un PDF avec Aspose.PDF et valider la signature numérique + du PDF. Suivez ce guide étape par étape pour vérifier rapidement la signature du + PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: fr +lastmod: 2026-08-08 +og_description: Comment valider un PDF avec Aspose.PDF. Apprenez à valider la signature + numérique d’un PDF et à vérifier la validité de la signature PDF en quelques lignes + de code C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Comment valider un PDF – vérifier la validité de la signature PDF avec Aspose.PDF + en C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Comment valider un PDF avec Aspose.PDF – vérifier la validité de la signature + PDF en C# +url: /fr/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment valider un PDF avec Aspose.PDF – vérifier la validité d’une signature PDF en C# + +Si vous avez besoin de **comment valider un PDF** des fichiers contenant des signatures numériques, ce tutoriel vous propose une solution complète. Vous apprendrez à charger un PDF, créer un validateur de certificat et vérifier la validité d’une signature PDF avec Aspose.PDF pour .NET. + +Valider une signature numérique PDF est une exigence courante pour la conformité, la facturation et l’échange sécurisé de documents. À la fin de ce guide, vous pourrez vérifier en toute confiance si un PDF signé est fiable, et vous comprendrez comment gérer les cas particuliers tels que les certificats manquants ou les signatures multiples. + +## Prérequis + +Avant de commencer, assurez‑vous d’avoir : + +- .NET 6.0 ou version ultérieure installé +- Un IDE tel que Visual Studio 2022 (tout éditeur supportant C# fonctionne) +- Une copie sous licence de **Aspose.PDF for .NET** (l’essai gratuit fonctionne pour l’évaluation) +- Un fichier PDF signé (`signed.pdf`) et, si la signature repose sur une autorité de certification privée, le certificat de confiance correspondant (`trustedCertificate.pfx`) + +Aucun package NuGet supplémentaire n’est requis au‑delà de `Aspose.PDF`. + +## Étape 1 : Installer Aspose.PDF + +Ouvrez un terminal dans le dossier de votre projet et exécutez : + +```bash +dotnet add package Aspose.PDF +``` + +La commande ajoute la dernière bibliothèque Aspose.PDF, qui contient les classes `Document` et `CertificateValidator` utilisées plus tard. + +## Étape 2 : Charger le document PDF + +Charger un PDF est la première opération que vous effectuez lorsque vous **comment charger un pdf** de façon programmatique. Le constructeur `Document` accepte un chemin de fichier, un flux ou un tableau d’octets. Utiliser un chemin complet rend l’exemple plus clair. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Pourquoi c’est important :** L’objet `Document` représente l’ensemble du fichier PDF en mémoire. Sans charger le fichier, vous ne pouvez pas accéder à sa collection `Signatures`, qui est nécessaire pour **vérifier la signature pdf**. + +## Étape 3 : Préparer le validateur de certificat + +Une signature numérique n’est fiable que si le certificat de signature s’enchaîne jusqu’à une racine que vous faites confiance. `CertificateValidator` vous permet d’indiquer à Aspose.PDF un magasin de certificats de confiance ou un fichier PFX spécifique. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Si votre PDF utilise une autorité de certification publique déjà reconnue par Windows, vous pouvez omettre le `certPath` et instancier `CertificateValidator` avec son constructeur par défaut. Fournir un PFX personnalisé est utile dans les environnements PKI internes. + +## Étape 4 : Valider la première signature numérique + +Un PDF peut contenir plusieurs signatures. Par simplicité, ce tutoriel valide la première signature (`Signatures[0]`). La méthode `Validate` renvoie `true` lorsque la signature est cryptographiquement intacte **et** que le certificat de signature est fiable. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Ce qui se passe en coulisses :** +- La méthode vérifie le hachage du contenu signé par rapport à la valeur de la signature. +- Elle construit la chaîne de certificats en utilisant le validateur fourni. +- Le statut de révocation (CRL/OCSP) est évalué si le validateur est configuré pour cela. + +### Gestion des signatures multiples + +Si votre PDF contient plus d’une signature, parcourez la collection `Signatures` : + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Ce modèle vous permet de **vérifier la signature pdf** sur chaque page et de rapporter les résultats individuels. + +## Étape 5 : Afficher le résultat de la validation + +Enfin, écrivez le résultat dans la console. Dans du code de production, vous enregistrerez probablement le résultat ou lèverez une exception pour une signature invalide. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Sortie console attendue + +``` +Valid +``` + +ou + +``` +Invalid +``` + +Le message reflète le booléen renvoyé par `Validate`. Un résultat « Invalid » peut indiquer un document altéré, un certificat non fiable ou un certificat de signature expiré. + +## Étape 6 : Pièges courants et conseils de bonnes pratiques + +### 1. Certificat de confiance manquant +Si vous obtenez `Invalid` alors que vous savez que la signature devrait être fiable, vérifiez que le bon certificat racine est fourni à `CertificateValidator`. Utilisez la surcharge qui accepte une `X509Certificate2Collection` pour plusieurs racines. + +### 2. Signature avec références externes +Certaines signatures couvrent du contenu externe (par ex., un fichier joint). Assurez‑vous que les ressources externes sont accessibles ; sinon la vérification du hachage échoue. + +### 3. Validation du horodatage +Une signature peut inclure un jeton d’horodatage. Pour la valider, configurez le validateur afin qu’il vérifie les certificats de l’autorité d’horodatage (TSA) : + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performances avec de gros PDFs +Charger un PDF de plusieurs centaines de pages peut consommer beaucoup de mémoire. Si vous avez uniquement besoin des données de signature, utilisez `PdfFileEditor` pour extraire le dictionnaire de signature sans rendre les pages. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Sécurité des threads +Les instances de `Document` ne sont pas thread‑safe. Créez un nouveau `Document` par thread lorsque vous validez de nombreux PDFs en parallèle. + +## Exemple complet, exécutable + +Voici le programme complet que vous pouvez copier, coller et exécuter après avoir mis à jour les chemins de fichiers. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Exécuter le programme** affiche une ligne pour chaque signature, indiquant clairement si le PDF passe le contrôle **valider la signature numérique du pdf**. + +## Conclusion + +Vous savez désormais **comment valider un PDF** contenant des signatures numériques en utilisant Aspose.PDF pour .NET. Le tutoriel a couvert le chargement d’un PDF, la configuration d’un validateur de certificat, la vérification de la validité d’une signature PDF, la gestion des signatures multiples et le dépannage des problèmes courants. + +Ensuite, explorez des sujets connexes tels que **comment signer un PDF**, **comment ajouter des jetons d’horodatage** et **comment extraire le contenu signé**. Ces extensions vous permettent de créer un flux de travail complet de documents sécurisés de bout en bout en C#. + +--- + + +## Que devriez‑vous apprendre ensuite ? + + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités API supplémentaires et à explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment vérifier un PDF – Valider la signature PDF avec Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Comment extraire les informations de signature PDF en utilisant Aspose.PDF .NET : Guide étape par étape](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Comment supprimer les signatures numériques PDF en utilisant Aspose.PDF .NET | Guide complet](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/french/net/document-conversion/_index.md index 532cce86b7..1f1e6c0539 100644 --- a/pdf/french/net/document-conversion/_index.md +++ b/pdf/french/net/document-conversion/_index.md @@ -37,6 +37,7 @@ Vous apprendrez à définir les paramètres de conversion, à extraire du texte | [PDF vers PDFA](./pdf-to-pdfa/) Apprenez à convertir des fichiers PDF au format PDF/A à l'aide d'Aspose.PDF pour .NET avec ce didacticiel étape par étape. | | [PDF vers PDFA3b](./pdf-to-pdfa3b/) | Apprenez à convertir des fichiers PDF au format PDF/A-3B sans effort avec Aspose.PDF pour .NET dans ce guide étape par étape. | | [Convertir PDF en PDF/X‑4 en C#](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Apprenez à convertir un PDF en PDF/X‑4 en C# avec Aspose.PDF pour .NET grâce à ce tutoriel ASP.NET étape par étape. | +| [Tutoriel de conversion PDF/X‑4 – définir la norme PDF et convertir un PDF avec Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Apprenez à définir la norme PDF/X‑4 et à convertir un PDF en utilisant Aspose.PDF pour .NET. | | [Conversion de polices PDF en PNG](./pdf-to-png-font-hinting/) | Apprenez à convertir un PDF en PNG avec indication de police à l'aide d'Aspose.PDF pour .NET dans un guide étape par étape simple. | | [Tutoriel PDF vers PNG – Convertir des pages PDF en PNG en C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Apprenez à convertir chaque page d'un PDF en images PNG avec Aspose.PDF pour .NET en C#. | | [PDF en PPT](./pdf-to-ppt/) | Apprenez à convertir un PDF en PowerPoint avec Aspose.PDF pour .NET grâce à ce guide étape par étape. Simple, efficace et idéal pour les présentations. | diff --git a/pdf/french/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/french/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..aa5874c0ad --- /dev/null +++ b/pdf/french/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,227 @@ +--- +category: general +date: 2026-08-08 +description: Tutoriel de conversion pdfx4 montrant comment définir la norme PDF sur + PDF/X‑4 et convertir un PDF avec Aspose pour une conversion de format fiable. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: fr +lastmod: 2026-08-08 +og_description: Le tutoriel de conversion pdfx4 explique comment définir la norme + PDF sur PDF/X‑4 et effectuer une conversion PDF fiable en utilisant Aspose en C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Tutoriel de conversion pdfx4 – définir la norme PDF et convertir le PDF + avec Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Tutoriel de conversion pdfx4 – définir la norme PDF et convertir un PDF avec + Aspose +url: /fr/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tutoriel de conversion pdfx4 – définir la norme PDF et convertir un PDF avec Aspose + +Si vous avez besoin d'un **pdfx4 conversion tutorial**, ce guide vous accompagne tout au long du processus complet de définition de la norme PDF à PDF/X‑4 et de conversion d'un PDF avec Aspose. Que vous prépariez des fichiers prêts à l'impression ou que vous assuriez la conformité d'archivage à long terme, vous apprendrez un flux de travail fiable de **aspose pdf format conversion** qui fonctionne avec .NET 6 et versions ultérieures. + +Le tutoriel couvre tout, de la configuration du projet à la gestion des cas limites tels que les fichiers source manquants ou les fonctionnalités non prises en charge. À la fin de l'article, vous disposerez d'un programme C# autonome qui produit un fichier conforme PDF/X‑4 prêt pour les flux de travail en aval. + +## Prérequis + +- .NET 6 SDK ou version plus récente installé ([télécharger ici](https://dotnet.microsoft.com/download)) +- Une licence valide d'Aspose.PDF pour .NET (l'essai gratuit fonctionne pour les tests) +- Visual Studio 2022, VS Code, ou tout IDE supportant le développement .NET +- Un fichier PDF source que vous souhaitez convertir (placez-le dans un dossier connu) + +Ces exigences garantissent que le code s'exécute sans configuration supplémentaire. + +## Étape 1 : Créer un nouveau projet console .NET + +Ouvrez un terminal et exécutez les commandes suivantes pour créer une application console nommée `PdfX4Converter` : + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Ajoutez le package NuGet Aspose.PDF : + +```bash +dotnet add package Aspose.Pdf +``` + +Le package `Aspose.Pdf` fournit la classe `Document` et `PdfFormatConversionOptions` nécessaires aux opérations de **convert pdf pdfx4**. + +## Étape 2 : Écrire le code de conversion + +Ouvrez `Program.cs` (ou `Program.cs` si vous utilisez les nouvelles instructions de niveau supérieur) et remplacez son contenu par l'exemple complet ci‑dessous. Le code montre comment **set pdf standard** à PDF/X‑4, effectue la conversion et inclut la gestion des erreurs pour les problèmes courants. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Pourquoi chaque partie est importante + +- **Argument validation** empêche le programme de planter lorsque l'utilisateur oublie le chemin du fichier. +- **`Document` loading** génère une exception claire si le PDF source est manquant ou corrompu, ce qui est essentiel pour une expérience robuste de **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** est l'endroit où vous **set pdf standard**. En assignant `PdfStandard.PdfX4`, Aspose ajuste automatiquement les espaces colorimétriques, intègre les polices requises et écrit les métadonnées PDF/X‑4 nécessaires. +- **`FontEmbeddingMode.EmbedAll`** garantit que chaque police utilisée dans le PDF source est intégrée, une exigence courante pour les PDFs prêts à l'impression. +- **`doc.Convert`** effectue la **aspose pdf format conversion** réelle. La méthode écrit le nouveau fichier en un seul appel, simplifiant le flux de travail. + +## Étape 3 : Exécuter le convertisseur + +Compilez le projet et exécutez‑le avec les chemins source et destination : + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Si tout fonctionne, la console affiche : + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Vous pouvez maintenant ouvrir `output_pdfx4.pdf` dans n'importe quel visualiseur PDF supportant PDF/X‑4 (par ex., Adobe Acrobat Pro) et vérifier la conformité via *Fichier → Propriétés → Normes*. + +## Étape 4 : Vérifier la conformité PDF/X‑4 (optionnel) + +Pour les pipelines de production, vous pouvez vouloir valider le résultat de façon programmatique. Aspose fournit une classe `PdfComplianceChecker` (disponible dans le package `Aspose.Pdf`) qui peut être utilisée comme suit : + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +L'exécution de cet extrait après la conversion vous donne un résultat explicite de réussite/échec, ce qui est utile pour les pipelines CI/CD automatisés. + +## Étape 5 : Pièges courants et conseils de bonnes pratiques + +| Problème | Pourquoi cela se produit | Comment l'éviter | +|----------|--------------------------|------------------| +| Polices manquantes dans le PDF source | Les polices sont référencées mais non intégrées, ce qui entraîne des avertissements de conversion | Utilisez `FontEmbeddingMode.EmbedAll` comme indiqué ci‑dessus | +| Le PDF source contient des objets transparents non autorisés dans PDF/X‑4 | PDF/X‑4 interdit certains mélanges de transparence | Pré‑traitez le PDF avec `doc.ProcessTransparentObjects()` avant la conversion | +| Les gros fichiers provoquent OutOfMemoryException | Le document entier est chargé en mémoire | Diffusez la source en utilisant `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licence non appliquée | La version d'essai ajoute des filigranes | Appelez `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` avant toute utilisation de l'API Aspose | + +Appliquer ces conseils garantit une expérience fluide de **convert pdf pdfx4** en environnements de production. + +## Étape 6 : Étendre le tutoriel + +Une fois que vous maîtrisez le **pdfx4 conversion tutorial** de base, vous pouvez explorer : + +- **Batch conversion** : parcourir un dossier de PDFs et convertir chacun en PDF/X‑4. +- **Metadata injection** : ajouter les métadonnées XMP requises par des imprimeries spécifiques. +- **Color profile management** : attacher les profils ICC en utilisant `doc.ColorSpace = ColorSpace.DeviceRGB;` avant la conversion. + +Toutes ces extensions s'appuient sur la même base de **aspose pdf format conversion** démontrée ici. + +## Conclusion + +Ce **pdfx4 conversion tutorial** vous a montré comment **set pdf standard** à PDF/X‑4, effectuer une **convert pdf using Aspose** fiable, et vérifier le résultat. Vous disposez maintenant d'un programme C# complet et exécutable qui peut être intégré à des pipelines de traitement de documents plus larges ou utilisé comme utilitaire autonome. Expérimentez la conversion par lots, la gestion des métadonnées, ou des normes PDF alternatives (PDF/A‑2b, PDF/UA) pour approfondir votre expertise en **aspose pdf format conversion**. + +Bon codage, et profitez de la confiance que procure une sortie conforme PDF/X‑4 ! + +## 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 d'API supplémentaires et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Convertir PDF/A en PDF standard avec Aspose.PDF .NET : Guide complet](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Comment définir une date d'expiration sur les PDFs avec Aspose.PDF pour .NET (Tutoriel C#)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Guide complet : Convertir PDF en TIFF avec Aspose.PDF .NET pour une conversion de documents fluide](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/french/net/document-creation/_index.md b/pdf/french/net/document-creation/_index.md index 726b6af37b..981d1c6795 100644 --- a/pdf/french/net/document-creation/_index.md +++ b/pdf/french/net/document-creation/_index.md @@ -79,6 +79,9 @@ Apprenez à ajouter une page, insérer une forme et enregistrer le document PDF ### [Créer un document PDF avec Aspose.PDF – Guide étape par étape](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Apprenez à générer un document PDF à l'aide d'Aspose.PDF grâce à un guide détaillé étape par étape. +### [Créer un document PDF en C# avec Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Apprenez à générer un document PDF en C# en utilisant Aspose.PDF, avec ajout de pages, formes et enregistrement. + ## Ressources supplémentaires - [Aspose.PDF pour la documentation réseau](https://docs.aspose.com/pdf/net/) diff --git a/pdf/french/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/french/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..d9fada6269 --- /dev/null +++ b/pdf/french/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Créer un document PDF en C# avec Aspose.Pdf. Apprenez comment ajouter + une page blanche au PDF, ajouter un paragraphe au PDF et positionner du texte dans + le PDF avec des coordonnées précises. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: fr +lastmod: 2026-08-08 +og_description: Créez rapidement un document PDF en C#. Ce tutoriel montre comment + ajouter une page PDF vierge, ajouter un paragraphe à un PDF et positionner du texte + dans un PDF en utilisant Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Créer un document PDF en C# avec Aspose.Pdf – guide complet +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Créer un document PDF en C# avec Aspose.Pdf +url: /fr/net/document-creation/create-pdf-document-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 document PDF en C# avec Aspose.Pdf + +Si vous devez **créer un document pdf** de manière programmatique, ce guide vous montre exactement comment. En utilisant Aspose.Pdf pour .NET, vous pouvez ajouter une page pdf vierge, insérer un paragraphe dans un pdf, et positionner du texte dans un pdf avec une précision pixel‑parfait—le tout en quelques lignes de code C#. + +Vous terminerez le tutoriel avec un fichier PDF pleinement fonctionnel contenant une note placée aux coordonnées que vous spécifiez. Aucun outil externe, aucune édition manuelle—juste du code propre et réutilisable que vous pouvez intégrer dans n’importe quel projet .NET. + +## Ce que vous apprendrez + +* Comment **créer un document pdf** avec Aspose.Pdf. +* La bonne façon d'**ajouter une page pdf vierge** et pourquoi une page doit exister avant d'ajouter du contenu. +* Comment **ajouter un paragraphe à un pdf** et y attacher une balise personnalisée (utile pour une extraction ou un style ultérieur). +* La technique pour **positionner du texte dans un pdf** en utilisant la classe `Position`. +* Comment enregistrer le résultat sur le disque et vérifier la sortie. + +**Prérequis** + +* .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework 4.7+). +* Une licence valide d'Aspose.Pdf pour .NET ou une clé d'évaluation gratuite. +* Un IDE tel que Visual Studio 2022 ou VS Code avec l'extension C#. + +> **Astuce :** Si vous utilisez une évaluation gratuite, le PDF généré contiendra un petit filigrane. Enregistrez une licence pour le supprimer. + +## Comment créer un document pdf avec Aspose.Pdf + +La première étape consiste à instancier la classe `Document`. Cet objet représente l’ensemble du fichier PDF et vous donne accès aux pages, aux ressources et aux options d’enregistrement. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Créer le document **n'écrit** rien sur le disque pour l'instant ; il ne fait que préparer une représentation en mémoire que vous pouvez manipuler. Cette approche maintient l'API rapide et efficace en mémoire. + +## Ajouter une page pdf vierge avec Aspose.Pdf + +Un PDF doit contenir au moins une page avant de pouvoir placer du contenu. Ajouter une page vierge se fait en un seul appel de méthode : + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +La méthode `Add()` crée une page avec la taille par défaut (A4) et l'orientation (portrait). Si vous avez besoin d’une taille différente, passez une instance `PageSize` à `Add()`. + +## Ajouter un paragraphe à un pdf et définir une note + +Maintenant que la page existe, vous pouvez créer un objet `Paragraph` qui contient le texte visible. Le paragraphe peut également porter une balise personnalisée, ce qui est pratique lorsque vous devez plus tard localiser ou styliser l’élément de façon programmatique. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Pourquoi utiliser une balise ? + +Les balises sont des métadonnées qui accompagnent l’élément PDF. Elles peuvent être interrogées plus tard avec `Document.FindObject()` ou utilisées par des processeurs PDF en aval qui s’appuient sur les balises pour l’accessibilité ou l’indexation. + +## Positionner du texte dans un pdf avec des coordonnées précises + +Le placement par défaut d’un paragraphe est le coin supérieur gauche de la marge de la page. Pour déplacer le texte à un emplacement exact, définissez la propriété `Position` sur la balise du paragraphe : + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Les coordonnées sont mesurées en points (1 point = 1/72 pouce). L’origine (0,0) se trouve en bas‑gauche de la page, ce qui correspond à la plupart des moteurs de rendu PDF. Ajustez les valeurs `X` et `Y` pour répondre aux besoins de votre mise en page. + +Après le positionnement, ajoutez le paragraphe à la collection de la page : + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Enregistrer le document pdf + +Enfin, écrivez le PDF en mémoire dans un fichier. Vous pouvez spécifier le chemin de sortie, le format, et même les options de chiffrement. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Lorsque le programme se termine, `output.pdf` contient une seule page avec le texte **Important note** placé près du coin supérieur droit (X = 50, Y = 750). Ouvrez le fichier dans n’importe quel visualiseur PDF pour vérifier le placement. + +![Document PDF généré avec C# Aspose.Pdf montrant la note positionnée](https://example.com/images/generated-pdf.png) + +*Texte alternatif de l’image : Document PDF généré avec C# Aspose.Pdf montrant la note positionnée* (inclut le mot‑clé principal). + +## Exemple complet et exécutable + +En assemblant tous les éléments, voici une application console complète que vous pouvez copier, compiler et exécuter : + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Sortie attendue** lorsque vous exécutez le programme : + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +L’ouverture de `output.pdf` montre une seule page avec le texte **Important note** positionné aux coordonnées que vous avez spécifiées. + +## Variations courantes et cas limites + +| Scénario | Ce qu’il faut changer | Pourquoi c’est important | +|----------|-----------------------|---------------------------| +| **Taille de page différente** | `pdfDocument.Pages.Add(PageSize.A5)` | Des pages plus petites réduisent la taille du fichier et s’adaptent aux écrans mobiles. | +| **Notes multiples** | Boucler sur une collection de chaînes et créer un `Paragraph` pour chaque, en incrémentant la coordonnée `Y`. | Permet la génération en lot de notes de type puce. | +| **Caractères Unicode** | Assurez‑vous que le fichier source est enregistré en UTF‑8 et définissez `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf prend en charge Unicode nativement, mais l’encodage du fichier doit correspondre. | +| **PDF protégé par mot de passe** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Ajoute une sécurité pour les notes confidentielles. | +| **Sortie haute résolution** | Définissez `pdfDocument.PageInfo.Width` et `Height` à des valeurs plus grandes avant d’ajouter du contenu. | Utile pour l’impression de PDFs grand format. | + +## Conseils pour l’utilisation en production + +* **Réutilisez l’instance `Document`** lors de la génération de nombreux PDFs dans une même requête afin de réduire la pression sur le ramasse‑miettes. +* **Libérez les objets** (`pdfDocument.Dispose()`) si vous créez de nombreux documents dans une boucle. +* **Validez les coordonnées** : la valeur `Y` ne peut pas dépasser la hauteur de la page ; sinon le texte sera tronqué. +* **Utilisez `TextFragmentAbsorber`** pour extraire plus tard la note par sa balise (`/P`) si vous devez relire le contenu. + +## Conclusion + +Vous savez maintenant comment **créer un document pdf** avec Aspose.Pdf, **ajouter une page pdf vierge**, **ajouter un paragraphe à un pdf**, **ajouter une note à un pdf**, et **positionner du texte dans un pdf** avec précision. L’exemple complet montre un flux de travail propre et réutilisable que vous pouvez étendre aux factures, aux rapports ou à tout scénario d’automatisation de documents. + +Ensuite, explorez des sujets connexes tels que **ajouter des images à un pdf**, **créer des tableaux avec Aspose.Pdf**, ou **appliquer des signatures numériques**. Chacun de ces sujets s’appuie sur les mêmes concepts de base présentés ici, vous préparant ainsi à aborder des tâches de génération de PDF plus sophistiquées. + +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 supplémentaires de l’API et explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Créer un document PDF avec Aspose.PDF – Ajouter une page, une forme & enregistrer](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Comment ajouter une page vide à la fin d’un PDF avec Aspose.PDF pour .NET | Guide étape par étape](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/french/net/images-graphics/_index.md index 6bd4dee5cf..2c7dd96bff 100644 --- a/pdf/french/net/images-graphics/_index.md +++ b/pdf/french/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Apprenez à créer des documents PDF attrayants en extrayant et en surlignant de ### [Dessiner des formes transparentes dans des fichiers PDF avec Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Un tutoriel de code pour Aspose.PDF Net +### [Définir l'opacité d'un PDF en C# avec Aspose.PDF – guide complet](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Apprenez à ajuster l'opacité des pages PDF en C# avec Aspose.PDF grâce à ce guide complet pas à pas. + ### [Identification efficace des images PDF avec Aspose.PDF pour .NET](./master-image-identification-aspose-pdf-net/) Apprenez à identifier les images en niveaux de gris et RVB dans les PDF avec Aspose.PDF pour .NET. Ce tutoriel couvre l'installation, l'extraction d'images et des conseils de performance. diff --git a/pdf/french/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/french/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..613fe1931e --- /dev/null +++ b/pdf/french/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Définir l'opacité d'un PDF en C# avec Aspose.PDF – apprenez à ajuster + la transparence du trait et du remplissage en quelques lignes de code. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: fr +lastmod: 2026-08-08 +og_description: Définissez rapidement l’opacité d’un PDF en C#. Ce guide vous montre + comment modifier la transparence du trait et du remplissage à l’aide de l’API d’état + graphique d’Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Définir l'opacité d'un PDF en C# avec Aspose.PDF – tutoriel étape par étape +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Définir l'opacité d'un PDF en C# avec Aspose.PDF – guide complet +url: /fr/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Définir l'opacité d'un PDF en C# avec Aspose.PDF – guide complet + +Si vous devez **définir l'opacité d'un PDF** pour des opérations de dessin spécifiques, ce tutoriel vous montre exactement comment le faire avec Aspose.PDF for .NET. Que vous créiez des filigranes, des superpositions semi‑transparentes ou des graphiques personnalisés, vous apprendrez une approche concise, prête pour la production. + +Dans les sections suivantes, nous couvrirons tout, du chargement d'un PDF à la modification de son état graphique, en passant par l'ajout d'une nouvelle définition d'opacité, puis l'enregistrement du résultat. Aucun document externe n'est requis — seulement le code ci‑dessous et une brève explication de chaque étape. + +## 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+) +* Une licence valide d'Aspose.PDF for .NET (l'essai gratuit suffit pour l'évaluation) +* Un fichier PDF d'entrée (`input.pdf`) situé dans un dossier en lecture/écriture +* Visual Studio 2022 ou tout autre IDE C# de votre choix + +## Étape 1 – Charger le document PDF (Aspose.PDF for .NET) + +La première tâche consiste à ouvrir le PDF existant. Aspose.PDF représente un fichier PDF avec la classe `Document`, qui vous donne un accès complet aux pages, aux ressources et aux objets de bas niveau. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Pourquoi c’est important* : le chargement du document crée un modèle en mémoire que vous pouvez modifier en toute sécurité. L’instruction `using` garantit que le handle du fichier est libéré automatiquement après la fin de l’opération. + +## Étape 2 – Obtenir la première page à modifier + +L'opacité est définie page par page via le dictionnaire de ressources de la page. Ici nous ciblons la première page, mais vous pouvez parcourir `doc.Pages` pour une opération en lot. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Pourquoi c’est important* : chaque page possède sa propre collection `Resources`, qui stocke les états graphiques, les polices, les images, etc. Modifier la bonne page assure que l’effet d’opacité apparaît là où vous l’attendez. + +## Étape 3 – Ouvrir le dictionnaire de ressources de la page pour le modifier + +Aspose.PDF fournit un assistant `DictionaryEditor` pour manipuler les dictionnaires PDF de bas niveau sans casser la structure du fichier. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Pourquoi c’est important* : éditer directement les dictionnaires COS (Content Object System) du PDF est la seule façon d’injecter un état graphique personnalisé. L’éditeur abstrait la syntaxe de bas niveau tout en maintenant la validité du PDF. + +## Étape 4 – Récupérer le dictionnaire ExtGState existant + +Le dictionnaire **ExtGState** (external graphics state) contient l’opacité, le mode de fusion, l’épaisseur de trait, etc. S’il n’existe pas, Aspose.PDF le crée automatiquement lorsque vous ajoutez une nouvelle entrée. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Pourquoi c’est important* : sans une entrée `ExtGState` vous ne pouvez pas référencer une opacité personnalisée plus tard dans le flux de contenu de la page. Cette étape garantit que le conteneur est présent. + +## Étape 5 – Créer un nouvel état graphique avec l’opacité souhaitée + +Un état graphique est un ensemble de paramètres. Pour l’opacité, nous définissons `CA` (stroke opacity) et `ca` (fill opacity). Nous définissons également un mode de fusion (`BM`) pour contrôler la façon dont les pixels transparents interagissent avec le contenu sous‑jacent. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Pourquoi c’est important* : `CA` et `ca` acceptent des valeurs de 0 (complètement transparent) à 1 (entièrement opaque). Ajustez ces nombres pour obtenir l’effet visuel désiré. Le mode de fusion `"Normal"` est le plus courant, mais vous pouvez expérimenter avec `"Multiply"` ou `"Screen"` pour des effets artistiques. + +## Étape 6 – Enregistrer le nouvel état graphique dans la collection ExtGState + +Chaque état graphique doit avoir un nom unique (par ex., `GS0`). Nous ajoutons notre dictionnaire à la collection `ExtGState`, puis mettons à jour les ressources de la page. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Pourquoi c’est important* : en nommant l’état (`GS0`), vous pouvez le référencer plus tard dans le flux de contenu de la page à l’aide de l’opérateur `gs`. Si vous avez besoin de plusieurs niveaux d’opacité, créez des entrées supplémentaires (`GS1`, `GS2`, …). + +## Étape 7 – Appliquer l’état graphique aux commandes de dessin (optionnel) + +Si vous souhaitez appliquer immédiatement l’opacité au contenu existant, vous devez éditer le flux de contenu de la page. Voici un exemple simple qui dessine un rectangle semi‑transparent en utilisant l’état nouvellement créé. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Pourquoi c’est important* : l’opérateur `gs` (`SetGraphicsState`) indique au moteur de rendu PDF d’utiliser les valeurs d’opacité définies dans `GS0` pour toutes les commandes de dessin suivantes. La paire `grestore`/`gsave` garantit que les autres éléments de la page restent inchangés. + +## Étape 8 – Enregistrer le PDF modifié + +Enfin, écrivez le document mis à jour sur le disque. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Pourquoi c’est important* : l’enregistrement finalise toutes les modifications, intègre le nouvel état graphique et produit un PDF que n’importe quel visualiseur (Adobe Acrobat, Chrome, etc.) affichera avec la transparence prévue. + +### Résultat attendu + +Ouvrez `output.pdf` dans un visualiseur PDF. Vous devez voir un rectangle rouge dont le contour est opaque à 80 % et le remplissage à 40 % d’opacité, se fondant doucement avec tout contenu d’arrière‑plan. Le reste de la page reste inchangé. + +## Variations courantes et cas limites + +| Situation | Ce qu’il faut changer | Raison | +|-----------|-----------------------|--------| +| **Niveaux d’opacité multiples** | Créez des états graphiques supplémentaires (`GS1`, `GS2`, …) avec des valeurs `CA`/`ca` différentes et référencez‑les où nécessaire | Permet un contrôle fin sur différents éléments | +| **Modes de fusion différents** | Utilisez `"Multiply"`, `"Screen"`, `"Overlay"` etc., au lieu de `"Normal"` dans l’entrée `BM` | Produit des effets de fusion artistiques | +| **Application à un flux de contenu existant** | Insérez `SetGraphicsState` avant les opérateurs de dessin spécifiques que vous voulez affecter | Évite une opacité indésirable sur des objets non concernés | +| **PDF volumineux** | Traitez les pages dans une boucle `foreach (Page p in doc.Pages)` pour ne pas charger le fichier entier en mémoire d’un coup | Améliore les performances et réduit la pression mémoire | +| **Absence d’ExtGState existant** | Le code de l’Étape 4 crée déjà un dictionnaire s’il manque, aucune gestion supplémentaire n’est requise | Garantit que le dictionnaire est présent | + +### Astuce de pro + +Lorsque vous ajoutez de nombreux états graphiques personnalisés, maintenez une nomenclature cohérente (`GS0`, `GS1`, …) et documentez le but de chacun dans un bloc de commentaires. Cela facilite la maintenance future, surtout dans les projets collaboratifs. + +## Exemple complet, exécutable + +Voici le programme complet que vous pouvez copier, coller et exécuter. Il inclut toutes les étapes, les directives `using` nécessaires et des commentaires. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Exécutez le programme, + +## 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 fonctionnels complets avec des explications pas à pas pour vous aider à maîtriser d’autres fonctionnalités de l’API et explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Définir des arrière‑plans d’image dans les PDF avec Aspose.PDF for .NET : guide complet](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Comment créer des lignes pointillées dans les PDF avec Aspose.PDF for .NET : guide étape par étape](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Comment personnaliser les PDF avec Aspose.PDF for .NET : définir les marges de page et dessiner des lignes](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..6fd210d521 100644 --- a/pdf/french/net/programming-with-forms/_index.md +++ b/pdf/french/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Ces tutoriels proposent également des exemples de code détaillés, des explica | [Définir la légende du bouton radio](./set-radio-button-caption/) Apprenez à définir des légendes de boutons radio dans vos PDF avec Aspose.PDF pour .NET. Ce guide étape par étape vous guidera dans le chargement, la modification et l'enregistrement de vos formulaires PDF. | | [Zone de texte](./text-box/) | Découvrez comment ajouter facilement des zones de texte à vos PDF avec Aspose.PDF pour .NET grâce à ce guide étape par étape. Améliorez l'interaction utilisateur. | | [Comment créer un PDF avec Aspose – Ajouter un champ de formulaire et des pages](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Apprenez à créer un PDF, ajouter des champs de formulaire et gérer les pages avec Aspose.PDF pour .NET dans ce guide étape par étape. | +| [Enregistrer un document PDF avec Aspose.PDF – guide complet](./save-pdf-document-with-aspose-pdf-complete-guide/) | Apprenez à enregistrer un document PDF avec Aspose.PDF grâce à ce guide complet étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/french/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ba26c9b53e --- /dev/null +++ b/pdf/french/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Enregistrez un document PDF avec Aspose.PDF, apprenez comment ajouter + des pages PDF, remplir les champs d’un formulaire PDF et créer un PDF contenant + des champs de formulaire, le tout dans un seul tutoriel. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: fr +lastmod: 2026-08-08 +og_description: Enregistrez un document PDF avec Aspose.PDF et découvrez comment ajouter + des pages PDF, remplir des champs de formulaire PDF et créer des PDF avec des champs + de formulaire rapidement et de manière fiable. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Enregistrez un document PDF avec Aspose.PDF – guide étape par étape +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Enregistrer un document PDF avec Aspose.PDF – guide complet +url: /fr/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Enregistrer un document PDF avec Aspose.PDF – guide complet + +Si vous devez **enregistrer un document PDF** contenant des champs de formulaire interactifs, ce tutoriel vous montre exactement comment faire. Vous verrez comment ajouter des pages PDF, créer un formulaire PDF et remplir un champ de formulaire PDF — le tout avec Aspose.PDF pour .NET. + +Dans les sections suivantes, vous apprendrez à : + +* ajouter plusieurs pages à un nouveau PDF, +* créer un champ de formulaire de zone de texte sur la première page, +* placer une annotation widget pour le même champ sur une deuxième page, +* définir la valeur du champ (remplir le champ de formulaire PDF), +* et enfin **enregistrer le document PDF** sur le disque. + +Aucun outil externe n’est requis ; le code complet et exécutable est inclus. + +## Prérequis + +* .NET 6.0 ou version ultérieure (le code fonctionne également avec .NET Framework 4.7.2+). +* Une licence valide d’Aspose.PDF pour .NET ou une clé d’évaluation gratuite. +* Visual Studio 2022 (ou tout IDE C#). + +Ajoutez le package NuGet : + +```bash +dotnet add package Aspose.PDF +``` + +## Comment ajouter des pages PDF + +La première étape consiste à créer un PDF vide et à y ajouter les pages dont vous avez besoin. Ajouter les pages avant de définir les champs de formulaire garantit que les coordonnées de mise en page sont précises. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Pourquoi c’est important :* chaque objet `Page` représente une toile imprimable. En ajoutant les pages tôt, vous pouvez les référencer plus tard lors du positionnement des éléments du formulaire. + +## Comment créer un formulaire PDF avec Aspose.PDF + +Un formulaire PDF se compose d’une **définition de champ** (le conteneur logique) et d’une ou plusieurs **annotations widget** (la représentation visuelle). L’exemple crée un `TextBoxField` nommé **Comments** sur la première page. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Pourquoi c’est important :* les coordonnées du `Rectangle` sont exprimées en points (1 pt = 1/72 in). Ajustez les valeurs pour correspondre à votre conception. + +## Remplir le champ de formulaire PDF + +Vous pouvez définir la valeur du champ programmatiquement avant que le document ne soit enregistré. C’est le cœur du **remplissage du champ de formulaire PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Si vous devez remplir le champ plus tard (par ex., à partir d’une saisie utilisateur), il suffit d’assigner une nouvelle chaîne à `commentsField.Value` avant d’appeler `Save`. + +## Ajouter une annotation widget pour le même champ sur la deuxième page + +Une annotation widget rend le champ de formulaire visible sur une page. En ajoutant un deuxième widget, le même champ logique apparaît sur les deux pages, démontrant la **création d’un PDF avec des champs de formulaire** qui s’étendent sur plusieurs pages. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Pourquoi c’est important :* la collection `Widgets` peut contenir un nombre quelconque de représentations visuelles. Les utilisateurs peuvent interagir avec le champ sur chaque page, et la valeur saisie reste synchronisée. + +## Attacher le champ aux annotations de la première page + +Les champs de formulaire doivent être ajoutés à la collection d’annotations d’une page afin que le visualiseur PDF puisse les rendre. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Enregistrer le document PDF + +Maintenant que le formulaire est entièrement défini, vous pouvez **enregistrer le document PDF** à l’emplacement de votre choix. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Lorsque vous ouvrez `output.pdf` dans Adobe Acrobat Reader ou tout autre visualiseur PDF, vous verrez une zone de texte sur la page 1 et une zone correspondante sur la page 2. Saisir du texte dans l’une ou l’autre met à jour le même champ sous‑jacent. + +## Exemple complet et exécutable + +Voici le programme complet que vous pouvez copier‑coller dans une application console. Il compile et produit le PDF décrit sans aucune modification. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Résultat attendu :** un fichier nommé `output.pdf` contenant deux pages. La page 1 montre une zone de texte intitulée « Comments » aux coordonnées (100, 600). La page 2 montre le même champ aux coordonnées (100, 400). Le champ est pré‑rempli avec « Enter your feedback here ». Modifier le texte sur l’une ou l’autre des pages met à jour la même valeur lorsque le document est à nouveau enregistré. + +## Questions fréquentes et gestion des cas limites + +| Question | Réponse | +|----------|--------| +| *Puis‑je ajouter plus d’un widget pour le même champ ?* | Oui. Ajoutez des objets `WidgetAnnotation` supplémentaires à `commentsField.Widgets`. Chaque widget peut être placé sur n’importe quelle page. | +| *Comment définir l’apparence du champ (police, bordure, arrière‑plan) ?* | Utilisez `commentsField.DefaultAppearance` pour spécifier une police et une couleur, et définissez les propriétés `commentsField.Border` pour le style de ligne. | +| *Comment rendre le champ en lecture‑seule ?* | Définissez `commentsField.ReadOnly = true;`. Le champ affichera toujours sa valeur mais ne pourra plus être modifié par l’utilisateur. | +| *Est‑il possible de remplir le champ après la création du PDF ?* | Oui. Chargez le PDF enregistré avec `new Document("output.pdf")`, localisez le champ via `pdfDocument.Form["Comments"]`, assignez une nouvelle `Value`, puis appelez à nouveau `Save`. | +| *Que faire si le PDF doit être conforme à PDF/A pour l’archivage ?* | Après la construction du document, appelez `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` avant l’enregistrement. | + +## Astuces du métier + +* **Astuce pro :** gardez le nom logique du champ court et unique ; c’est l’identifiant que vous utiliserez pour remplir le formulaire programmatiquement plus tard. +* **À surveiller :** les rectangles de widget qui se chevauchent. Les chevauchements peuvent provoquer des artefacts d’affichage dans certains visualiseurs. +* **Note de performance :** ajouter de nombreuses pages ou widgets dans une boucle serrée peut être optimisé en réutilisant une seule instance de `Rectangle` et en ne modifiant que ses coordonnées. + +## Conclusion + +Vous savez maintenant comment **enregistrer un document PDF** contenant un formulaire pleinement fonctionnel, comment **remplir un champ de formulaire PDF**, et comment **ajouter des pages PDF** ainsi que **créer un PDF avec des champs de formulaire** en utilisant Aspose.PDF pour .NET. L’exemple complet montre le flux de travail de bout en bout, de la création du document à l’enregistrement final. + +Ensuite, explorez des sujets connexes tels que **l’ajout de cases à cocher**, **la création de listes déroulantes**, ou **l’aplatissement du formulaire** pour une distribution en lecture‑seule. Chacun de ces sujets s’appuie sur les mêmes principes présentés ici et élargit vos capacités d’automatisation PDF. + +Bon codage ! + +## Que devez‑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. + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/french/net/programming-with-pdf-pages/_index.md index 79e5a87d5a..26200daa9d 100644 --- a/pdf/french/net/programming-with-pdf-pages/_index.md +++ b/pdf/french/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Les tutoriels incluent des instructions étape par étape, des exemples de code | [Mettre à jour les dimensions de la page PDF](./update-dimensions/) | Découvrez comment mettre à jour les dimensions des pages PDF sans effort avec Aspose.PDF pour .NET dans ce guide complet, étape par étape. | | [Zoom sur le contenu de la page dans le fichier PDF](./zoom-to-page-contents/) | Découvrez comment zoomer sur le contenu des pages de vos fichiers PDF avec Aspose.PDF pour .NET dans ce guide complet. Améliorez vos documents PDF selon vos besoins spécifiques. | | [Ajouter des numéros de page PDF avec C# – Guide complet étape par étape](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Apprenez à ajouter des numéros de page à un PDF en C# avec Aspose.PDF pour .NET grâce à ce guide complet étape par étape. | +| [Ajouter une numérotation Bates PDF avec Aspose – guide étape par étape](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Apprenez à ajouter une numérotation Bates à vos fichiers PDF avec Aspose.PDF pour .NET grâce à ce guide complet étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/french/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..ffb433ac2c --- /dev/null +++ b/pdf/french/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Ajouter une numérotation Bates à un PDF avec Aspose.Pdf en C#. Ce tutoriel + montre également comment ajouter une page blanche à un PDF et générer un PDF de + façon programmatique. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: fr +lastmod: 2026-08-08 +og_description: Ajoutez une numérotation Bates à un PDF avec Aspose.Pdf en C#. Apprenez + à ajouter une page blanche à un PDF, à générer un PDF par programmation et à enregistrer + le document final en quelques minutes. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Ajouter une numérotation Bates à un PDF avec Aspose – guide complet C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Ajouter une numérotation Bates à un PDF avec Aspose – guide étape par étape +url: /fr/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ajouter une numérotation Bates PDF avec Aspose – guide étape par étape + +Ajouter une numérotation bates pdf avec Aspose.Pdf est simple une fois que vous comprenez les étapes principales. Si vous devez également ajouter une page vierge pdf ou générer un pdf de manière programmatique, ce guide couvre tout ce dont vous avez besoin. + +Dans ce tutoriel vous allez : + +* Créer un nouveau document PDF à partir de zéro. +* Ajouter une page vierge pdf qui accueillera les numéros Bates. +* Configurer l'artifact de numérotation Bates avec un préfixe personnalisé. +* Enregistrer le PDF afin que les numéros apparaissent dans le fichier généré. + +À la fin, vous disposerez d'une application console C# entièrement fonctionnelle qui produit un PDF contenant des numéros Bates tels que **CASE‑1000**, **CASE‑1001**, … – une exigence courante pour les flux de travail juridiques et d'e‑discovery. + +## Prérequis + +* .NET 6.0 SDK ou version ultérieure (le code fonctionne également avec .NET Framework 4.8). +* Visual Studio 2022 ou tout IDE compatible C#. +* Une licence valide d'Aspose.Pdf for .NET (ou une clé d'évaluation gratuite). +* Une connaissance de base de la syntaxe C#. + +> **Astuce :** Si vous exécutez le code sans licence, Aspose ajoutera un petit filigrane au PDF de sortie. + +## Étape 1 : Configurer le projet et importer Aspose.Pdf + +Créer un nouveau projet console et ajouter le package NuGet Aspose.Pdf : + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Les directives `using` requises pour l'exemple sont : + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Ces espaces de noms vous donnent accès aux classes `Document`, `Page` et `BatesNumberingArtifact` utilisées plus tard. + +## Étape 2 : Ajouter une page vierge pdf + +Un numéro Bates doit être attaché à une page, nous créons donc d'abord une page vierge qui recevra l'artifact de numérotation. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +La classe `Document` représente le fichier PDF complet, tandis que `Pages.Add()` insère une nouvelle page vide à la fin de la collection de pages du document. Comme le document commence vide, cet appel crée également la première page. + +## Étape 3 : Configurer l'artifact de numérotation Bates + +Nous définissons maintenant l'apparence des numéros Bates. Le `BatesNumberingArtifact` vous permet de définir le numéro de départ, le préfixe, le suffixe et les options de formatage. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Pourquoi c'est important :** +Définir `StartNumber` à **1000** correspond aux conventions typiques des dossiers juridiques. Le `Prefix` garantit que chaque numéro apparaît sous la forme **CASE‑1000**, **CASE‑1001**, … ce qui facilite la recherche et le tri. + +## Étape 4 : Attacher l'artifact à la page + +L'artifact doit être ajouté à la collection `Artifacts` de la page afin qu'Aspose le rende sur chaque page lors de l'enregistrement. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Lorsque le document est enregistré, Aspose répète automatiquement l'artifact sur toutes les pages, en incrémentant le numéro pour chaque page suivante. + +## Étape 5 : (Facultatif) Ajouter des pages supplémentaires + +Si vous avez besoin de plus de pages, répétez simplement `pdfDocument.Pages.Add()`. L'artifact de numérotation Bates que vous avez attaché à l'étape précédente apparaîtra automatiquement sur chaque nouvelle page. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Étape 6 : Enregistrer le PDF – générer un pdf de manière programmatique + +Enfin, persistez le document sur le disque. C'est à ce moment que les numéros Bates sont rendus sur les pages. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Résultat attendu :** +Ouvrez *BatesNumberedDocument.pdf* et vous verrez un PDF de trois pages. Chaque page affiche un numéro Bates dans le coin inférieur droit : + +* Page 1 → **CASE‑1000** +* Page 2 → **CASE‑1001** +* Page 3 → **CASE‑1002** + +Les numéros sont automatiquement incrémentés parce que l'artifact est attaché à la collection de pages. + +## Exemple complet, exécutable + +En réunissant tous les éléments, voici un programme console complet que vous pouvez copier, coller et exécuter : + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Exécutez le programme avec `dotnet run`. Après l'exécution, localisez le fichier sur votre bureau et vérifiez les numéros Bates. + +![Exemple d'ajout de numérotation bates pdf](/images/bates-numbering.png "Exemple d'ajout de numérotation bates pdf") + +## Questions fréquentes et cas particuliers + +### Que faire si j'ai besoin d'une police ou d'une position différente ? + +Le `BatesNumberingArtifact` expose des propriétés telles que `FontSize`, `FontColor`, `HorizontalAlignment` et `VerticalAlignment`. Par exemple : + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Comment exclure une page spécifique de la numérotation ? + +Créez un `BatesNumberingArtifact` séparé pour les pages que vous souhaitez numéroter et ajoutez‑le uniquement à ces pages. Les pages sans artifact attaché resteront non numérotées. + +### Cela fonctionne-t-il avec des PDF existants ? + +Oui. Au lieu de `new Document()`, chargez un fichier existant : + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Puis attachez l'artifact aux pages souhaitées et enregistrez. + +## Conclusion + +Vous savez maintenant comment **ajouter une numérotation bates pdf** avec Aspose.Pdf, comment **ajouter une page vierge pdf**, et comment **générer un pdf de manière programmatique** dans une solution C# propre et réutilisable. L'approche fonctionne avec n'importe quel nombre de pages, des préfixes personnalisés et des options de style, vous donnant un contrôle total sur le document final. + +Les prochaines étapes que vous pourriez explorer : + +* Utiliser **create pdf as + +## 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. + +- [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 une page vide à la fin d'un PDF avec Aspose.PDF pour .NET | Guide étape par étape](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Créer un document PDF avec Aspose.PDF – Ajouter une page, une forme & Enregistrer](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 0e92a24912..4c61fc4cb9 100644 --- a/pdf/french/net/programming-with-security-and-signatures/_index.md +++ b/pdf/french/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ Ce tutoriel vous offre un aperçu détaillé des méthodes et techniques permett | [Signer avec une carte à puce à l'aide d'une signature de fichier PDF](./sign-with-smart-card-using-pdf-file-signature/) | Apprenez à signer des fichiers PDF à l'aide d'une carte à puce avec Aspose.PDF pour .NET. Suivez ce guide étape par étape pour des signatures numériques sécurisées. | | [Signer avec une carte à puce en utilisant le champ de signature](./sign-with-smart-card-using-signature-field/) | Apprenez à signer des PDF en toute sécurité à l'aide d'une carte à puce avec Aspose.PDF pour .NET. Suivez notre guide étape par étape pour une mise en œuvre facile. | | [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# avec Aspose.PDF – guide complet](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Apprenez à vérifier les signatures PDF en C# avec Aspose.PDF grâce à un guide complet étape par étape. | +| [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#. | +| [Tutoriel de signature PDF : valider une signature numérique PDF avec Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Apprenez à valider les signatures numériques d'un PDF avec Aspose.PDF pour .NET, étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/french/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/french/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..0011d492b2 --- /dev/null +++ b/pdf/french/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: Tutoriel sur la signature PDF montrant comment valider une signature + numérique PDF en utilisant les options de validation de signature et du code C# + – guide rapide étape par étape. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: fr +lastmod: 2026-08-08 +og_description: Le tutoriel sur la signature PDF vous guide à travers la validation + d’une signature numérique PDF avec Aspose.PDF. Apprenez à configurer les options + de validation de la signature et à vérifier le résultat. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: Tutoriel de signature PDF – valider les signatures numériques PDF en C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Tutoriel sur la signature PDF : valider une signature numérique PDF avec Aspose.PDF' +url: /fr/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutoriel de signature PDF – valider une signature numérique PDF en C# + +Si vous avez besoin d'un **tutoriel de signature PDF** qui montre exactement comment valider une signature numérique PDF, ce guide est fait pour vous. Vous verrez comment charger un PDF signé, configurer les **options de validation de signature**, exécuter la validation et afficher le résultat — le tout avec du code C# clair et exécutable. + +Valider une signature PDF est essentiel lorsque vous traitez des contrats, factures ou tout document juridiquement contraignant. Ce tutoriel parcourt le flux de travail complet, afin que vous puissiez intégrer les vérifications de signature dans vos propres applications sans deviner quels appels d'API sont nécessaires. + +## Ce que vous accomplirez + +* Charger un fichier PDF signé en utilisant Aspose.PDF. +* Configurer les **options de validation de signature** telles que l'algorithme de hachage. +* Appeler la méthode `Validate` pour **valider la signature numérique PDF**. +* Afficher un message clair « Signature valide » dans la console. + +**Prérequis** + +* .NET 6.0 (ou version ultérieure) installé. +* Visual Studio 2022 (ou tout IDE C#). +* Package NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Astuce :** Utilisez la dernière version d'Aspose.PDF pour bénéficier du support des algorithmes SHA‑3 et d'une performance de validation améliorée. + +## Étape 1 : Installer le package NuGet Aspose.PDF + +Ouvrez votre projet dans Visual Studio et exécutez la commande suivante dans la console du gestionnaire de packages : + +```bash +Install-Package Aspose.Pdf +``` + +Le package ajoute l'espace de noms `Aspose.Pdf`, qui contient la classe `Document` et les API liées aux signatures que vous utiliserez. + +## Étape 2 : Charger le document PDF signé + +La première ligne de code crée un objet `Document` qui représente le fichier PDF sur le disque. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Pourquoi c’est important :* La classe `Document` analyse la structure du PDF, exposant la collection `Signatures` qui contient toutes les signatures numériques intégrées. Si le chemin du fichier est incorrect, une exception est levée, il faut donc vérifier le chemin avant d’exécuter le programme. + +## Étape 3 : Configurer les options de validation de signature + +Vous pouvez adapter le processus de validation avec la classe `SignatureValidationOptions`. Dans ce tutoriel nous spécifions l'algorithme de hachage, mais vous pouvez également définir des vérifications de révocation de certificat, la validation de l’horodatage, et plus encore. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Pourquoi c’est important :* L'algorithme de hachage doit correspondre à celui utilisé lors de la création de la signature. Utiliser un algorithme différent entraîne l’échec de la validation même si la signature est autrement correcte. + +## Étape 4 : Valider la première signature + +La plupart des PDF contiennent une seule signature, mais la collection `Signatures` peut en contenir plusieurs. Cet exemple valide la première entrée (`[0]`). La méthode `Validate` renvoie un booléen indiquant le succès. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Cas particulier :* Si le PDF ne contient aucune signature, `document.Signatures.Count` sera `0` et l’accès à `[0]` lèvera une `IndexOutOfRangeException`. Protégez‑vous contre cela avec une vérification simple : + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Étape 5 : Afficher le résultat de la validation + +Enfin, écrivez le résultat dans la console. Cette étape montre le résultat du **check pdf signature** dans un format lisible par l’homme. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Lorsque vous exécuterez le programme, vous devriez voir : + +``` +Signature valid: True +``` + +Si la signature est corrompue, utilise un algorithme non pris en charge, ou le certificat est révoqué, la sortie sera `False`. + +## Exemple complet et exécutable + +Copiez le code suivant dans un nouveau projet console (`dotnet new console`) et remplacez `YOUR_DIRECTORY/signed.pdf` par le chemin de votre fichier PDF signé. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Sortie attendue + +``` +Signature valid: True +``` + +Si la signature échoue à la validation, la console affichera `Signature valid: False`. + +## Questions fréquentes et dépannage + +| Question | Réponse | +|----------|--------| +| **Et si le PDF utilise un algorithme de hachage différent ?** | Modifiez `HashAlgorithm` dans `SignatureValidationOptions` pour correspondre, par ex., `HashAlgorithm.SHA256`. | +| **Comment valider toutes les signatures dans un PDF multi‑signatures ?** | Parcourez `document.Signatures` et appelez `Validate` pour chaque entrée. | +| **Puis‑je vérifier la chaîne de confiance du certificat de signature ?** | Définissez `validationOptions.CheckCertificateRevocation = true` et, éventuellement, fournissez un `CertificateStore` personnalisé pour inclure les certificats racine de confiance. | +| **Et si je dois prendre en charge la validation de l’horodatage ?** | Activez `validationOptions.CheckTimestamp = true`. Aspose.PDF vérifiera alors le jeton d’horodatage intégré. | +| **Existe‑t‑il un moyen d’obtenir des erreurs de validation détaillées ?** | Utilisez `ValidateEx(validationOptions, out ValidationResult result)` ; `result` contient `ErrorMessage` et `ErrorCode` pour chaque échec. | + +## Prochaines étapes + +* Explorez **validate pdf signature** pour plusieurs signatures en itérant sur `document.Signatures`. +* Combinez ce tutoriel avec **check pdf signature** dans une API web pour fournir une vérification en temps réel des contrats téléchargés. +* Approfondissez les **signature validation options** comme les vérifications CRL/OCSP, la validation d’horodatage et les magasins de confiance personnalisés. + +Vous disposez maintenant d’un **tutoriel de signature PDF** complet qui montre comment **valider la signature numérique PDF** à l’aide d’Aspose.PDF en C#. N’hésitez pas à adapter le code à votre propre flux de travail, ajouter des journaux, ou l’intégrer à des pipelines de traitement de documents plus vastes. 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. + +- [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/) +- [Tutoriel de signature numérique Aspose Pdf Net](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/french/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..399ec59d07 --- /dev/null +++ b/pdf/french/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: Vérifier la signature PDF en C# avec Aspose.PDF. Apprenez à valider la + signature numérique d’un PDF et à lister les signatures PDF en quelques lignes de + code. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: fr +lastmod: 2026-08-08 +og_description: Vérifier la signature PDF en C# avec Aspose.PDF. Ce guide vous montre + comment valider la signature numérique d’un PDF, lister les signatures PDF et gérer + efficacement les signatures compromises. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Vérifier la signature PDF en C# – tutoriel rapide Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Vérifier la signature PDF en C# avec Aspose.PDF – guide complet +url: /fr/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vérifier la signature PDF en C# avec Aspose.PDF – guide complet + +Si vous devez **vérifier la signature PDF** dans une application .NET, ce guide vous montre une méthode concise pour le faire avec Aspose.PDF. Vous apprendrez comment **valider la signature numérique PDF**, **lister les signatures PDF**, et détecter les signatures compromises en quelques lignes de code. + +Le tutoriel couvre tout, de l'installation de la bibliothèque à la gestion des cas limites tels que les documents non signés ou les PDF chiffrés. À la fin, vous pourrez intégrer la vérification de signature dans n'importe quel projet C#, garantissant l'authenticité des fichiers PDF entrants. + +**Prerequisites** + +- .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework 4.6+). +- Familiarité de base avec C# et Visual Studio (ou tout IDE de votre choix). +- Une licence Aspose.PDF pour .NET (l'essai gratuit fonctionne pour l'évaluation). + +Si vous remplissez ces exigences, vous êtes prêt à commencer à vérifier les signatures PDF. + +## Vérifier la signature PDF – configurer le projet + +1. **Ajouter le package NuGet Aspose.PDF** + Ouvrez la console du gestionnaire de packages et exécutez : + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importer les espaces de noms requis** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## Charger le document PDF + +La première étape fonctionnelle consiste à ouvrir le PDF que vous souhaitez inspecter. Aspose.PDF lit le fichier en mémoire, vous permettant d'interroger ses signatures. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Pourquoi c'est important** – Charger le document à l'intérieur d'un bloc `using` garantit que le handle du fichier est libéré rapidement, évitant les problèmes de verrouillage de fichier dans les services de longue durée. + +## Lister les signatures PDF + +Avant de valider une signature, vous pourriez vouloir connaître le nombre de signatures présentes. Cette étape montre la capacité de **lister les signatures PDF**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explication** + +- `document.Signatures` renvoie une collection d'objets `Signature`. +- `Count` indique combien de signatures existent. +- Chaque `Signature` expose des métadonnées telles que `Id`, `SignatureType` et `Reason`, qui peuvent être utiles pour les journaux d'audit. + +**Cas limite** – Si le PDF n'a aucune signature, `Count` sera `0` et la boucle ne s'exécutera pas. Vous pouvez gérer ce scénario de manière élégante : + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Valider la signature numérique PDF – détecter les signatures compromises + +Maintenant que vous pouvez énumérer les signatures, la tâche principale est de **vérifier l'intégrité de la signature PDF**. Aspose.PDF fournit la propriété `IsCompromised`, qui renvoie `true` lorsque le hachage cryptographique de la signature ne correspond plus au contenu du document. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Pourquoi cela fonctionne** + +- `Signature.IsCompromised` effectue une validation cryptographique complète en utilisant la chaîne de certificats intégrée. +- L'opérateur LINQ `Any` s'arrête à la première signature compromise, rendant la vérification efficace même pour les documents contenant de nombreuses signatures. + +### Gérer les multiples signatures individuellement + +Si vous devez savoir quelle signature spécifique a échoué, itérez au lieu d'utiliser `Any` : + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Astuce pro :** Stockez le résultat de la validation avec `sig.Id` dans une base de données pour une analyse forensique ultérieure. + +## Afficher les résultats et considérer les cas limites + +Voici un programme complet et exécutable qui combine les étapes ci‑dessus. Il charge un PDF, liste toutes les signatures, les valide, et affiche un résultat clair. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Pièges courants et comment les éviter + +| Pitfall | Solution | +|---------|----------| +| The PDF is password‑protected. | Passez le mot de passe via `document.Encrypt.Decrypt(password)` avant d'accéder aux `Signatures`. | +| No Aspose.PDF license is set. | Utilisez `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` pour éviter les filigranes d'évaluation. | +| Large PDFs cause high memory usage. | Traitez le fichier en mode flux (`Document.Load(stream)`) au lieu de charger le fichier entier d'un coup. | + +## Conclusion + +Vous savez maintenant comment **vérifier la signature PDF** en C# avec Aspose.PDF, comment **valider la signature numérique PDF**, et comment **lister les signatures PDF** à des fins de reporting ou d'audit. L'exemple complet montre le chargement d'un document, l'énumération de ses signatures, la vérification de chaque signature pour détecter une compromission, et la gestion des cas limites typiques. + +Next steps you might explore: + +- **Valider les jetons d'horodatage** pour s'assurer qu'une signature a été créée avant l'expiration d'un certificat. +- **Extraire les certificats du signataire** (`sig.Certificate`) pour une validation personnalisée du magasin de confiance. +- **Intégrer avec ASP.NET Core** pour rejeter automatiquement les PDF téléchargés qui échouent la vérification. + +N'hésitez pas à expérimenter avec plusieurs signatures, une logique de validation personnalisée, ou des bibliothèques PDF alternatives. Si vous avez trouvé ce guide utile, partagez-le avec vos collègues ou ajoutez vos propres astuces dans les commentaires. + +## 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. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/french/net/text-operations/_index.md index 12a1c283f3..e206a9a97c 100644 --- a/pdf/french/net/text-operations/_index.md +++ b/pdf/french/net/text-operations/_index.md @@ -113,7 +113,7 @@ Apprenez à modifier efficacement du texte PDF avec Aspose.PDF pour .NET. Ce gui ### [Maîtriser la substitution de polices dans les PDF avec Aspose.PDF pour .NET : un guide complet](./mastering-font-substitution-aspose-pdf-net/) Apprenez à gérer facilement les substitutions de polices dans vos documents PDF avec Aspose.PDF pour .NET. Ce tutoriel vous guide étape par étape pour configurer et mettre en œuvre des solutions efficaces. -### [Maîtrisez les techniques d'extraction PDF avec Aspose.PDF pour .NET : un guide complet](./mastering-pdf-extraction-aspose-dotnet/) +### [Maîtriser les techniques d'extraction PDF avec Aspose.PDF pour .NET : un guide complet](./mastering-pdf-extraction-aspose-dotnet/) Apprenez à extraire efficacement du texte et des images de vos PDF avec Aspose.PDF pour .NET. Suivez ce guide étape par étape pour optimiser vos flux de traitement de documents. ### [Maîtriser la gestion des polices PDF : définir les polices par défaut dans les documents avec Aspose.PDF pour .NET](./master-pdf-font-management-aspose-pdf-net/) @@ -125,7 +125,7 @@ Apprenez à optimiser l'interligne dans vos PDF grâce aux polices TrueType avec ### [Maîtriser l'extraction de texte PDF dans .NET avec Aspose.PDF : un guide complet](./mastering-pdf-text-extraction-dotnet-asposepdf/) Apprenez à extraire et rechercher efficacement du texte dans des PDF avec Aspose.PDF pour .NET. Suivez ce guide pour des étapes de mise en œuvre pratiques. -### [Maîtrisez l'extraction de texte PDF avec Aspose.PDF pour .NET : un guide complet](./mastering-pdf-extraction-aspose-pdf-net-guide/) +### [Maîtriser l'extraction de texte PDF avec Aspose.PDF pour .NET : un guide complet](./mastering-pdf-extraction-aspose-pdf-net-guide/) Apprenez à extraire efficacement du texte de PDF avec Aspose.PDF pour .NET, même avec des mises en page complexes. Ce guide couvre le chargement, l'analyse et l'optimisation des processus d'extraction. ### [Maîtriser l'extraction de texte PDF avec Aspose.PDF pour .NET : Guide du développeur](./aspose-pdf-net-text-extraction-guide/) @@ -137,7 +137,7 @@ Apprenez à ajouter et à mettre en forme du texte dans vos PDF avec Aspose.PDF ### [Maîtriser la manipulation de texte PDF : faire pivoter et personnaliser le texte dans les PDF avec Aspose.PDF pour .NET](./aspose-pdf-net-create-rotate-text-pdfs/) Découvrez comment faire pivoter et personnaliser efficacement le texte de vos documents PDF avec Aspose.PDF pour .NET. Ce guide couvre la configuration, la mise en œuvre et les fonctionnalités avancées. -### [Maîtrisez la recherche de texte PDF avec Regex avec Aspose.PDF .NET](./aspose-pdf-net-regex-text-search/) +### [Maîtriser la recherche de texte PDF avec Regex avec Aspose.PDF .NET](./aspose-pdf-net-regex-text-search/) Un tutoriel de code pour Aspose.PDF Net ### [Maîtriser la rotation de texte dans les PDF avec Aspose.PDF pour .NET : guide complet](./rotate-text-pdf-aspose-dotnet/) @@ -162,7 +162,9 @@ Apprenez à optimiser les polices PDF à l'aide d'Aspose.PDF .NET, rationalisez Un tutoriel de code pour Aspose.PDF Net ### [Styliser le texte dans les PDF balisés avec Aspose.PDF pour .NET | Guide pour la création de PDF accessibles et esthétiques](./style-text-tagged-pdfs-aspose-pdf-net/) -Apprenez à styliser le texte des documents PDF balisés avec Aspose.PDF pour .NET. Ce guide présente l'installation, les techniques et les applications pratiques pour améliorer l'accessibilité. + +### [Comment résumer un PDF avec Aspose.Pdf.AI – guide](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Apprenez à résumer automatiquement le contenu d'un PDF en utilisant Aspose.Pdf.AI avec un guide étape par étape en C#. ## Ressources supplémentaires diff --git a/pdf/french/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/french/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..c08dfe34df --- /dev/null +++ b/pdf/french/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Comment résumer un PDF avec Aspose.Pdf.AI – apprenez à résumer un PDF + avec l'IA, à générer un résumé de PDF et à enregistrer le résumé au format PDF. + Code complet et meilleures pratiques. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: fr +lastmod: 2026-08-08 +og_description: Comment résumer un PDF avec Aspose.Pdf.AI. Ce tutoriel vous montre + comment résumer un PDF avec l'IA, générer un résumé de PDF et enregistrer le résumé + au format PDF en quelques lignes de C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Comment résumer un PDF avec Aspose.Pdf.AI – guide étape par étape +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Comment résumer un PDF avec Aspose.Pdf.AI – guide +url: /fr/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment résumer un PDF avec Aspose.Pdf.AI – guide + +Si vous avez besoin de **how to summarize PDF** rapidement et de manière fiable, vous pouvez laisser un modèle d'IA faire le gros du travail. Ce tutoriel vous montre exactement comment résumer un PDF avec l'IA, générer un résumé PDF, et enregistrer le résumé en PDF en utilisant le SDK Aspose.Pdf.AI pour .NET. Vous obtiendrez un exemple complet et exécutable ainsi qu'une explication de chaque ligne afin de pouvoir adapter la solution à vos propres projets. + +Le guide couvre : + +* Préparer le dossier source et la clé API +* Créer un `OpenAIClient` qui communique avec le modèle +* Configurer les options de résumé telles que la température et le chemin du document +* Construire un `SummaryCopilot` et récupérer le texte du résumé de façon asynchrone +* Enregistrer le résumé généré dans un fichier PDF + +Aucun service externe au-delà du point de terminaison OpenAI n'est requis, et le code fonctionne avec .NET 6+ et Aspose.Pdf.AI 23.7 (ou version ultérieure). + +## Prérequis + +* **.NET 6 SDK** (ou toute version .NET plus récente) +* **Aspose.Pdf.AI for .NET** – installer via NuGet : `dotnet add package Aspose.Pdf.AI` +* Une **clé API OpenAI** avec accès au modèle que vous souhaitez utiliser (par ex., `gpt‑4o`) +* Un fichier PDF que vous voulez résumer (l'exemple utilise `SampleDocument.pdf`) + +Assurez‑vous que le dossier que vous indiquez dans `dataDirectory` existe et que l'application possède les permissions de lecture/écriture. + +## Étape 1 : Configurer la structure du projet + +Créez un projet console (ou intégrez le code dans n'importe quelle application .NET existante). Le `Program.cs` minimal ressemble à ceci : + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Pourquoi cette structure est importante + +* **`await using`** libère automatiquement le `OpenAIClient`, fermant les connexions HTTP. +* **`Path.Combine`** construit des chemins indépendants du système d'exploitation, évitant les bugs sous Windows vs. Linux. +* **Temperature** contrôle la créativité ; `0.5` donne un résumé équilibré et factuel. +* **`GetSummaryAsync`** renvoie du texte brut, tandis que `SaveSummaryAsync` crée un PDF correct qui préserve les polices et la mise en page. + +## Étape 2 : Comprendre les options de résumé + +La classe `OpenAISummaryCopilotOptions` vous permet d'affiner le processus de synthèse : + +| Option | Objectif | Valeurs typiques | +|--------|----------|------------------| +| `WithTemperature(double)` | Contrôle l’aléatoire. `0.0` = déterministe, `1.0` = très créatif. | `0.3‑0.7` pour les documents d’entreprise | +| `WithDocument(string)` | Chemin vers le PDF source. Doit être un fichier lisible. | Tout chemin absolu ou relatif | +| `WithPrompt(string)` *(optional)* | Invite personnalisée pour guider le modèle. | “Summarize the key findings in 150 words.” | + +Si vous avez des **large PDFs** (plus de 10 Mo ou de nombreuses pages), envisagez de diviser le document en morceaux plus petits avant le résumé afin d'éviter les erreurs de limite de jetons. Le SDK ne découpe pas automatiquement ; vous pouvez utiliser `PdfDocument` de `Aspose.Pdf` pour extraire des pages et les fournir une par une. + +## Étape 3 : Exécuter le code et vérifier le résultat + +1. Placez `SampleDocument.pdf` dans le dossier `Data` que vous avez référencé. +2. Remplacez `"YOUR_API_KEY"` par votre vraie clé OpenAI. +3. Exécutez `dotnet run`. + +Vous devriez voir deux sections dans la console : + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Ouvrez `Summary_out.pdf` avec n'importe quel lecteur PDF — il contiendra le même texte de résumé, formaté avec une police par défaut. Le PDF est entièrement recherchable car le SDK intègre le texte comme une page PDF standard. + +## Étape 4 : Variantes courantes et gestion des cas limites + +### Résumer uniquement une partie du document + +Si vous devez **summarize pdf with ai** pour un chapitre spécifique, extrayez d'abord cette plage : + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Puis pointez `WithDocument` vers `Chapter5.pdf`. + +### Ajuster la longueur du résumé + +Vous pouvez influencer la longueur en ajoutant une invite personnalisée : + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Gestion des erreurs d'API + +Des problèmes de réseau ou des limites de quota déclenchent `Aspose.Pdf.AI.Exceptions.AIException`. Enveloppez l'appel dans un bloc `try / catch` : + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Enregistrer le résumé avec une mise en page personnalisée + +`SaveSummaryAsync` écrit du texte brut. Pour styliser le PDF (ajouter un titre, un en‑tête ou une marque), créez un nouveau `PdfDocument` et insérez le résumé manuellement : + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Étape 5 : Conseils de performance et bonnes pratiques + +* **Réutilisez le `OpenAIClient`** pour plusieurs résumés dans le même processus — créer un client est peu coûteux, mais réutiliser le `HttpClient` sous‑jacent réduit l'épuisement des sockets. +* **Mettez en cache le résumé** si le PDF source ne change pas ; vous pouvez stocker le texte dans une base de données et éviter l'appel API. + +## 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 supplémentaires de l'API et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/conversion-export/_index.md b/pdf/german/net/conversion-export/_index.md index 49638de0c8..75cc43967f 100644 --- a/pdf/german/net/conversion-export/_index.md +++ b/pdf/german/net/conversion-export/_index.md @@ -83,6 +83,8 @@ Erfahren Sie, wie Sie mit Aspose.PDF für .NET PDF-Dokumente in das HTML-Format ### [Konvertieren Sie PDF in PNG mit Aspose.PDF .NET: Verbessern Sie die Schriftarthinweise für eine scharfe Textwiedergabe](./convert-pdf-png-aspose-net-font-hinting/) Erfahren Sie, wie Sie mit Aspose.PDF .NET PDF-Dokumente in hochwertige PNG-Bilder konvertieren und durch Font-Hinting eine scharfe Textdarstellung gewährleisten. +### [PDF als HTML speichern mit Aspose.PDF – Schritt‑für‑Schritt‑Anleitung](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + ### [Konvertieren Sie PDF in PPTX mit Aspose.PDF für .NET: Schritt-für-Schritt-Anleitung](./convert-pdf-to-pptx-aspose-dotnet-guide/) Erfahren Sie, wie Sie PDF-Dokumente mit Aspose.PDF für .NET effizient in PowerPoint-Präsentationen konvertieren. Diese Schritt-für-Schritt-Anleitung behandelt die grundlegende Konvertierung, erweiterte Funktionen wie Bildfolien und die Fortschrittsverfolgung. diff --git a/pdf/german/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/german/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..e74d4ed973 --- /dev/null +++ b/pdf/german/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-08 +description: PDF als HTML mit Aspose.PDF in C# speichern. Erfahren Sie, wie Sie PDF + in HTML konvertieren, Rasterbilder überspringen und gängige Sonderfälle behandeln. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: de +lastmod: 2026-08-08 +og_description: Speichern Sie PDF als HTML mit Aspose.PDF. Dieser Leitfaden zeigt + Ihnen, wie Sie PDF in HTML konvertieren, Rasterbilder überspringen und häufige Fallstricke + vermeiden. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: PDF als HTML speichern mit Aspose.PDF – vollständiges C#‑Tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: PDF als HTML mit Aspose.PDF speichern – Schritt‑für‑Schritt‑Anleitung +url: /de/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF als HTML speichern mit Aspose.PDF – Schritt‑für‑Schritt‑Anleitung + +Wenn Sie **PDF als HTML** schnell speichern müssen, zeigt Ihnen dieses Tutorial genau, wie Sie das mit Aspose.PDF für .NET machen. Egal, ob Sie eine Dokument‑Viewer-Web‑App erstellen oder Berichte für SEO‑freundliche Indizierung exportieren, Sie sehen eine vollständige, ausführbare Lösung, die PDF nach HTML konvertiert und Ihnen eine feinkörnige Kontrolle über Rasterbilder gibt. + +Zusätzlich zur Hauptaufgabe behandeln wir die **aspose pdf html conversion**‑Optionen, die es Ihnen ermöglichen, Rasterbilder zu überspringen, die CSS‑Verarbeitung anzupassen und große Dokumente effizient zu verwalten. Am Ende dieses Leitfadens haben Sie ein eigenständiges Programm, das Sie in jedes .NET‑Projekt einbinden können. + +## Voraussetzungen + +* .NET 6.0 SDK oder höher (der Code funktioniert auch mit .NET Core und .NET Framework) +* Visual Studio 2022 oder jede IDE, die C# unterstützt +* Eine Aspose.PDF für .NET Lizenz (die kostenlose Testversion funktioniert für Evaluierung) +* Eine PDF‑Datei namens `report.pdf`, die in einem Ordner liegt, den Sie im Code referenzieren können + +Keine zusätzlichen NuGet‑Pakete sind über `Aspose.Pdf` hinaus erforderlich. + +## Schritt 1: Installieren Sie das Aspose.PDF NuGet‑Paket + +Öffnen Sie das Terminal in Ihrem Projektordner und führen Sie aus: + +```bash +dotnet add package Aspose.Pdf +``` + +Das Paket fügt den Namespace `Aspose.Pdf` hinzu, der die Klasse `Document` und den Typ `HtmlSaveOptions` enthält, die für **convert pdf to html**‑Operationen verwendet werden. + +## Schritt 2: Erstellen Sie ein Konsolenprojekt und fügen Sie using‑Direktiven hinzu + +Erstellen Sie eine neue Konsolenanwendung, falls Sie noch keine haben: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Öffnen Sie dann `Program.cs` und fügen Sie die erforderlichen Namespaces hinzu: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Diese Direktiven geben Ihnen Zugriff auf die Kern‑PDF‑API und die HTML‑Speicheroptionen, die den **aspose convert pdf html**‑Prozess steuern. + +## Schritt 3: Laden Sie das PDF‑Dokument + +Die erste operative Zeile liest das Quell‑PDF in ein `Aspose.Pdf.Document`‑Objekt ein. Dieses Objekt repräsentiert die gesamte PDF‑Datei im Speicher und bietet Methoden zum Speichern, Bearbeiten und Extrahieren von Inhalten. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Warum das wichtig ist*: Das Laden des Dokuments nur einmal hält die Speicher‑Auslastung vorhersehbar, besonders bei großen PDFs. Wenn die Datei nicht gefunden wird, wirft Aspose eine `FileNotFoundException`, stellen Sie also sicher, dass der Pfad korrekt ist. + +## Schritt 4: Konfigurieren Sie die HTML‑Speicheroptionen + +`HtmlSaveOptions` ermöglicht Ihnen, die Konvertierung des PDFs fein abzustimmen. In diesem Tutorial überspringen wir Rasterbilder, um die Ausgabe leichtgewichtig zu halten, aber Sie können den Modus zu `EmbedAll` ändern, falls Sie sie benötigen. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Wichtige Punkte**: + +* `RasterImagesSavingMode.Skip` weist Aspose an, Bitmap‑Bilder (JPEG, PNG) während der Konvertierung zu ignorieren. Dies ist ideal, wenn das Quell‑PDF gescannte Seiten enthält, die Sie in der HTML‑Ansicht nicht benötigen. +* Sie können zu `EmbedAll` oder `External` wechseln, wenn Sie Bilder als separate Dateien speichern möchten. +* Die Eigenschaft `ResourcesFolder` wird nur relevant, wenn Bilder extern gespeichert werden. + +## Schritt 5: Speichern Sie das Dokument als HTML + +Jetzt schreiben Sie die HTML‑Datei mit den konfigurierten Optionen auf die Festplatte. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Nachdem dieser Aufruf abgeschlossen ist, enthält `report.html` den Textinhalt, Vektorgrafiken und das Layout des ursprünglichen PDFs, jedoch ohne Rasterbilder. Sie können die Datei in einem Browser öffnen, um das Ergebnis zu überprüfen. + +## Erwartete Ausgabe + +Wenn Sie `report.html` in Chrome oder Edge öffnen, sollten Sie sehen: + +* Alle Überschriften, Absätze und Vektorformen werden korrekt dargestellt. +* Keine ``‑Tags für Rasterbilder (sie werden aufgrund des `Skip`‑Modus weggelassen). +* Sauberes, minimales CSS entweder inline oder in einer separaten Stylesheet‑Datei, je nach gewählter Option. + +Falls Sie bestätigen möchten, dass Bilder weggelassen wurden, prüfen Sie den Seitenquelltext (`Ctrl+U`). Sie werden keine ``‑Einträge finden. + +## Schritt 6: Umgang mit gängigen Sonderfällen + +### 6.1 Große PDFs (> 100 MB) + +Für sehr große Dateien aktivieren Sie Streaming, um den Speicherverbrauch zu reduzieren: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming schreibt HTML‑Abschnitte direkt auf die Festplatte und verhindert, dass das gesamte Dokument im Speicher gehalten wird. + +### 6.2 Passwortgeschützte PDFs + +Wenn das Quell‑PDF verschlüsselt ist, geben Sie das Passwort vor dem Speichern an: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Der Versuch, ohne Entschlüsselung zu speichern, löst eine `InvalidPasswordException` aus. + +### 6.3 Unicode‑Zeichen + +Aspose.PDF bettet Unicode‑Schriften automatisch ein, aber Sie können eine bestimmte Schriftart erzwingen, um ein konsistentes Rendering zu gewährleisten: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Benutzerdefinierte Dateinamen für mehrere Seiten + +Wenn Sie jede PDF‑Seite als separate HTML‑Datei haben möchten, setzen Sie: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Dies erzeugt `report_page_1.html`, `report_page_2.html` usw., was für die Paginierung in Web‑Anwendungen nützlich sein kann. + +## Vollständiges, ausführbares Beispiel + +Unten finden Sie das vollständige Programm, das alle besprochenen Schritte integriert. Kopieren Sie es in `Program.cs`, passen Sie die Pfade an und führen Sie `dotnet run` aus. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verifizierung**: Nach dem Ausführen gibt die Konsole die Erfolgsmeldung aus. Öffnen Sie die erzeugte HTML‑Datei in einem Browser, um zu bestätigen, dass Text und Vektorgrafiken korrekt angezeigt werden und Rasterbilder weggelassen wurden. + +## Profi‑Tipps und Fallstricke + +* **Pro‑Tipp**: Wenn Sie später die Rasterbilder benötigen, ändern Sie `RasterImagesSavingMode` zu `External` und setzen Sie `ResourcesFolder`. Dadurch wird ein Unterordner `images` mit den extrahierten Bitmaps erstellt. +* **Achten Sie auf**: Die Verwendung des Standard‑`Skip`‑Modus bei PDFs, die stark auf gescannte Bilder angewiesen sind, führt zu leeren Bereichen dort, wo die Bilder sein sollten. Testen Sie immer mit einer repräsentativen Stichprobe Ihrer Dokumente. +* **Performance‑Tipp**: Die Wiederverwendung einer einzigen `HtmlSaveOptions`‑Instanz für mehrere Dokumente reduziert den Overhead bei der Objekterstellung bei Batch‑Konvertierungen. +* **Versions‑Check**: Die gezeigte API funktioniert mit Aspose.PDF für .NET Version 23.9 und später. Frühere Versionen können `HtmlSaveOptions.RasterImagesSavingMode` mit einem leicht anderen Enum‑Namen verwenden. + +## Fazit + +Sie wissen jetzt, wie Sie **PDF als HTML** mit Aspose.PDF speichern, wie Sie die Handhabung von Rasterbildern steuern und wie Sie typische Herausforderungen wie große Dateien, Passwortschutz und HTML‑Ausgabe pro Seite bewältigen. Diese vollständige Lösung ermöglicht es Ihnen, die PDF‑zu‑HTML‑Konvertierung mit Zuversicht in jede C#‑Anwendung zu integrieren. + +### Was kommt als Nächstes? + +* Erkunden Sie **aspose pdf html conversion** zum Einbetten von Schriften und Anpassen von CSS. +* Kombinieren Sie diese Konvertierung mit einer Web‑API, um HTML bei Bedarf bereitzustellen. +* Probieren Sie die Gegenrichtung – **convert pdf to html** und dann zurück zu PDF – um die Rundreise‑Genauigkeit zu validieren. + +Experimentieren Sie gerne mit den Optionen und teilen Sie Ihre Ergebnisse in den Kommentaren oder im Aspose‑Forum. Viel Spaß beim Programmieren! + +## 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. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/german/net/digital-signatures/_index.md index 951813a4f2..f386ff826f 100644 --- a/pdf/german/net/digital-signatures/_index.md +++ b/pdf/german/net/digital-signatures/_index.md @@ -58,11 +58,9 @@ Erfahren Sie, wie Sie mit Aspose.PDF für .NET PDF-Signaturen in C# überprüfen ### [So überprüfen Sie PDF – PDF-Signatur mit Aspose validieren](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) Erfahren Sie, wie Sie mit Aspose PDF die Signatur einer PDF-Datei prüfen und validieren. -### [PDF-Dokument laden in C# – Konvertieren zu PDF/X‑4 und Signaturen auflisten](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) -Laden Sie ein PDF in C#, konvertieren Sie es zu PDF/X‑4 und listen Sie vorhandene Signaturen auf. -### [PDF-Signatur validieren mit Aspose – PDF in HTML konvertieren](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) -Erfahren Sie, wie Sie PDF‑Signaturen mit Aspose validieren und das PDF anschließend in HTML konvertieren. +### [So validieren Sie PDF mit Aspose.PDF – prüfen Sie die PDF‑Signaturgültigkeit in C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Erfahren Sie, wie Sie mit Aspose.PDF in C# die Gültigkeit einer PDF‑Signatur prüfen. ## Weitere Ressourcen diff --git a/pdf/german/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/german/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..d8966dffd1 --- /dev/null +++ b/pdf/german/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-08-08 +description: Wie man PDF mit Aspose.PDF validiert und die digitale PDF‑Signatur prüft. + Folgen Sie dieser Schritt‑für‑Schritt‑Anleitung, um die PDF‑Signatur schnell zu + überprüfen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: de +lastmod: 2026-08-08 +og_description: Wie man PDFs mit Aspose.PDF validiert. Lernen Sie, digitale PDF‑Signaturen + zu validieren und die Gültigkeit von PDF‑Signaturen in wenigen Zeilen C#‑Code zu + prüfen. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Wie man PDFs validiert – PDF‑Signaturgültigkeit mit Aspose.PDF in C# prüfen +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Wie man PDF mit Aspose.PDF validiert – PDF‑Signaturgültigkeit in C# prüfen +url: /de/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man PDF mit Aspose.PDF validiert – PDF-Signaturgültigkeit in C# prüfen + +Wenn Sie **wie man PDF validiert** Dateien, die digitale Signaturen enthalten, validieren müssen, zeigt Ihnen dieses Tutorial eine vollständige Lösung. Sie lernen, ein PDF zu laden, einen Zertifikatsvalidator zu erstellen und die PDF‑Signaturgültigkeit mit Aspose.PDF für .NET zu prüfen. + +Die Validierung einer digitalen PDF‑Signatur ist eine gängige Anforderung für Compliance, Rechnungsstellung und sicheren Dokumentenaustausch. Am Ende dieses Leitfadens können Sie sicher überprüfen, ob ein signiertes PDF vertrauenswürdig ist, und Sie verstehen, wie typische Randfälle wie fehlende Zertifikate oder mehrere Signaturen zu handhaben sind. + +## Voraussetzungen + +- .NET 6.0 oder neuer installiert +- Eine IDE wie Visual Studio 2022 (jeder Editor, der C# unterstützt, funktioniert) +- Eine lizenzierte Kopie von **Aspose.PDF for .NET** (die kostenlose Testversion funktioniert für Evaluierungen) +- Eine signierte PDF‑Datei (`signed.pdf`) und, falls die Signatur auf einer privaten CA basiert, das entsprechende vertrauenswürdige Zertifikat (`trustedCertificate.pfx`) + +Es sind keine zusätzlichen NuGet‑Pakete über `Aspose.PDF` hinaus erforderlich. + +## Schritt 1: Aspose.PDF installieren + +Öffnen Sie ein Terminal in Ihrem Projektordner und führen Sie aus: + +```bash +dotnet add package Aspose.PDF +``` + +Der Befehl fügt die neueste Aspose.PDF‑Bibliothek hinzu, die die Klassen `Document` und `CertificateValidator` enthält, die später verwendet werden. + +## Schritt 2: PDF-Dokument laden + +Das Laden eines PDFs ist der erste Vorgang, den Sie ausführen, wenn Sie **wie man PDF lädt** programmgesteuert. Der `Document`‑Konstruktor akzeptiert einen Dateipfad, einen Stream oder ein Byte‑Array. Die Verwendung eines vollständigen Pfads hält das Beispiel übersichtlich. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Warum das wichtig ist:** Das `Document`‑Objekt repräsentiert die gesamte PDF‑Datei im Speicher. Ohne das Laden der Datei können Sie nicht auf die `Signatures`‑Sammlung zugreifen, die zum **prüfen der PDF‑Signatur**‑Daten erforderlich ist. + +## Schritt 3: Zertifikatsvalidator vorbereiten + +Eine digitale Signatur ist nur dann vertrauenswürdig, wenn das signierende Zertifikat zu einer Wurzelzertifizierungsstelle verknüpft ist, der Sie vertrauen. `CertificateValidator` ermöglicht es Ihnen, Aspose.PDF auf einen vertrauenswürdigen Zertifikatspeicher oder eine bestimmte PFX‑Datei zu verweisen. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Verwendet Ihr PDF eine öffentliche CA, die Windows bereits vertraut, können Sie `certPath` weglassen und `CertificateValidator` mit seinem Standardkonstruktor instanziieren. Das Bereitstellen einer benutzerdefinierten PFX ist in internen PKI‑Umgebungen nützlich. + +## Schritt 4: Erste digitale Signatur validieren + +Ein PDF kann mehrere Signaturen enthalten. Der Einfachheit halber validiert dieses Tutorial die erste Signatur (`Signatures[0]`). Die Methode `Validate` gibt `true` zurück, wenn die Signatur kryptografisch intakt **und** das signierende Zertifikat vertrauenswürdig ist. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Was im Hintergrund geschieht:** +- Die Methode prüft den Hash des signierten Inhalts gegen den Signaturwert. +- Sie baut die Zertifikatskette mit dem bereitgestellten Validator auf. +- Der Widerrufsstatus (CRL/OCSP) wird ausgewertet, falls der Validator dafür konfiguriert ist. + +### Umgang mit mehreren Signaturen + +Enthält Ihr PDF mehr als eine Signatur, iterieren Sie über die `Signatures`‑Sammlung: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Dieses Muster ermöglicht es Ihnen, **PDF‑Signatur** auf jeder Seite zu prüfen und einzelne Ergebnisse zu melden. + +## Schritt 5: Validierungsergebnis ausgeben + +Schreiben Sie schließlich das Ergebnis in die Konsole. Im Produktionscode würden Sie das Ergebnis wahrscheinlich protokollieren oder bei einer ungültigen Signatur eine Ausnahme auslösen. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Erwartete Konsolenausgabe + +``` +Valid +``` + +oder + +``` +Invalid +``` + +Die Meldung spiegelt den von `Validate` zurückgegebenen booleschen Wert wider. Ein Ergebnis „Invalid“ kann auf ein manipuliertes Dokument, ein nicht vertrauenswürdiges Zertifikat oder ein abgelaufenes Signaturzertifikat hinweisen. + +## Schritt 6: Häufige Fallstricke und Best‑Practice‑Tipps + +### 1. Fehlendes vertrauenswürdiges Zertifikat +Erhalten Sie `Invalid` und wissen, dass die Signatur vertrauenswürdig sein sollte, prüfen Sie, ob das korrekte Root‑Zertifikat an `CertificateValidator` übergeben wurde. Verwenden Sie die Überladung, die eine `X509Certificate2Collection` für mehrere Wurzeln akzeptiert. + +### 2. Signatur mit externen Referenzen +Einige Signaturen decken externen Inhalt ab (z. B. eine angehängte Datei). Stellen Sie sicher, dass die externen Ressourcen zugänglich sind; andernfalls schlägt die Hash‑Verifizierung fehl. + +### 3. Zeitstempel‑Validierung +Eine Signatur kann ein Zeitstempel‑Token enthalten. Um dieses zu validieren, konfigurieren Sie den Validator so, dass er die Zertifikate der Zeitstempel‑Authority (TSA) prüft: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Leistung bei großen PDFs +Das Laden eines PDFs mit mehreren hundert Seiten kann viel Speicher verbrauchen. Wenn Sie nur Signaturdaten benötigen, verwenden Sie `PdfFileEditor`, um das Signatur‑Dictionary zu extrahieren, ohne Seiten zu rendern. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread‑Sicherheit +`Document`‑Instanzen sind nicht thread‑sicher. Erzeugen Sie für jeden Thread ein neues `Document`, wenn Sie viele PDFs parallel validieren. + +## Vollständiges, ausführbares Beispiel + +Unten finden Sie das komplette Programm, das Sie kopieren, einfügen und ausführen können, nachdem Sie die Dateipfade angepasst haben. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Running the program** prints a line for each signature, clearly indicating whether the PDF passes the **validate pdf digital signature** check. + +## Fazit + +Sie wissen jetzt **wie man PDF validiert** Dateien, die digitale Signaturen enthalten, mithilfe von Aspose.PDF für .NET. Das Tutorial behandelte das Laden eines PDFs, das Konfigurieren eines Zertifikatsvalidators, das Prüfen der PDF‑Signaturgültigkeit, den Umgang mit mehreren Signaturen und die Fehlersuche bei gängigen Problemen. + +Als Nächstes erkunden Sie verwandte Themen wie **wie man PDF signiert**, **wie man Zeitstempel‑Tokens hinzufügt** und **wie man signierten Inhalt extrahiert**. Diese Erweiterungen ermöglichen Ihnen den Aufbau eines vollständigen End‑to‑End‑Workflows für sichere Dokumente in C#. + +--- + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/german/net/document-conversion/_index.md index e48aee9966..2f5175a384 100644 --- a/pdf/german/net/document-conversion/_index.md +++ b/pdf/german/net/document-conversion/_index.md @@ -44,6 +44,7 @@ Sie lernen, wie Sie Konvertierungseinstellungen festlegen, Text und Bilder extra | [PDF zu XML](./pdf-to-xml/) | Erfahren Sie in diesem umfassenden Tutorial, wie Sie mit Aspose.PDF für .NET PDF in XML konvertieren. Schritt-für-Schritt-Anleitung mit Codebeispielen. | | [PDF zu XPS](./pdf-to-xps/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie PDF mit Aspose.PDF für .NET in XPS konvertieren. Perfekt für Entwickler und Dokumentenverarbeitungs-Enthusiasten. | | [PDF zu PDF/X‑4 in C# – Schritt‑für‑Schritt ASP.NET PDF‑Tutorial](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie PDF‑Dateien mit Aspose.PDF für .NET in das PDF/X‑4‑Format konvertieren. | +| [PDFX4-Konvertierungstutorial – PDF-Standard festlegen und PDF mit Aspose konvertieren](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET den PDF-Standard festlegen und PDFs konvertieren. | | [Postscript zu PDF](./postscript-to-pdf/) | Erfahren Sie in diesem Schritt-für-Schritt-Tutorial, wie Sie Postscript-Dateien mit Aspose.PDF für .NET in PDF konvertieren. Perfekt für Entwickler aller Erfahrungsstufen. | | [Geben Sie beim Konvertieren von HTML in PDF Anmeldeinformationen an](./provide-credentials-during-html-to-pdf/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie HTML mit Aspose.PDF für .NET in PDF konvertieren. Ideal für Entwickler, die die Dokumenterstellung optimieren möchten. | | [Entfernen Sie Hyperlinks nach der Konvertierung aus HTML](./remove-hyperlinks-after-converting-from-html/) Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie Hyperlinks aus HTML-Dokumenten entfernen, nachdem Sie sie mit Aspose.PDF für .NET in PDF konvertiert haben. | diff --git a/pdf/german/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/german/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..63c94dbe8b --- /dev/null +++ b/pdf/german/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4-Konvertierungstutorial, das zeigt, wie man den PDF-Standard auf + PDF/X‑4 setzt und PDFs mit Aspose für eine zuverlässige Formatkonvertierung konvertiert. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: de +lastmod: 2026-08-08 +og_description: Das pdfx4-Konvertierungstutorial erklärt, wie man den PDF-Standard + auf PDF/X‑4 setzt und eine zuverlässige PDF-Konvertierung mit Aspose in C# durchführt. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4-Konvertierungstutorial – PDF-Standard festlegen und PDF mit Aspose + konvertieren +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4-Konvertierungstutorial – PDF-Standard festlegen und PDF mit Aspose konvertieren +url: /de/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4-Konvertierungstutorial – PDF-Standard festlegen und PDF mit Aspose konvertieren + +Wenn Sie ein **pdfx4 conversion tutorial** benötigen, führt Sie dieser Leitfaden durch den gesamten Prozess, den PDF-Standard auf PDF/X‑4 zu setzen und ein PDF mit Aspose zu konvertieren. Egal, ob Sie druckfertige Dateien vorbereiten oder langfristige Archivierungs‑Compliance sicherstellen wollen, Sie lernen einen zuverlässigen **aspose pdf format conversion**‑Workflow kennen, der mit .NET 6 und höher funktioniert. + +Das Tutorial deckt alles ab, von der Projekt­einrichtung bis hin zum Umgang mit Sonderfällen wie fehlenden Quelldateien oder nicht unterstützten Funktionen. Am Ende des Artikels besitzen Sie ein eigenständiges C#‑Programm, das eine PDF/X‑4‑konforme Datei erzeugt, die für nachgelagerte Workflows bereitsteht. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben: + +- .NET 6 SDK oder neuer installiert ([download here](https://dotnet.microsoft.com/download)) +- Eine gültige Aspose.PDF for .NET Lizenz (die kostenlose Testversion reicht für Tests) +- Visual Studio 2022, VS Code oder eine beliebige IDE, die .NET‑Entwicklung unterstützt +- Eine Quell‑PDF‑Datei, die Sie konvertieren möchten (legen Sie sie in einem bekannten Ordner ab) + +Diese Voraussetzungen stellen sicher, dass der Code ohne zusätzliche Konfiguration läuft. + +## Schritt 1: Neues .NET‑Konsolenprojekt erstellen + +Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus, um eine Konsolen‑App namens `PdfX4Converter` zu erstellen: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Fügen Sie das Aspose.PDF‑NuGet‑Paket hinzu: + +```bash +dotnet add package Aspose.Pdf +``` + +Das `Aspose.Pdf`‑Paket stellt die `Document`‑Klasse und `PdfFormatConversionOptions` bereit, die für **convert pdf pdfx4**‑Operationen benötigt werden. + +## Schritt 2: Konvertierungscode schreiben + +Öffnen Sie `Program.cs` (oder `Program.cs`, wenn Sie die neuen Top‑Level‑Statements verwenden) und ersetzen Sie dessen Inhalt durch das vollständige Beispiel unten. Der Code demonstriert das **set pdf standard** auf PDF/X‑4, führt die Konvertierung aus und enthält Fehlerbehandlung für gängige Stolperfallen. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Warum jeder Teil wichtig ist + +- **Argumentvalidierung** verhindert, dass das Programm abstürzt, wenn der Benutzer einen Dateipfad vergisst. +- **`Document`‑Laden** wirft eine klare Ausnahme, wenn das Quell‑PDF fehlt oder beschädigt ist – das ist für ein robustes **convert pdf using aspose**‑Erlebnis unerlässlich. +- **`PdfFormatConversionOptions`** ist der Ort, an dem Sie **set pdf standard** festlegen. Durch die Zuweisung von `PdfStandard.PdfX4` passt Aspose automatisch Farbräume an, bettet erforderliche Schriften ein und schreibt die notwendigen PDF/X‑4‑Metadaten. +- **`FontEmbeddingMode.EmbedAll`** stellt sicher, dass jede im Quell‑PDF verwendete Schriftart eingebettet wird – eine häufige Anforderung für druckfertige PDFs. +- **`doc.Convert`** führt die eigentliche **aspose pdf format conversion** aus. Die Methode schreibt die neue Datei in einem Aufruf und vereinfacht so den Workflow. + +## Schritt 3: Konverter ausführen + +Bauen Sie das Projekt und führen Sie es mit den Quell‑ und Zielpfaden aus: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Wenn alles funktioniert, gibt die Konsole aus: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Sie können nun `output_pdfx4.pdf` in jedem PDF‑Betrachter öffnen, der PDF/X‑4 unterstützt (z. B. Adobe Acrobat Pro), und die Konformität über *Datei → Eigenschaften → Standards* prüfen. + +## Schritt 4: PDF/X‑4‑Konformität überprüfen (optional) + +Für Produktionspipelines möchten Sie die Ausgabe möglicherweise programmgesteuert validieren. Aspose stellt eine `PdfComplianceChecker`‑Klasse bereit (verfügbar im `Aspose.Pdf`‑Paket), die Sie wie folgt verwenden können: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Wenn Sie dieses Snippet nach der Konvertierung ausführen, erhalten Sie ein eindeutiges Bestehen/Nichtbestehen‑Ergebnis, das für automatisierte CI/CD‑Pipelines nützlich ist. + +## Schritt 5: Häufige Fallstricke und bewährte Tipps + +| Problem | Warum es passiert | Wie man es vermeidet | +|---------|-------------------|----------------------| +| Fehlende Schriften im Quell‑PDF | Schriften werden referenziert, aber nicht eingebettet, was zu Konvertierungswarnungen führt | Verwenden Sie `FontEmbeddingMode.EmbedAll` wie oben gezeigt | +| Quell‑PDF enthält transparente Objekte, die in PDF/X‑4 nicht erlaubt sind | PDF/X‑4 verbietet bestimmte Transparenz‑Mischungen | Vorverarbeiten Sie das PDF mit `doc.ProcessTransparentObjects()` vor der Konvertierung | +| Große Dateien verursachen OutOfMemoryException | Das gesamte Dokument wird in den Speicher geladen | Streamen Sie die Quelle mit `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Lizenz nicht angewendet | Testversion fügt Wasserzeichen hinzu | Rufen Sie `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` vor jeglicher Aspose‑API‑Nutzung auf | + +Durch die Anwendung dieser Tipps stellen Sie ein reibungsloses **convert pdf pdfx4**‑Erlebnis in Produktionsumgebungen sicher. + +## Schritt 6: Tutorial erweitern + +Sobald Sie das grundlegende **pdfx4 conversion tutorial** beherrschen, können Sie Folgendes erkunden: + +- **Batch‑Konvertierung**: Durchlaufen Sie einen Ordner mit PDFs und konvertieren Sie jedes in PDF/X‑4. +- **Metadaten‑Einfügung**: Fügen Sie XMP‑Metadaten hinzu, die von bestimmten Druckereien gefordert werden. +- **Farbprofil‑Verwaltung**: Binden Sie ICC‑Profile ein mit `doc.ColorSpace = ColorSpace.DeviceRGB;` vor der Konvertierung. + +All diese Erweiterungen bauen auf derselben **aspose pdf format conversion**‑Grundlage auf, die hier demonstriert wird. + +## Fazit + +Dieses **pdfx4 conversion tutorial** hat Ihnen gezeigt, wie Sie **set pdf standard** auf PDF/X‑4 festlegen, eine zuverlässige **convert pdf using Aspose**‑Konvertierung durchführen und das Ergebnis prüfen. Sie besitzen nun ein komplettes, ausführbares C#‑Programm, das in größere Dokumenten‑Verarbeitungspipelines integriert oder als eigenständiges Dienstprogramm verwendet werden kann. Experimentieren Sie mit Batch‑Verarbeitung, Metadaten‑Handling oder alternativen PDF‑Standards (PDF/A‑2b, PDF/UA), um Ihre Expertise in **aspose pdf format conversion** zu vertiefen. + +Viel Spaß beim Programmieren und genießen Sie das Vertrauen, das mit PDF/X‑4‑konformen Ausgaben einhergeht! + +## Was sollten Sie als Nächstes lernen? + + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/german/net/document-creation/_index.md b/pdf/german/net/document-creation/_index.md index 718edf31a5..d8bec79123 100644 --- a/pdf/german/net/document-creation/_index.md +++ b/pdf/german/net/document-creation/_index.md @@ -76,9 +76,13 @@ Ein Code-Tutorial für Aspose.PDF Net ### [PDF-Dokument mit Aspose.PDF erstellen – Seite hinzufügen, Form einfügen & speichern](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Erfahren Sie, wie Sie mit Aspose.PDF ein PDF-Dokument erstellen, Seiten und Formen hinzufügen und das Dokument speichern. + ### [PDF-Dokument mit Aspose.PDF erstellen – Schritt‑für‑Schritt‑Anleitung](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Erfahren Sie, wie Sie mit Aspose.PDF ein PDF-Dokument Schritt für Schritt erstellen. +### [Erstellen Sie ein PDF-Dokument in C# mit Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Ein Code‑Tutorial zum Erstellen eines PDF‑Dokuments in C# mit Aspose.PDF. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/german/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..c4052363ee --- /dev/null +++ b/pdf/german/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-08-08 +description: Erstelle ein PDF-Dokument in C# mit Aspose.Pdf. Erfahre, wie man eine + leere Seite zum PDF hinzufügt, einen Absatz zum PDF hinzufügt und Text im PDF mit + genauen Koordinaten positioniert. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: de +lastmod: 2026-08-08 +og_description: Erstellen Sie schnell ein PDF-Dokument in C#. Dieses Tutorial zeigt, + wie man eine leere PDF-Seite hinzufügt, einen Absatz zum PDF hinzufügt und Text + im PDF positioniert, wobei Aspose.Pdf verwendet wird. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: PDF-Dokument in C# mit Aspose.Pdf erstellen – vollständige Anleitung +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: PDF-Dokument in C# mit Aspose.Pdf erstellen +url: /de/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-Dokument in C# mit Aspose.Pdf erstellen + +Wenn Sie **PDF-Dokumente** programmgesteuert **erstellen** möchten, zeigt Ihnen diese Anleitung genau, wie das geht. Mit Aspose.Pdf für .NET können Sie eine leere PDF-Seite hinzufügen, einen Absatz in ein PDF einfügen und Text im PDF pixelgenau positionieren – alles in wenigen Zeilen C#‑Code. + +Am Ende des Tutorials besitzen Sie eine voll funktionsfähige PDF‑Datei, die eine Notiz an den von Ihnen angegebenen Koordinaten enthält. Keine externen Werkzeuge, keine manuelle Bearbeitung – nur sauberer, wiederholbarer Code, den Sie in jedes .NET‑Projekt einbinden können. + +## Was Sie lernen werden + +* Wie man **PDF-Dokumente** mit Aspose.Pdf **erstellt**. +* Der richtige Weg, **leere PDF-Seiten** hinzuzufügen und warum eine Seite existieren muss, bevor Inhalt eingefügt wird. +* Wie man **Absätze in ein PDF** einfügt und ein benutzerdefiniertes Tag anhängt (nützlich für spätere Extraktion oder Formatierung). +* Die Technik, **Text in einem PDF** mit der `Position`‑Klasse zu **positionieren**. +* Wie man das Ergebnis auf die Festplatte speichert und die Ausgabe überprüft. + +**Voraussetzungen** + +* .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.7+). +* Eine gültige Aspose.Pdf‑für‑.NET‑Lizenz oder ein kostenloser Evaluierungsschlüssel. +* Eine IDE wie Visual Studio 2022 oder VS Code mit der C#‑Erweiterung. + +> **Pro‑Tipp:** Wenn Sie die kostenlose Evaluation verwenden, enthält das erzeugte PDF ein kleines Wasserzeichen. Registrieren Sie eine Lizenz, um es zu entfernen. + +## Wie man ein PDF‑Dokument mit Aspose.Pdf erstellt + +Der erste Schritt besteht darin, die Klasse `Document` zu instanziieren. Dieses Objekt repräsentiert die gesamte PDF‑Datei und gibt Ihnen Zugriff auf Seiten, Ressourcen und Speicheroptionen. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Das Erstellen des Dokuments schreibt **noch nichts** auf die Festplatte; es erzeugt lediglich eine In‑Memory‑Repräsentation, die Sie manipulieren können. Dieser Ansatz hält die API schnell und speichereffizient. + +## Leere PDF‑Seite mit Aspose.Pdf hinzufügen + +Ein PDF muss mindestens eine Seite enthalten, bevor Sie Inhalt platzieren können. Das Hinzufügen einer leeren Seite erfolgt mit einem einzigen Methodenaufruf: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Die Methode `Add()` erzeugt eine Seite mit Standardgröße (A4) und Ausrichtung (Hochformat). Wenn Sie eine andere Größe benötigen, übergeben Sie ein `PageSize`‑Objekt an `Add()`. + +## Absatz zu PDF hinzufügen und eine Notiz setzen + +Jetzt, wo die Seite existiert, können Sie ein `Paragraph`‑Objekt erstellen, das den sichtbaren Text enthält. Der Absatz kann zudem ein benutzerdefiniertes Tag tragen, was praktisch ist, wenn Sie das Element später programmatisch finden oder formatieren wollen. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Warum ein Tag verwenden? + +Tags sind Metadaten, die mit dem PDF‑Element reisen. Sie können später mit `Document.FindObject()` abgefragt werden oder von nachgelagerten PDF‑Prozessoren genutzt werden, die Tags für Barrierefreiheit oder Indexierung benötigen. + +## Text in PDF mit genauen Koordinaten positionieren + +Die Standardposition eines Absatzes ist die obere linke Ecke des Seitenrandes. Um den Text an einer exakten Stelle zu platzieren, setzen Sie die `Position`‑Eigenschaft des Absatz‑Tags: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Koordinaten werden in Punkten gemessen (1 Punkt = 1/72 Zoll). Der Ursprung (0,0) liegt in der unteren linken Ecke der Seite, was den meisten PDF‑Renderern entspricht. Passen Sie die Werte `X` und `Y` an Ihre Layout‑Bedürfnisse an. + +Nach dem Positionieren fügen Sie den Absatz zur Seitensammlung hinzu: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## PDF‑Dokument speichern + +Zum Schluss schreiben Sie das In‑Memory‑PDF in eine Datei. Sie können den Ausgabepfad, das Format und sogar Verschlüsselungsoptionen angeben. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Wenn das Programm beendet ist, enthält `output.pdf` eine einzelne Seite mit dem Text **Important note**, der nahe der oberen rechten Ecke (X = 50, Y = 750) platziert ist. Öffnen Sie die Datei in einem beliebigen PDF‑Betrachter, um die Position zu prüfen. + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*Image alt text: Generated PDF document created with C# Aspose.Pdf showing positioned note* (includes primary keyword). + +## Vollständiges, ausführbares Beispiel + +Alle Bausteine zusammengefügt, hier ein komplettes Konsolen‑Anwendungsbeispiel, das Sie kopieren, bauen und ausführen können: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Erwartete Ausgabe** beim Ausführen des Programms: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Das Öffnen von `output.pdf` zeigt eine einzelne Seite mit dem Text **Important note**, der an den von Ihnen angegebenen Koordinaten positioniert ist. + +## Häufige Varianten und Sonderfälle + +| Szenario | Was zu ändern ist | Warum es wichtig ist | +|----------|-------------------|----------------------| +| **Andere Seitengröße** | `pdfDocument.Pages.Add(PageSize.A5)` | Kleinere Seiten reduzieren die Dateigröße und passen auf mobile Bildschirme. | +| **Mehrere Notizen** | Schleife über eine Sammlung von Zeichenketten und für jede einen `Paragraph` erstellen, dabei die `Y`‑Koordinate erhöhen. | Ermöglicht die Stapel‑Generierung von Aufzählungs‑Notizen. | +| **Unicode‑Zeichen** | Sicherstellen, dass die Quell‑Datei als UTF‑8 gespeichert ist und `noteParagraph.Text = "重要なメモ"` setzen | Aspose.Pdf unterstützt Unicode von Haus aus, aber die Dateicodierung muss passen. | +| **Passwortgeschütztes PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Fügt Sicherheit für vertrauliche Notizen hinzu. | +| **Hochauflösende Ausgabe** | `pdfDocument.PageInfo.Width` und `Height` vor dem Hinzufügen von Inhalt auf größere Werte setzen. | Nützlich für den Druck von großformatigen PDFs. | + +## Tipps für den Produktionseinsatz + +* **Die `Document`‑Instanz wiederverwenden**, wenn Sie viele PDFs in einer einzigen Anforderung erzeugen, um den GC‑Druck zu reduzieren. +* **Objekte freigeben** (`pdfDocument.Dispose()`), wenn Sie viele Dokumente in einer Schleife erzeugen. +* **Koordinaten validieren**: Der `Y`‑Wert darf die Seitenhöhe nicht überschreiten; sonst wird der Text abgeschnitten. +* **`TextFragmentAbsorber` verwenden**, um die Notiz später über ihr Tag (`/P`) zu extrahieren, falls Sie den Inhalt wieder auslesen müssen. + +## Fazit + +Sie wissen jetzt, wie man **PDF‑Dokumente** mit Aspose.Pdf **erstellt**, **leere PDF‑Seiten** hinzufügt, **Absätze in ein PDF** einfügt, **Notizen** einbaut und **Text in einem PDF** präzise positioniert. Das vollständige Beispiel demonstriert einen sauberen, wiederholbaren Workflow, den Sie für Rechnungen, Berichte oder jede Dokument‑Automatisierungssituation erweitern können. + +Als Nächstes können Sie verwandte Themen erkunden, etwa **Bilder zu PDF hinzufügen**, **Tabellen mit Aspose.Pdf erstellen** oder **digitale Signaturen anwenden**. All diese bauen auf denselben Kernkonzepten auf, sodass Sie bereit sind, anspruchsvollere PDF‑Generierungsaufgaben zu meistern. + +Viel Spaß beim Coden! + + +## Was Sie als Nächstes lernen sollten + + +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, damit Sie weitere API‑Funktionen meistern und alternative Implementierungsansätze in Ihren Projekten erkunden können. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/german/net/images-graphics/_index.md index a81c64547e..9a1c28319e 100644 --- a/pdf/german/net/images-graphics/_index.md +++ b/pdf/german/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Erfahren Sie, wie Sie optisch ansprechende PDF-Dokumente erstellen, indem Sie mi ### [Zeichnen Sie transparente Formen in PDFs mit Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Ein Code-Tutorial für Aspose.PDF Net +### [PDF-Deckkraft in C# mit Aspose.PDF festlegen – vollständige Anleitung](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Erfahren Sie, wie Sie mit Aspose.PDF für .NET die Deckkraft von PDF-Elementen in C# einstellen. + ### [Effiziente PDF-Bildidentifizierung mit Aspose.PDF für .NET](./master-image-identification-aspose-pdf-net/) Erfahren Sie, wie Sie Graustufen- und RGB-Bilder in PDFs mit Aspose.PDF für .NET identifizieren. Dieses Tutorial behandelt Installation, Bildextraktion und Performance-Tipps. diff --git a/pdf/german/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/german/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ce354fb602 --- /dev/null +++ b/pdf/german/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-08-08 +description: PDF-Transparenz in C# mit Aspose.PDF festlegen – erfahren Sie, wie Sie + Strich‑ und Fülltransparenz mit wenigen Codezeilen anpassen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: de +lastmod: 2026-08-08 +og_description: PDF-Deckkraft in C# schnell einstellen. Dieser Leitfaden zeigt, wie + Sie die Strich‑ und Fülltransparenz mithilfe der Graphics‑State‑API von Aspose.PDF + ändern. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: PDF‑Transparenz in C# mit Aspose.PDF festlegen – Schritt‑für‑Schritt‑Tutorial +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: PDF-Transparenz in C# mit Aspose.PDF festlegen – vollständige Anleitung +url: /de/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-Deckkraft in C# mit Aspose.PDF festlegen – vollständige Anleitung + +Wenn Sie **die PDF-Deckkraft** für bestimmte Zeichenoperationen festlegen müssen, zeigt Ihnen dieses Tutorial genau, wie Sie das mit Aspose.PDF für .NET erledigen. Egal, ob Sie Wasserzeichen, halbtransparente Overlays oder benutzerdefinierte Grafiken erstellen – Sie lernen einen knappen, produktionsreifen Ansatz. + +In den folgenden Abschnitten behandeln wir alles vom Laden einer PDF über das Bearbeiten ihres Grafik‑Zustands, das Hinzufügen einer neuen Deckkraft‑Definition bis hin zum Speichern des Ergebnisses. Keine externe Dokumentation ist nötig – nur der untenstehende Code und eine kurze Erklärung zu jedem Schritt. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben: + +* .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.7+) +* Eine gültige Aspose.PDF für .NET‑Lizenz (die kostenlose Testversion reicht für die Evaluation) +* Eine Eingabe‑PDF‑Datei (`input.pdf`) in einem Ordner, den Sie lesen/schreiben können +* Visual Studio 2022 oder eine andere C#‑IDE Ihrer Wahl + +## Schritt 1 – PDF‑Dokument laden (Aspose.PDF für .NET) + +Die erste Aufgabe besteht darin, die vorhandene PDF zu öffnen. Aspose.PDF repräsentiert eine PDF‑Datei mit der Klasse `Document`, die Ihnen vollen Zugriff auf Seiten, Ressourcen und Low‑Level‑Objekte gibt. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Warum das wichtig ist*: Das Laden des Dokuments erzeugt ein In‑Memory‑Modell, das Sie sicher ändern können. Die `using`‑Anweisung sorgt dafür, dass das Dateihandle nach Abschluss automatisch freigegeben wird. + +## Schritt 2 – Die erste zu bearbeitende Seite holen + +Die Deckkraft wird pro Seite über das Ressourcen‑Dictionary der Seite definiert. Hier greifen wir auf die erste Seite zu, Sie können jedoch `doc.Pages` durchlaufen, um eine Stapelverarbeitung durchzuführen. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Warum das wichtig ist*: Jede Seite besitzt ihre eigene `Resources`‑Sammlung, in der Grafik‑Zustände, Schriften, Bilder usw. gespeichert werden. Durch das Bearbeiten der richtigen Seite erscheint der Deckkraft‑Effekt dort, wo Sie ihn erwarten. + +## Schritt 3 – Das Ressourcen‑Dictionary der Seite zum Bearbeiten öffnen + +Aspose.PDF stellt einen Helfer `DictionaryEditor` bereit, um Low‑Level‑PDF‑Dictionaries zu manipulieren, ohne die Dateistruktur zu beschädigen. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Warum das wichtig ist*: Das direkte Editieren der COS‑ (Content Object System) Dictionaries ist der einzige Weg, einen benutzerdefinierten Grafik‑Zustand einzufügen. Der Editor abstrahiert die Low‑Level‑Syntax und hält die PDF gleichzeitig gültig. + +## Schritt 4 – Das vorhandene ExtGState‑Dictionary abrufen + +Das **ExtGState**‑Dictionary (external graphics state) enthält Deckkraft, Mischmodus, Linienbreite usw. Wenn es nicht existiert, erzeugt Aspose.PDF es automatisch, sobald Sie einen neuen Eintrag hinzufügen. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Warum das wichtig ist*: Ohne einen `ExtGState`‑Eintrag können Sie später im Seiten‑Content‑Stream nicht auf eine benutzerdefinierte Deckkraft verweisen. Dieser Schritt stellt sicher, dass der Container vorhanden ist. + +## Schritt 5 – Einen neuen Grafik‑Zustand mit der gewünschten Deckkraft erstellen + +Ein Grafik‑Zustand ist eine Sammlung von Parametern. Für die Deckkraft setzen wir `CA` (stroke opacity) und `ca` (fill opacity). Zusätzlich legen wir einen Mischmodus (`BM`) fest, der bestimmt, wie transparente Pixel mit dem darunterliegenden Inhalt interagieren. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Warum das wichtig ist*: `CA` und `ca` akzeptieren Werte von 0 (vollständig transparent) bis 1 (vollständig undurchsichtig). Passen Sie diese Zahlen an, um den gewünschten visuellen Effekt zu erzielen. Der Mischmodus `"Normal"` ist am gebräuchlichsten, Sie können jedoch mit `"Multiply"` oder `"Screen"` künstlerische Effekte ausprobieren. + +## Schritt 6 – Den neuen Grafik‑Zustand in der ExtGState‑Sammlung registrieren + +Jeder Grafik‑Zustand muss einen eindeutigen Namen besitzen (z. B. `GS0`). Wir fügen unser Dictionary zur `ExtGState`‑Sammlung hinzu und aktualisieren anschließend die Ressourcen der Seite. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Warum das wichtig ist*: Durch die Benennung des Zustands (`GS0`) können Sie später im Seiten‑Content‑Stream über den Operator `gs` darauf verweisen. Wenn Sie mehrere Deckkraft‑Stufen benötigen, erstellen Sie zusätzliche Einträge (`GS1`, `GS2`, …). + +## Schritt 7 – Den Grafik‑Zustand auf Zeichenbefehle anwenden (optional) + +Wenn Sie die Deckkraft sofort auf bestehenden Inhalt anwenden möchten, müssen Sie den Content‑Stream der Seite editieren. Unten finden Sie ein einfaches Beispiel, das ein halbtransparentes Rechteck mit dem neu erstellten Zustand zeichnet. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Warum das wichtig ist*: Der Operator `gs` (`SetGraphicsState`) weist den PDF‑Renderer an, die in `GS0` definierten Deckkraft‑Werte für alle nachfolgenden Zeichenbefehle zu verwenden. Das Paar `gsave`/`grestore` sorgt dafür, dass andere Seitenelemente unverändert bleiben. + +## Schritt 8 – Das modifizierte PDF speichern + +Zum Schluss schreiben wir das aktualisierte Dokument zurück auf die Festplatte. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Warum das wichtig ist*: Das Speichern finalisiert alle Änderungen, bettet den neuen Grafik‑Zustand ein und erzeugt ein PDF, das jeder Viewer (Adobe Acrobat, Chrome usw.) mit der vorgesehenen Transparenz anzeigen kann. + +### Erwartetes Ergebnis + +Öffnen Sie `output.pdf` in einem PDF‑Viewer. Sie sollten ein rotes Rechteck sehen, dessen Kontur zu 80 % und dessen Füllung zu 40 % undurchsichtig ist und sich sanft mit dem Hintergrundinhalt vermischt. Der Rest der Seite bleibt unverändert. + +## Häufige Varianten und Sonderfälle + +| Situation | Was zu ändern ist | Grund | +|-----------|-------------------|-------| +| **Mehrere Deckkraft‑Stufen** | Zusätzliche Grafik‑Zustände (`GS1`, `GS2`, …) mit unterschiedlichen `CA`/`ca`‑Werten erstellen und dort referenzieren, wo sie gebraucht werden | Ermöglicht feinkörnige Kontrolle über verschiedene Elemente | +| **Unterschiedliche Mischmodi** | Statt `"Normal"` in `BM` `"Multiply"`, `"Screen"`, `"Overlay"` usw. verwenden | Erzeugt künstlerische Misch‑Effekte | +| **Anwenden auf einen bestehenden Content‑Stream** | `SetGraphicsState` vor den spezifischen Zeichen‑Operatoren einfügen, die Sie beeinflussen wollen | Verhindert unerwünschte Deckkraft bei nicht betroffenen Objekten | +| **Große PDFs** | Seiten in einer `foreach (Page p in doc.Pages)`‑Schleife verarbeiten, um nicht die gesamte Datei gleichzeitig im Speicher zu halten | Verbessert die Performance und reduziert den Speicherverbrauch | +| **Kein vorhandenes ExtGState** | Der Code in Schritt 4 erzeugt bei Bedarf automatisch eines, sodass keine zusätzliche Behandlung nötig ist | Garantiert, dass das Dictionary vorhanden ist | + +### Profi‑Tipp + +Wenn Sie viele benutzerdefinierte Grafik‑Zustände hinzufügen, halten Sie die Benennung konsistent (`GS0`, `GS1`, …) und dokumentieren Sie den Zweck jedes Zustands in einem Kommentarblock. Das erleichtert die zukünftige Wartung, besonders in kollaborativen Projekten. + +## Vollständiges, ausführbares Beispiel + +Unten finden Sie das komplette Programm, das Sie kopieren, einfügen und ausführen können. Es enthält alle Schritte, die notwendigen `using`‑Direktiven und Kommentare. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Führen Sie das Programm aus, + + +## 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 schrittweisen Erklärungen, damit Sie weitere API‑Funktionen meistern und alternative Implementierungsansätze in Ihren eigenen Projekten erkunden können. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..4f4626b448 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-Dokument mit Aspose.PDF speichern – vollständige Anleitung](./save-pdf-document-with-aspose-pdf-complete-guide/) | Erfahren Sie, wie Sie ein PDF-Dokument mit Aspose.PDF vollständig speichern. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/german/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0c7cf7caa2 --- /dev/null +++ b/pdf/german/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Speichern Sie ein PDF‑Dokument mit Aspose.PDF, lernen Sie, wie man PDF‑Seiten + hinzufügt, PDF‑Formularfelder ausfüllt und ein PDF mit Formularfeldern in einem + einzigen Tutorial erstellt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: de +lastmod: 2026-08-08 +og_description: Speichern Sie PDF-Dokumente mit Aspose.PDF und erfahren Sie, wie Sie + PDF-Seiten hinzufügen, PDF-Formularfelder ausfüllen und PDFs mit Formularfeldern + schnell und zuverlässig erstellen. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: PDF-Dokument mit Aspose.PDF speichern – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: PDF-Dokument mit Aspose.PDF speichern – vollständige Anleitung +url: /de/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF-Dokument mit Aspose.PDF speichern – vollständige Anleitung + +Wenn Sie ein **PDF-Dokument speichern** müssen, das interaktive Formularfelder enthält, zeigt Ihnen dieses Tutorial genau, wie das geht. Sie sehen, wie man PDF‑Seiten hinzufügt, ein PDF‑Formular erstellt und ein PDF‑Formularfeld ausfüllt – alles mit Aspose.PDF für .NET. + +In den folgenden Abschnitten lernen Sie: + +* mehrere Seiten zu einem neuen PDF hinzufügen, +* ein Textfeld‑Formularfeld auf der ersten Seite erstellen, +* eine Widget‑Annotation für dasselbe Feld auf einer zweiten Seite platzieren, +* den Wert des Feldes festlegen (PDF‑Formularfeld ausfüllen), +* und schließlich **PDF-Dokument speichern** auf dem Datenträger. + +Es werden keine externen Tools benötigt; der vollständige, ausführbare Code ist enthalten. + +## Voraussetzungen + +* .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.7.2+). +* Eine gültige Aspose.PDF für .NET Lizenz oder ein kostenloser Evaluierungsschlüssel. +* Visual Studio 2022 (oder jede C#‑IDE). + +Fügen Sie das NuGet‑Paket hinzu: + +```bash +dotnet add package Aspose.PDF +``` + +## Wie man PDF‑Seiten hinzufügt + +Der erste Schritt besteht darin, ein leeres PDF zu erstellen und die benötigten Seiten hinzuzufügen. Das Hinzufügen von Seiten, bevor Formularfelder definiert werden, stellt sicher, dass die Layout‑Koordinaten genau sind. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Warum das wichtig ist:* Jedes `Page`‑Objekt stellt eine druckbare Leinwand dar. Durch das frühe Hinzufügen von Seiten können Sie später beim Platzieren von Formularelementen darauf verweisen. + +## Wie man ein PDF‑Formular mit Aspose.PDF erstellt + +Ein PDF‑Formular besteht aus einer **Felddefinition** (dem logischen Container) und einer oder mehreren **Widget‑Annotationen** (der visuellen Darstellung). Das Beispiel erstellt ein `TextBoxField` mit dem Namen **Comments** auf der ersten Seite. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Warum das wichtig ist:* Die `Rectangle`‑Koordinaten werden in Punkten angegeben (1 pt = 1/72 in). Passen Sie die Werte an Ihr Design an. + +## PDF‑Formularfeld ausfüllen + +Sie können den Wert des Feldes programmgesteuert setzen, bevor das Dokument gespeichert wird. Das ist das Kernstück von **PDF‑Formularfeld ausfüllen**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Wenn Sie das Feld später ausfüllen müssen (z. B. aus Benutzereingaben), weisen Sie einfach vor dem Aufruf von `Save` einen neuen String `commentsField.Value` zu. + +## Eine Widget‑Annotation für dasselbe Feld auf der zweiten Seite hinzufügen + +Eine Widget‑Annotation macht das Formularfeld auf einer Seite sichtbar. Durch das Hinzufügen eines zweiten Widgets erscheint dasselbe logische Feld auf beiden Seiten, was **PDF mit Formularfeldern erstellen** demonstriert, das sich über mehrere Seiten erstreckt. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Warum das wichtig ist:* Die `Widgets`‑Sammlung kann beliebig viele visuelle Darstellungen enthalten. Benutzer können auf beiden Seiten mit dem Feld interagieren, und der eingegebene Wert bleibt synchronisiert. + +## Feld an die Annotationen der ersten Seite anhängen + +Formularfelder müssen zur Annotationssammlung einer Seite hinzugefügt werden, damit der PDF‑Betrachter sie rendern kann. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDF‑Dokument speichern + +Jetzt, da das Formular vollständig definiert ist, können Sie **PDF‑Dokument speichern** an einem Ort Ihrer Wahl. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Wenn Sie `output.pdf` in Adobe Acrobat Reader oder einem anderen PDF‑Betrachter öffnen, sehen Sie ein Textfeld auf Seite 1 und ein entsprechendes Feld auf Seite 2. Das Eingeben von Text in eines der Felder aktualisiert das gleiche zugrunde liegende Feld. + +## Vollständiges, ausführbares Beispiel + +Unten finden Sie das vollständige Programm, das Sie in eine Konsolenanwendung kopieren‑und‑einfügen können. Es kompiliert und erzeugt das beschriebene PDF ohne Änderungen. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Erwartete Ausgabe:** Eine Datei namens `output.pdf` mit zwei Seiten. Seite 1 zeigt ein Textfeld mit der Beschriftung „Comments“ bei den Koordinaten (100, 600). Seite 2 zeigt dasselbe Feld bei (100, 400). Das Feld ist vorab mit „Enter your feedback here“ gefüllt. Das Ändern des Textes auf einer der Seiten aktualisiert den gleichen Wert, wenn das Dokument erneut gespeichert wird. + +## Häufige Fragen und Sonderfall‑Behandlung + +| Frage | Antwort | +|----------|--------| +| *Kann ich mehr als ein Widget für dasselbe Feld hinzufügen?* | Ja. Fügen Sie zusätzliche `WidgetAnnotation`‑Objekte zu `commentsField.Widgets` hinzu. Jedes Widget kann auf einer beliebigen Seite platziert werden. | +| *Was, wenn ich das Aussehen des Feldes festlegen muss (Schriftart, Rand, Hintergrund)?* | Verwenden Sie `commentsField.DefaultAppearance`, um Schriftart und Farbe festzulegen, und setzen Sie die Eigenschaften von `commentsField.Border` für den Linienstil. | +| *Wie mache ich das Feld schreibgeschützt?* | Setzen Sie `commentsField.ReadOnly = true;`. Das Feld zeigt weiterhin seinen Wert an, kann aber vom Benutzer nicht bearbeitet werden. | +| *Ist es möglich, das Feld nach der Erstellung des PDFs zu füllen?* | Ja. Laden Sie das gespeicherte PDF mit `new Document("output.pdf")`, finden Sie das Feld über `pdfDocument.Form["Comments"]`, weisen Sie einen neuen `Value` zu und rufen Sie erneut `Save` auf. | +| *Was, wenn das PDF für die Archivierung PDF/A-konform sein muss?* | Nachdem das Dokument erstellt wurde, rufen Sie vor dem Speichern `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` auf. | + +## Tipps aus der Praxis + +* **Pro‑Tipp:** Halten Sie den logischen Feldnamen kurz und eindeutig; er ist der Bezeichner, den Sie später beim programmgesteuerten Ausfüllen des Formulars verwenden. +* **Achten Sie auf:** Überlappende Widget‑Rechtecke. Überlappungen können in einigen Betrachtern Rendering‑Artefakte verursachen. +* **Leistungshinweis:** Das Hinzufügen vieler Seiten oder Widgets in einer engen Schleife kann optimiert werden, indem Sie eine einzelne `Rectangle`‑Instanz wiederverwenden und nur deren Koordinaten ändern. + +## Fazit + +Sie wissen jetzt, wie man ein **PDF‑Dokument speichert**, das ein voll funktionsfähiges Formular enthält, wie man **PDF‑Formularfeld ausfüllt** und wie man **PDF‑Seiten hinzufügt** und **PDF mit Formularfeldern erstellt** mit Aspose.PDF für .NET. Das vollständige Beispiel demonstriert den End‑zu‑End‑Workflow von der Dokumenterstellung bis zum finalen Speichern. + +Als Nächstes können Sie verwandte Themen wie **Häkchenfelder hinzufügen**, **Dropdown‑Listen erstellen** oder **das Formular flachlegen** für die Verteilung als schreibgeschützte Version erkunden. Jeder dieser Punkte baut auf denselben hier behandelten Prinzipien auf und erweitert Ihre PDF‑Automatisierungsfähigkeiten. + +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 Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man PDF mit Aspose erstellt – Formularfeld und Seiten hinzufügen](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [PDF-Dokument mit Aspose erstellen – Seite, Textfeld und Formular hinzufügen](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Wie man PDF-Formularfelder mit Aspose.PDF für .NET hinzufügt und extrahiert: Ein umfassender Leitfaden](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/german/net/programming-with-pdf-pages/_index.md index 78ebdcb2cd..5d7b852fde 100644 --- a/pdf/german/net/programming-with-pdf-pages/_index.md +++ b/pdf/german/net/programming-with-pdf-pages/_index.md @@ -14,30 +14,31 @@ # Programmieren mit PDF-Seiten -Die Dokumentation „Programmieren mit PDF-Seiten“ für Aspose.PDF für .NET bietet Schritt-für-Schritt-Anleitungen, die Ihnen die Bearbeitung und Verwaltung von Seiten in einer PDF-Datei erleichtern. Sie lernen, wie Sie Seiten hinzufügen, entfernen, extrahieren und neu anordnen sowie Seiteneigenschaften wie Größe, Ausrichtung und Ränder konfigurieren. Diese Tutorials führen Sie anhand praktischer Beispiele und vermitteln Ihnen das Wissen, effektiv mit PDF-Seiten in Ihren .NET-Anwendungen zu arbeiten. +Die Dokumentation „Programmieren mit PDF-Seiten“ für Aspose.PDF für .NET bietet Schritt‑für‑Schritt‑Anleitungen, die Ihnen die Bearbeitung und Verwaltung von Seiten in einer PDF‑Datei erleichtern. Sie lernen, wie Sie Seiten hinzufügen, entfernen, extrahieren und neu anordnen sowie Seiteneigenschaften wie Größe, Ausrichtung und Ränder konfigurieren. Diese Tutorials führen Sie anhand praktischer Beispiele und vermitteln Ihnen das Wissen, effektiv mit PDF‑Seiten in Ihren .NET‑Anwendungen zu arbeiten. -Die Tutorials enthalten Schritt-für-Schritt-Anleitungen, detaillierte Codebeispiele und klare Erklärungen für ein leichtes Verständnis. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, diese Ressourcen helfen Ihnen, die PDF-Seitenbearbeitungsfunktionen von Aspose.PDF für .NET zu meistern und eröffnen Ihnen neue Möglichkeiten für Ihre Anwendungsentwicklungsprojekte. +Die Tutorials enthalten Schritt‑für‑Schritt‑Anleitungen, detaillierte Codebeispiele und klare Erklärungen für ein leichtes Verständnis. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, diese Ressourcen helfen Ihnen, die PDF‑Seitenbearbeitungsfunktionen von Aspose.PDF für .NET zu meistern und eröffnen Ihnen neue Möglichkeiten für Ihre Anwendungsentwicklungsprojekte. ## Anleitungen | Titel | Beschreibung | | --- | --- | | [Orientierung ändern](./change-orientation/) | Schritt-für-Schritt-Anleitung zum Ändern der Seitenausrichtung einer PDF-Datei mit Aspose.PDF für .NET. Einfach zu befolgen und in Ihren Projekten zu implementieren. | -| [PDF-Dateien verketten](./concatenate-pdf-files/) | Verketten Sie PDF-Dateien mühelos mit Aspose.PDF für .NET mit dieser umfassenden Schritt-für-Schritt-Anleitung. | -| [Bestimmte Seite in der PDF-Datei löschen](./delete-particular-page/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET eine bestimmte Seite aus einer PDF-Datei löschen. | -| [Seitenfarbe bestimmen](./determine-page-color/) Lernen Sie mit unserer Schritt-für-Schritt-Anleitung, die Seitenfarbe von PDF-Dateien mit Aspose.PDF für .NET zu bestimmen. Einfache Implementierung für alle Kenntnisstufen. | -| [Seiteninhalte in PDF-Datei einpassen](./fit-page-contents/) | Passen Sie Ihre PDF-Inhalte mühelos mit Aspose.PDF für .NET an. Diese Anleitung bietet eine detaillierte Schritt-für-Schritt-Anleitung für ein optimales Seitenlayout. | +| [PDF-Dateien verketten](./concatenate-pdf-files/) | Verketten Sie PDF-Dateien mühelos mit Aspose.PDF für .NET mit dieser umfassenden Schritt‑für‑Schritt‑Anleitung. | +| [Bestimmte Seite in der PDF-Datei löschen](./delete-particular-page/) | Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.PDF für .NET eine bestimmte Seite aus einer PDF-Datei löschen. | +| [Seitenfarbe bestimmen](./determine-page-color/) Lernen Sie mit unserer Schritt‑für‑Schritt‑Anleitung, die Seitenfarbe von PDF-Dateien mit Aspose.PDF für .NET zu bestimmen. Einfache Implementierung für alle Kenntnisstufen. | +| [Seiteninhalte in PDF-Datei einpassen](./fit-page-contents/) | Passen Sie Ihre PDF-Inhalte mühelos mit Aspose.PDF für .NET an. Diese Anleitung bietet eine detaillierte Schritt‑für‑Schritt‑Anleitung für ein optimales Seitenlayout. | | [PDF-Seitenabmessungen abrufen](./get-dimensions/) | In diesem Tutorial erklären wir, wie Sie PDF-Seitenabmessungen ermitteln und mit Aspose.PDF für .NET bearbeiten. Detaillierte Schritte führen Sie durch den Prozess. | -| [Ermitteln Sie die Anzahl der Seiten in einer PDF-Datei](./get-number-of-pages/) | Schritt-für-Schritt-Anleitung zum Ermitteln der Seitenanzahl in einer PDF-Datei mit Aspose.PDF für .NET. Einfach zu implementieren, ideal für Ihre Projekte. | -| [Seitenanzahl in PDF-Datei abrufen](./get-page-count/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET die Seitenanzahl in einer PDF-Datei ermitteln. Folgen Sie unserer Schritt-für-Schritt-Anleitung für eine einfache und effektive Lösung. | -| [Bestimmte Seite abrufen](./get-particular-page/) Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET eine bestimmte Seite aus einer PDF-Datei extrahieren und als neues Dokument speichern. | -| [PDF-Eigenschaften abrufen](./get-properties/) | Erfahren Sie, wie Sie PDF-Eigenschaften mit Aspose.PDF für .NET effizient extrahieren. Schritt-für-Schritt-Anleitung mit Codebeispielen und Best Practices. | -| [Bild als Seitenhintergrund in PDF-Datei festlegen](./image-as-background/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.PDF für .NET ein Bild als Seitenhintergrund in einer PDF-Datei festlegen. Erstellen Sie professionelle, optisch ansprechende Dokumente. | -| [Leere Seite in PDF-Datei einfügen](./insert-empty-page/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET eine leere Seite in ein PDF-Dokument einfügen. Schritt-für-Schritt-Anleitung mit Codebeispielen für die nahtlose PDF-Bearbeitung. | -| [Leere Seite am Ende einfügen](./insert-empty-page-at-end/) | Lernen Sie in dieser anfängerfreundlichen Anleitung, wie Sie mit Aspose.PDF für .NET mühelos eine leere Seite in ein PDF-Dokument einfügen. Perfekt für schnelle Bearbeitungen. | -| [Auf Seiten aufteilen](./split-to-pages/) Mit diesem umfassenden Tutorial können Sie PDFs mit Aspose.PDF für .NET ganz einfach in einzelne Seiten aufteilen. Schritt-für-Schritt-Anleitung enthalten. | -| [PDF-Seitenabmessungen aktualisieren](./update-dimensions/) | Entdecken Sie in dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie die Seitenabmessungen von PDFs mit Aspose.PDF für .NET mühelos aktualisieren. | -| [Auf Seiteninhalte in PDF-Dateien zoomen](./zoom-to-page-contents/) | Erfahren Sie in dieser umfassenden Anleitung, wie Sie mit Aspose.PDF für .NET Seiteninhalte in PDF-Dateien vergrößern. Optimieren Sie Ihre PDF-Dokumente nach Ihren individuellen Anforderungen. | +| [Ermitteln Sie die Anzahl der Seiten in einer PDF-Datei](./get-number-of-pages/) | Schritt‑für‑Schritt‑Anleitung zum Ermitteln der Seitenanzahl in einer PDF‑Datei mit Aspose.PDF für .NET. Einfach zu implementieren, ideal für Ihre Projekte. | +| [Seitenanzahl in PDF-Datei abrufen](./get-page-count/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET die Seitenanzahl in einer PDF‑Datei ermitteln. Folgen Sie unserer Schritt‑für‑Schritt‑Anleitung für eine einfache und effektive Lösung. | +| [Bestimmte Seite abrufen](./get-particular-page/) Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.PDF für .NET eine bestimmte Seite aus einer PDF‑Datei extrahieren und als neues Dokument speichern. | +| [PDF-Eigenschaften abrufen](./get-properties/) | Erfahren Sie, wie Sie PDF‑Eigenschaften mit Aspose.PDF für .NET effizient extrahieren. Schritt‑für‑Schritt‑Anleitung mit Codebeispielen und Best Practices. | +| [Bild als Seitenhintergrund in PDF-Datei festlegen](./image-as-background/) | Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.PDF für .NET ein Bild als Seitenhintergrund in einer PDF‑Datei festlegen. Erstellen Sie professionelle, optisch ansprechende Dokumente. | +| [Leere Seite in PDF-Datei einfügen](./insert-empty-page/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET eine leere Seite in ein PDF‑Dokument einfügen. Schritt‑für‑Schritt‑Anleitung mit Codebeispielen für die nahtlose PDF‑Bearbeitung. | +| [Leere Seite am Ende einfügen](./insert-empty-page-at-end/) | Lernen Sie in dieser anfängerfreundlichen Anleitung, wie Sie mit Aspose.PDF für .NET mühelos eine leere Seite in ein PDF‑Dokument einfügen. Perfekt für schnelle Bearbeitungen. | +| [Auf Seiten aufteilen](./split-to-pages/) Mit diesem umfassenden Tutorial können Sie PDFs mit Aspose.PDF für .NET ganz einfach in einzelne Seiten aufteilen. Schritt‑für‑Schritt‑Anleitung enthalten. | +| [PDF-Seitenabmessungen aktualisieren](./update-dimensions/) | Entdecken Sie in dieser umfassenden Schritt‑für‑Schritt‑Anleitung, wie Sie die Seitenabmessungen von PDFs mit Aspose.PDF für .NET mühelos aktualisieren. | +| [Auf Seiteninhalte in PDF-Dateien zoomen](./zoom-to-page-contents/) | Erfahren Sie in dieser umfassenden Anleitung, wie Sie mit Aspose.PDF für .NET Seiteninhalte in PDF‑Dateien vergrößern. Optimieren Sie Ihre PDF‑Dokumente nach Ihren individuellen Anforderungen. | | [Seitenzahlen zu PDF hinzufügen mit C# – Vollständige Schritt‑für‑Schritt‑Anleitung](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET Seitenzahlen zu PDFs hinzufügen – detaillierte Schritt‑für‑Schritt‑Anleitung. | +| [Bates‑Nummerierung zu PDF hinzufügen mit Aspose – Schritt‑für‑Schritt‑Anleitung](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET eine Bates‑Nummerierung zu PDFs hinzufügen – detaillierte Schritt‑für‑Schritt‑Anleitung. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/german/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..037b20f8ec --- /dev/null +++ b/pdf/german/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-08 +description: Bates-Nummerierung zu PDF hinzufügen mit Aspose.Pdf in C#. Dieses Tutorial + zeigt auch, wie man eine leere PDF‑Seite hinzufügt und PDF programmgesteuert erzeugt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: de +lastmod: 2026-08-08 +og_description: Bates‑Nummerierung zu PDF mit Aspose.Pdf in C# hinzufügen. Lernen + Sie, leere PDF‑Seiten hinzuzufügen, PDFs programmgesteuert zu erzeugen und das endgültige + Dokument in wenigen Minuten zu speichern. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Bates-Nummerierung zu PDF mit Aspose hinzufügen – vollständiger C#‑Leitfaden +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Bates-Nummerierung zu PDF mit Aspose hinzufügen – Schritt‑für‑Schritt‑Anleitung +url: /de/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Bates-Nummerierung zu PDF hinzufügen mit Aspose – Schritt‑für‑Schritt‑Anleitung + +Bates-Nummerierung zu PDF hinzufügen mit Aspose.Pdf ist einfach, sobald Sie die grundlegenden Schritte verstehen. Wenn Sie zusätzlich ein leeres PDF hinzufügen oder PDF programmgesteuert erzeugen möchten, deckt dieser Leitfaden alles ab, was Sie benötigen. + +In diesem Tutorial lernen Sie: + +* Ein neues PDF‑Dokument von Grund auf erstellen. +* Ein leeres PDF hinzufügen, das die Bates‑Nummern aufnehmen wird. +* Das Bates‑Nummerierungs‑Artifact mit einem benutzerdefinierten Präfix konfigurieren. +* Das PDF speichern, sodass die Nummern im erzeugten Dokument erscheinen. + +Am Ende verfügen Sie über eine voll funktionsfähige C#‑Konsolenanwendung, die ein PDF mit Bates‑Nummern wie **CASE‑1000**, **CASE‑1001**, … erzeugt – ein gängiges Erfordernis für juristische und e‑Discovery‑Workflows. + +## Voraussetzungen + +* .NET 6.0 SDK oder neuer (der Code funktioniert auch mit .NET Framework 4.8). +* Visual Studio 2022 oder eine beliebige C#‑kompatible IDE. +* Eine gültige Aspose.Pdf‑für‑.NET‑Lizenz (oder ein kostenloser Evaluierungsschlüssel). +* Grundlegende Kenntnisse der C#‑Syntax. + +> **Pro‑Tipp:** Wenn Sie den Code ohne Lizenz ausführen, fügt Aspose dem Ausgabepdf ein kleines Wasserzeichen hinzu. + +## Schritt 1: Projekt einrichten und Aspose.Pdf importieren + +Ein neues Konsolenprojekt erstellen und das Aspose.Pdf‑NuGet‑Paket hinzufügen: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Die für das Beispiel benötigten `using`‑Direktiven sind: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Diese Namespaces geben Ihnen Zugriff auf die Klassen `Document`, `Page` und `BatesNumberingArtifact`, die später verwendet werden. + +## Schritt 2: Ein leeres PDF hinzufügen + +Eine Bates‑Nummer muss einer Seite zugeordnet sein, daher erstellen wir zuerst eine leere Seite, die das Nummerierungs‑Artifact erhalten wird. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Die Klasse `Document` repräsentiert die gesamte PDF‑Datei, während `Pages.Add()` eine neue, leere Seite am Ende der Seitensammlung des Dokuments einfügt. Da das Dokument zu Beginn leer ist, erzeugt dieser Aufruf gleichzeitig die erste Seite. + +## Schritt 3: Das Bates‑Nummerierungs‑Artifact konfigurieren + +Jetzt definieren wir, wie die Bates‑Nummern aussehen sollen. Mit `BatesNumberingArtifact` können Sie Startnummer, Präfix, Suffix und Formatierungsoptionen festlegen. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Warum das wichtig ist:** +Die Einstellung `StartNumber` auf **1000** entspricht den üblichen Konventionen für juristische Akten. Das `Prefix` sorgt dafür, dass jede Nummer als **CASE‑1000**, **CASE‑1001**, … erscheint, was die Suche und Sortierung erleichtert. + +## Schritt 4: Das Artifact der Seite hinzufügen + +Das Artifact muss der `Artifacts`‑Sammlung der Seite hinzugefügt werden, damit Aspose es beim Speichern auf jeder Seite rendert. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Beim Speichern des Dokuments wiederholt Aspose das Artifact automatisch auf allen Seiten und erhöht die Nummer für jede nachfolgende Seite. + +## Schritt 5: (Optional) Weitere Seiten hinzufügen + +Falls Sie mehr Seiten benötigen, wiederholen Sie einfach `pdfDocument.Pages.Add()`. Das Bates‑Nummerierungs‑Artifact, das Sie im vorherigen Schritt angehängt haben, erscheint automatisch auf jeder neuen Seite. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Schritt 6: PDF speichern – PDF programmgesteuert erzeugen + +Zum Schluss das Dokument auf die Festplatte schreiben. An diesem Punkt werden die Bates‑Nummern auf die Seiten gerendert. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Erwartetes Ergebnis:** +Öffnen Sie *BatesNumberedDocument.pdf* und Sie sehen ein dreiseitiges PDF. Jede Seite zeigt eine Bates‑Nummer in der unteren rechten Ecke: + +* Seite 1 → **CASE‑1000** +* Seite 2 → **CASE‑1001** +* Seite 3 → **CASE‑1002** + +Die Nummern werden automatisch inkrementiert, weil das Artifact an die Seitensammlung angehängt ist. + +## Vollständiges, ausführbares Beispiel + +Alles zusammengeführt, hier ein komplettes Konsolenprogramm, das Sie kopieren, einfügen und ausführen können: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Programm mit `dotnet run` starten. Nach der Ausführung finden Sie die Datei auf Ihrem Desktop und können die Bates‑Nummern überprüfen. + +![Beispiel für Bates‑Nummerierung zu PDF](/images/bates-numbering.png "Beispiel für Bates‑Nummerierung zu PDF") + +## Häufige Fragen und Sonderfälle + +### Was tun, wenn ich eine andere Schriftart oder Position benötige? + +`BatesNumberingArtifact` stellt Eigenschaften wie `FontSize`, `FontColor`, `HorizontalAlignment` und `VerticalAlignment` bereit. Zum Beispiel: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Wie schließe ich eine bestimmte Seite von der Nummerierung aus? + +Erstellen Sie ein separates `BatesNumberingArtifact` für die Seiten, die Sie nummerieren möchten, und fügen Sie es nur diesen Seiten hinzu. Seiten ohne angehängtes Artifact bleiben unnummeriert. + +### Funktioniert das mit bereits vorhandenen PDFs? + +Ja. Statt `new Document()` laden Sie eine bestehende Datei: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Anschließend das Artifact zu den gewünschten Seiten hinzufügen und speichern. + +## Fazit + +Sie wissen jetzt, wie Sie **Bates‑Nummerierung zu PDF** mit Aspose.Pdf **hinzufügen**, wie Sie **ein leeres PDF hinzufügen** und wie Sie **PDF programmgesteuert erzeugen** in einer sauberen, wiederverwendbaren C#‑Lösung. Der Ansatz funktioniert mit beliebig vielen Seiten, benutzerdefinierten Präfixen und Stiloptionen und gibt Ihnen volle Kontrolle über das Enddokument. + +Nächste Schritte, die Sie erkunden könnten: + +* **create pdf as + + +## Was sollten Sie als Nächstes lernen? + + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man Seitenzahlen in PDFs mit Aspose.PDF für .NET hinzufügt und anpasst | Dokumenten‑Manipulations‑Leitfaden](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Wie man am Ende eines PDFs eine leere Seite mit Aspose.PDF für .NET hinzufügt | Schritt‑für‑Schritt‑Leitfaden](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [PDF‑Dokument mit Aspose.PDF erstellen – Seite, Form hinzufügen & speichern](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 a5ac282256..5e71857ffb 100644 --- a/pdf/german/net/programming-with-security-and-signatures/_index.md +++ b/pdf/german/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ Das Tutorial gibt Ihnen einen detaillierten Überblick über Methoden und Techni | [Mit Smartcard unterschreiben und PDF-Dateisignatur verwenden](./sign-with-smart-card-using-pdf-file-signature/) | Erfahren Sie, wie Sie PDF-Dateien mit einer Smartcard mit Aspose.PDF für .NET signieren. Folgen Sie dieser Schritt-für-Schritt-Anleitung für sichere digitale Signaturen. | | [Mit Smartcard unterschreiben und dabei das Signaturfeld verwenden](./sign-with-smart-card-using-signature-field/) | Erfahren Sie, wie Sie PDFs mit Aspose.PDF für .NET sicher per Smartcard signieren. Folgen Sie unserer Schritt-für-Schritt-Anleitung für eine einfache Implementierung. | | [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-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# mit Aspose.PDF überprüfen – vollständiger Leitfaden](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Erfahren Sie, wie Sie PDF-Signaturen in C# mit Aspose.PDF vollständig prüfen. | +| [PDF-Signatur-Tutorial: Validieren einer PDF-Digital-Signatur mit Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Erfahren Sie, wie Sie mit Aspose.PDF für .NET digitale PDF-Signaturen prüfen und validieren. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/german/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/german/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..fe02076461 --- /dev/null +++ b/pdf/german/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-08-08 +description: PDF‑Signatur‑Tutorial, das zeigt, wie man digitale PDF‑Signaturen mit + Signaturvalidierungsoptionen und C#‑Code validiert – schnelle Schritt‑für‑Schritt‑Anleitung +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: de +lastmod: 2026-08-08 +og_description: Das PDF‑Signatur‑Tutorial führt Sie durch die Validierung einer PDF‑Digitalunterschrift + mit Aspose.PDF. Erfahren Sie, wie Sie Optionen zur Signaturvalidierung konfigurieren + und das Ergebnis prüfen. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF‑Signatur‑Tutorial – PDF‑Digitalunterschriften in C# validieren +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'PDF‑Signatur‑Tutorial: Validieren einer digitalen PDF‑Signatur mit Aspose.PDF' +url: /de/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – validate a PDF digital signature in C# + +Wenn Sie ein **pdf signature tutorial** benötigen, das genau zeigt, wie man eine PDF‑Digitale‑Signatur validiert, ist dieser Leitfaden genau das Richtige. Sie sehen, wie man ein signiertes PDF lädt, **signature validation options** konfiguriert, die Validierung ausführt und das Ergebnis anzeigt – alles mit klarem, ausführbarem C#‑Code. + +Die Validierung einer PDF‑Signatur ist unverzichtbar, wenn Sie Verträge, Rechnungen oder andere rechtlich bindende Dokumente verarbeiten. Dieses Tutorial führt Sie durch den kompletten Workflow, sodass Sie Signaturprüfungen in Ihre eigenen Anwendungen integrieren können, ohne raten zu müssen, welche API‑Aufrufe nötig sind. + +## What you’ll accomplish + +Am Ende dieses Tutorials können Sie: + +* Eine signierte PDF‑Datei mit Aspose.PDF laden. +* **signature validation options** wie den Hash‑Algorithmus festlegen. +* Die Methode `Validate` aufrufen, um **validate pdf digital signature** durchzuführen. +* Eine klare Meldung „Signature valid“ in der Konsole ausgeben. + +**Prerequisites** + +* .NET 6.0 (oder höher) installiert. +* Visual Studio 2022 (oder jede C#‑IDE). +* Aspose.PDF for .NET NuGet‑Paket (`Aspose.Pdf`). + +> **Pro tip:** Verwenden Sie die neueste Aspose.PDF‑Version, um Unterstützung für SHA‑3‑Algorithmen und verbesserte Validierungs‑Performance zu erhalten. + +## Step 1: Install the Aspose.PDF NuGet package + +Öffnen Sie Ihr Projekt in Visual Studio und führen Sie den folgenden Befehl in der Package Manager Console aus: + +```bash +Install-Package Aspose.Pdf +``` + +Das Paket fügt den Namespace `Aspose.Pdf` hinzu, der die Klasse `Document` und die signaturbezogenen APIs enthält, die Sie verwenden werden. + +## Step 2: Load the signed PDF document + +Die erste Code‑Zeile erstellt ein `Document`‑Objekt, das die PDF‑Datei auf der Festplatte repräsentiert. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* Die Klasse `Document` analysiert die PDF‑Struktur und stellt die Sammlung `Signatures` bereit, die alle eingebetteten digitalen Signaturen enthält. Ist der Dateipfad falsch, wird eine Ausnahme ausgelöst – prüfen Sie also den Pfad, bevor Sie das Programm ausführen. + +## Step 3: Configure signature validation options + +Sie können den Validierungsprozess mit der Klasse `SignatureValidationOptions` anpassen. In diesem Tutorial geben wir den Hash‑Algorithmus an, Sie können jedoch auch Zertifikats‑Widerrufs‑Checks, Zeitstempel‑Verifizierung und mehr festlegen. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* Der Hash‑Algorithmus muss mit demjenigen übereinstimmen, der beim Erstellen der Signatur verwendet wurde. Ein nicht übereinstimmender Algorithmus führt dazu, dass die Validierung fehlschlägt, selbst wenn die Signatur ansonsten korrekt ist. + +## Step 4: Validate the first signature + +Die meisten PDFs enthalten eine einzelne Signatur, aber die Sammlung `Signatures` kann mehrere enthalten. Dieses Beispiel validiert den ersten Eintrag (`[0]`). Die Methode `Validate` gibt einen Boolean zurück, der den Erfolg anzeigt. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* Hat das PDF keine Signaturen, ist `document.Signatures.Count` gleich `0` und der Zugriff auf `[0]` wirft eine `IndexOutOfRangeException`. Schützen Sie sich mit einer einfachen Prüfung: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Step 5: Display the validation result + +Zum Schluss schreiben Sie das Ergebnis in die Konsole. Dieser Schritt demonstriert das **check pdf signature**‑Ergebnis in einem menschenlesbaren Format. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Wenn Sie das Programm ausführen, sollten Sie Folgendes sehen: + +``` +Signature valid: True +``` + +Ist die Signatur beschädigt, wird ein nicht unterstützter Algorithmus verwendet oder das Zertifikat ist widerrufen, lautet die Ausgabe `False`. + +## Full, runnable example + +Kopieren Sie den folgenden Code in ein neues Konsolen‑Projekt (`dotnet new console`) und ersetzen Sie `YOUR_DIRECTORY/signed.pdf` durch den Pfad zu Ihrer signierten PDF‑Datei. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Expected output + +``` +Signature valid: True +``` + +Scheitert die Validierung, zeigt die Konsole `Signature valid: False` an. + +## Common questions and troubleshooting + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## Next steps + +* Erkunden Sie **validate pdf signature** für mehrere Signaturen, indem Sie über `document.Signatures` iterieren. +* Kombinieren Sie dieses Tutorial mit **check pdf signature** in einer Web‑API, um Echtzeit‑Verifizierung für hochgeladene Verträge bereitzustellen. +* Vertiefen Sie sich in **signature validation options** wie CRL/OCSP‑Checks, Zeitstempel‑Validierung und benutzerdefinierte Trust‑Stores. + +Sie haben nun ein komplettes **pdf signature tutorial**, das zeigt, wie man **validate pdf digital signature** mit Aspose.PDF in C# durchführt. Passen Sie den Code gerne an Ihren eigenen Workflow an, fügen Sie Logging hinzu oder integrieren Sie ihn in größere Dokumenten‑Verarbeitungspipelines. Viel Spaß beim Coden! + + +## What Should You Learn Next? + + +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. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/german/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..f45f3977bc --- /dev/null +++ b/pdf/german/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: PDF-Signatur in C# mit Aspose.PDF überprüfen. Erfahren Sie, wie Sie digitale + PDF‑Signaturen validieren und PDF‑Signaturen mit nur wenigen Codezeilen auflisten. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: de +lastmod: 2026-08-08 +og_description: PDF-Signatur in C# mit Aspose.PDF überprüfen. Dieser Leitfaden zeigt + Ihnen, wie Sie digitale PDF‑Signaturen validieren, PDF‑Signaturen auflisten und + kompromittierte Signaturen effizient behandeln. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: PDF-Signatur in C# überprüfen – kurzer Aspose.PDF-Leitfaden +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: PDF-Signatur in C# mit Aspose.PDF überprüfen – vollständige Anleitung +url: /de/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF‑Signatur in C# mit Aspose.PDF – vollständige Anleitung + +Wenn Sie in einer .NET‑Anwendung **PDF‑Signatur überprüfen** müssen, zeigt Ihnen dieser Leitfaden eine prägnante Methode dafür mit Aspose.PDF. Sie lernen, wie man **digitale Signatur PDF validiert**, **PDF‑Signaturen auflistet** und kompromittierte Signaturen in nur wenigen Codezeilen erkennt. + +Das Tutorial deckt alles ab – von der Installation der Bibliothek bis zum Umgang mit Sonderfällen wie unsignierten Dokumenten oder verschlüsselten PDFs. Am Ende können Sie die Signatur‑Überprüfung in jedes C#‑Projekt integrieren und die Authentizität eingehender PDF‑Dateien sicherstellen. + +**Voraussetzungen** + +- .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.6+). +- Grundlegende Kenntnisse in C# und Visual Studio (oder einer anderen IDE Ihrer Wahl). +- Eine Aspose.PDF for .NET‑Lizenz (die kostenlose Testversion reicht für die Evaluierung). + +Wenn Sie diese Anforderungen erfüllen, können Sie mit der Überprüfung von PDF‑Signaturen beginnen. + +## PDF‑Signatur überprüfen – Projekt einrichten + +1. **Aspose.PDF NuGet‑Paket hinzufügen** + Öffnen Sie die Package Manager Console und führen Sie aus: + + ```bash + Install-Package Aspose.PDF + ``` + + Dadurch wird die `Aspose.Pdf`‑Assembly und ihre Abhängigkeiten eingebunden. + +2. **Erforderliche Namespaces importieren** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` liefert die später verwendete `Any`‑Erweiterung, während `Aspose.Pdf` die Klassen `Document` und `Signature` enthält. + +## PDF‑Dokument laden + +Der erste funktionale Schritt besteht darin, das zu prüfende PDF zu öffnen. Aspose.PDF liest die Datei in den Speicher, sodass Sie deren Signaturen abfragen können. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Warum das wichtig ist** – Das Laden des Dokuments innerhalb eines `using`‑Blocks stellt sicher, dass der Dateihandle sofort freigegeben wird und verhindert Datei‑Lock‑Probleme in langlaufenden Diensten. + +## PDF‑Signaturen auflisten + +Bevor Sie eine Signatur validieren, möchten Sie vielleicht wissen, wie viele Signaturen vorhanden sind. Dieser Schritt demonstriert die **list PDF signatures**‑Funktionalität. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Erklärung** + +- `document.Signatures` gibt eine Sammlung von `Signature`‑Objekten zurück. +- `Count` zeigt an, wie viele Signaturen existieren. +- Jede `Signature` stellt Metadaten wie `Id`, `SignatureType` und `Reason` bereit, die für Audit‑Logs nützlich sein können. + +**Sonderfall** – Wenn das PDF keine Signaturen enthält, ist `Count` `0` und die Schleife wird nicht ausgeführt. Sie können diesen Fall elegant behandeln: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Digitale Signatur PDF validieren – kompromittierte Signaturen erkennen + +Jetzt, wo Sie Signaturen enumerieren können, besteht die Kernaufgabe darin, die **verify PDF signature**‑Integrität zu prüfen. Aspose.PDF stellt die Eigenschaft `IsCompromised` bereit, die `true` zurückgibt, wenn der kryptografische Hash der Signatur nicht mehr mit dem Dokumentinhalt übereinstimmt. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Warum das funktioniert** + +- `Signature.IsCompromised` führt eine vollständige kryptografische Validierung mit der eingebetteten Zertifikatskette durch. +- Der LINQ‑Operator `Any` stoppt beim ersten kompromittierten Eintrag, wodurch die Prüfung selbst bei Dokumenten mit vielen Signaturen effizient bleibt. + +### Mehrere Signaturen einzeln verarbeiten + +Wenn Sie wissen möchten, welche konkrete Signatur fehlgeschlagen ist, iterieren Sie statt `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro‑Tipp:** Speichern Sie das Validierungsergebnis zusammen mit `sig.Id` in einer Datenbank für spätere forensische Analysen. + +## Ergebnisse ausgeben und Sonderfälle berücksichtigen + +Im Folgenden finden Sie ein vollständiges, ausführbares Programm, das die oben beschriebenen Schritte kombiniert. Es lädt ein PDF, listet alle Signaturen auf, validiert sie und gibt ein klares Ergebnis aus. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Erwartete Ausgabe (gültige Signaturen)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Erwartete Ausgabe (kompromittierte Signatur)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Häufige Stolperfallen und wie man sie vermeidet + +| Stolperfalle | Lösung | +|--------------|--------| +| Das PDF ist passwortgeschützt. | Das Passwort über `document.Encrypt.Decrypt(password)` übergeben, bevor auf `Signatures` zugegriffen wird. | +| Keine Aspose.PDF‑Lizenz gesetzt. | `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` verwenden, um Evaluierungswasserzeichen zu vermeiden. | +| Große PDFs verursachen hohen Speicherverbrauch. | Das Dokument im Streaming‑Modus (`Document.Load(stream)`) verarbeiten, anstatt die gesamte Datei auf einmal zu laden. | + +## Fazit + +Sie wissen jetzt, wie man **PDF‑Signatur in C# mit Aspose.PDF überprüft**, wie man **digitale Signatur PDF validiert** und wie man **PDF‑Signaturen auflistet** für Berichte oder Audits. Das vollständige Beispiel demonstriert das Laden eines Dokuments, das Aufzählen seiner Signaturen, das Prüfen jeder Signatur auf Kompromittierung und den Umgang mit typischen Sonderfällen. + +Nächste Schritte, die Sie erkunden können: + +- **Zeitstempel‑Token validieren**, um sicherzustellen, dass eine Signatur vor dem Ablauf eines Zertifikats erstellt wurde. +- **Signer‑Zertifikate extrahieren** (`sig.Certificate`) für eine benutzerdefinierte Vertrauens‑Store‑Validierung. +- **Integration mit ASP.NET Core**, um automatisch hochgeladene PDFs abzulehnen, die die Prüfung nicht bestehen. + +Experimentieren Sie gern mit mehreren Signaturen, benutzerdefinierter Validierungslogik oder alternativen PDF‑Bibliotheken. Wenn Ihnen dieser Leitfaden geholfen hat, teilen Sie ihn mit Kolleg*innen oder fügen Sie eigene Tipps in den Kommentaren hinzu. + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren Projekten zu erkunden. + +- [Wie man PDF überprüft – PDF‑Signatur mit Aspose validieren](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [PDF‑Signatur in C# überprüfen – Vollständiger Leitfaden zur Validierung digitaler Signatur PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Digitale Signatur verifizieren](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/german/net/text-operations/_index.md index 35819fdd29..aa6295045e 100644 --- a/pdf/german/net/text-operations/_index.md +++ b/pdf/german/net/text-operations/_index.md @@ -164,6 +164,9 @@ Ein Code-Tutorial für Aspose.PDF Net ### [Textformatierung in getaggten PDFs mit Aspose.PDF für .NET | Leitfaden zur barrierefreien und ästhetischen PDF-Erstellung](./style-text-tagged-pdfs-aspose-pdf-net/) Erfahren Sie, wie Sie mit Aspose.PDF für .NET Text in getaggten PDF-Dokumenten formatieren. Diese Anleitung behandelt Installation, Techniken und praktische Anwendungen zur Verbesserung der Barrierefreiheit. +### [Wie man PDFs mit Aspose.Pdf.AI zusammenfasst – Leitfaden](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Erfahren Sie, wie Sie mit Aspose.Pdf.AI PDFs automatisch zusammenfassen und wichtige Inhalte extrahieren. + ## Weitere Ressourcen - [Aspose.PDF für Net-Dokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/german/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/german/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..a096ebad8c --- /dev/null +++ b/pdf/german/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Wie man PDFs mit Aspose.Pdf.AI zusammenfasst – lernen Sie, PDFs mit KI + zusammenzufassen, eine PDF‑Zusammenfassung zu erstellen und die Zusammenfassung + als PDF zu speichern. Vollständiger Code und bewährte Methoden. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: de +lastmod: 2026-08-08 +og_description: Wie man PDFs mit Aspose.Pdf.AI zusammenfasst. Dieses Tutorial zeigt + Ihnen, wie Sie PDFs mit KI zusammenfassen, eine PDF‑Zusammenfassung erstellen und + die Zusammenfassung in wenigen Zeilen C# als PDF speichern. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Wie man PDF mit Aspose.Pdf.AI zusammenfasst – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Wie man PDFs mit Aspose.Pdf.AI zusammenfasst – Anleitung +url: /de/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man PDF mit Aspose.Pdf.AI zusammenfasst – Anleitung + +Wenn Sie **PDF schnell und zuverlässig zusammenfassen** möchten, können Sie ein KI‑Modell die schwere Arbeit übernehmen lassen. Dieses Tutorial zeigt Ihnen genau, wie Sie PDF mit KI zusammenfassen, eine PDF‑Zusammenfassung erzeugen und die Zusammenfassung als PDF speichern, indem Sie das Aspose.Pdf.AI SDK für .NET verwenden. Sie erhalten ein vollständiges, ausführbares Beispiel und eine Erklärung jeder Zeile, sodass Sie die Lösung an Ihre eigenen Projekte anpassen können. + +Der Leitfaden behandelt: + +* Vorbereitung des Quellordners und des API‑Schlüssels +* Erstellen eines `OpenAIClient`, der mit dem Modell kommuniziert +* Konfigurieren von Zusammenfassungsoptionen wie Temperature und Dokumentpfad +* Aufbau eines `SummaryCopilot` und asynchrones Abrufen des Zusammenfassungstextes +* Speichern der erzeugten Zusammenfassung zurück in eine PDF‑Datei + +Keine externen Dienste über den OpenAI‑Endpunkt hinaus sind erforderlich, und der Code funktioniert mit .NET 6+ und Aspose.Pdf.AI 23.7 (oder neuer). + +## Voraussetzungen + +* **.NET 6 SDK** (oder jede neuere .NET‑Version) +* **Aspose.Pdf.AI for .NET** – Installation via NuGet: `dotnet add package Aspose.Pdf.AI` +* Ein **OpenAI API‑Schlüssel** mit Zugriff auf das gewünschte Modell (z. B. `gpt‑4o`) +* Eine PDF‑Datei, die Sie zusammenfassen möchten (im Beispiel wird `SampleDocument.pdf` verwendet) + +Stellen Sie sicher, dass der Ordner, den Sie in `dataDirectory` angeben, existiert und dass die Anwendung Lese‑/Schreibrechte hat. + +## Schritt 1: Projektstruktur einrichten + +Erstellen Sie ein Konsolenprojekt (oder integrieren Sie den Code in eine bestehende .NET‑App). Die minimale `Program.cs` sieht so aus: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Warum diese Struktur wichtig ist + +* **`await using`** gibt den `OpenAIClient` automatisch frei und schließt HTTP‑Verbindungen. +* **`Path.Combine`** erstellt betriebssystemunabhängige Pfade und verhindert Fehler unter Windows vs. Linux. +* **Temperature** steuert die Kreativität; `0.5` liefert eine ausgewogene, sachliche Zusammenfassung. +* **`GetSummaryAsync`** gibt Klartext zurück, während `SaveSummaryAsync` ein korrektes PDF erzeugt, das Schriftarten und Layout beibehält. + +## Schritt 2: Die Zusammenfassungsoptionen verstehen + +Die Klasse `OpenAISummaryCopilotOptions` ermöglicht das Feintuning des Zusammenfassungsprozesses: + +| Option | Zweck | Typische Werte | +|--------|-------|----------------| +| `WithTemperature(double)` | Steuert die Zufälligkeit. `0.0` = deterministisch, `1.0` = sehr kreativ. | `0.3‑0.7` für Geschäftsdokumente | +| `WithDocument(string)` | Pfad zur Quell‑PDF. Muss eine lesbare Datei sein. | Beliebiger absoluter oder relativer Pfad | +| `WithPrompt(string)` *(optional)* | Benutzerdefinierte Eingabeaufforderung, um das Modell zu steuern. | “Fassen Sie die wichtigsten Ergebnisse in 150 Wörtern zusammen.” | + +Wenn Sie **große PDFs** (über 10 MB oder viele Seiten) haben, sollten Sie das Dokument vor der Zusammenfassung in kleinere Abschnitte aufteilen, um Token‑Limit‑Fehler zu vermeiden. Das SDK teilt nicht automatisch; Sie können `PdfDocument` aus `Aspose.Pdf` verwenden, um Seiten zu extrahieren und einzeln zu verarbeiten. + +## Schritt 3: Code ausführen und Ausgabe überprüfen + +1. Legen Sie `SampleDocument.pdf` in den `Data`‑Ordner, den Sie referenziert haben. +2. Ersetzen Sie `"YOUR_API_KEY"` durch Ihren echten OpenAI‑Schlüssel. +3. Führen Sie `dotnet run` aus. + +Sie sollten zwei Abschnitte in der Konsole sehen: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Öffnen Sie `Summary_out.pdf` mit einem beliebigen PDF‑Betrachter – es enthält denselben Zusammenfassungstext, formatiert mit einer Standardschrift. Das PDF ist vollständig durchsuchbar, weil das SDK den Text als reguläre PDF‑Seite einbettet. + +## Schritt 4: Häufige Variationen und Edge‑Case‑Behandlung + +### Nur einen Teil des Dokuments zusammenfassen + +Wenn Sie **PDF mit KI zusammenfassen** für ein bestimmtes Kapitel, extrahieren Sie zunächst diesen Bereich: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Verweisen Sie anschließend `WithDocument` auf `Chapter5.pdf`. + +### Länge der Zusammenfassung anpassen + +Sie können die Länge beeinflussen, indem Sie eine benutzerdefinierte Eingabeaufforderung hinzufügen: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API‑Fehler behandeln + +Netzwerkstörungen oder Kontingent‑Grenzen werfen `Aspose.Pdf.AI.Exceptions.AIException`. Wickeln Sie den Aufruf in einen `try / catch`‑Block: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Zusammenfassung in benutzerdefiniertem Layout speichern + +`SaveSummaryAsync` schreibt Klartext. Um das PDF zu gestalten (Titel, Kopfzeile oder Branding hinzufügen), erstellen Sie ein neues `PdfDocument` und fügen die Zusammenfassung manuell ein: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Schritt 5: Leistungstipps und bewährte Verfahren + +* **`OpenAIClient` wiederverwenden** für mehrere Zusammenfassungen im selben Prozess – das Erstellen eines Clients ist günstig, aber das Wiederverwenden des zugrunde liegenden `HttpClient` reduziert die Socket‑Erschöpfung. +* **Zusammenfassung zwischenspeichern** wenn die Quell‑PDF sich nicht ändert; Sie können den Text in einer Datenbank speichern und die API‑Abfrage überspringen. + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Codebeispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man bestimmte PDF‑Seiten mit Aspose.PDF für .NET extrahiert & speichert – ein umfassender Leitfaden](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Wie man PDF‑Anhänge mit Aspose.PDF .NET extrahiert und speichert – ein umfassender Leitfaden](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Wie man HTML mit Aspose.PDF .NET in PDF konvertiert – ein vollständiger Leitfaden](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/conversion-export/_index.md b/pdf/greek/net/conversion-export/_index.md index e06963c9c1..2cd86e58f8 100644 --- a/pdf/greek/net/conversion-export/_index.md +++ b/pdf/greek/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Master Aspose.PDF για .NET για απρόσκοπτη μετατροπή δ ### [Μετατροπή PDF σε TIFF σε .NET χρησιμοποιώντας το Aspose.PDF: Οδηγός βήμα προς βήμα](./pdf-to-tiff-conversion-aspose-pdf-net/) Μάθετε πώς να μετατρέπετε έγγραφα PDF σε εικόνες TIFF χρησιμοποιώντας το Aspose.PDF για .NET. Κατακτήστε τα προσαρμοσμένα βάθη χρωμάτων και τις προηγμένες τεχνικές επεξεργασίας εικόνας. +### [Αποθήκευση PDF ως HTML με το Aspose.PDF – οδηγός βήμα προς βήμα](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Μάθετε πώς να αποθηκεύετε αρχεία PDF σε μορφή HTML χρησιμοποιώντας το Aspose.PDF με βήμα‑βήμα οδηγίες. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/greek/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..89174d2df2 --- /dev/null +++ b/pdf/greek/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Αποθήκευση PDF ως HTML χρησιμοποιώντας το Aspose.PDF σε C#. Μάθετε πώς + να μετατρέπετε PDF σε HTML, να παραλείπετε ραστερ εικόνες και να διαχειρίζεστε κοινές + περιπτώσεις άκρων. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: el +lastmod: 2026-08-08 +og_description: Αποθηκεύστε το PDF ως HTML χρησιμοποιώντας το Aspose.PDF. Αυτός ο + οδηγός σας δείχνει πώς να μετατρέψετε PDF σε HTML, να παραλείψετε τις ραστερ εικόνες + και να αποφύγετε κοινά προβλήματα. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Αποθήκευση PDF ως HTML με το Aspose.PDF – πλήρης οδηγός C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Αποθήκευση PDF ως HTML με το Aspose.PDF – οδηγός βήμα‑προς‑βήμα +url: /el/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Αποθήκευση PDF ως HTML με Aspose.PDF – βήμα‑βήμα οδηγός + +Αν χρειάζεστε να **αποθηκεύσετε PDF ως HTML** γρήγορα, αυτό το tutorial σας δείχνει ακριβώς πώς να το κάνετε με το Aspose.PDF για .NET. Είτε δημιουργείτε μια web εφαρμογή προβολής εγγράφων είτε εξάγετε αναφορές για SEO‑φιλική ευρετηρίαση, θα δείτε μια πλήρη, εκτελέσιμη λύση που μετατρέπει PDF σε HTML ενώ σας δίνει λεπτομερή έλεγχο πάνω στις raster εικόνες. + +Επιπλέον του κύριου έργου, θα καλύψουμε και τις επιλογές **aspose pdf html conversion** που σας επιτρέπουν να παραλείψετε raster εικόνες, να προσαρμόσετε τη διαχείριση CSS, και να διαχειριστείτε μεγάλα έγγραφα αποδοτικά. Στο τέλος αυτού του οδηγού θα έχετε ένα αυτόνομο πρόγραμμα που μπορείτε να ενσωματώσετε σε οποιοδήποτε .NET project. + +## Προαπαιτούμενα + +* .NET 6.0 SDK ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Core και .NET Framework) +* Visual Studio 2022 ή οποιοδήποτε IDE που υποστηρίζει C# +* Άδεια Aspose.PDF για .NET (η δωρεάν δοκιμή λειτουργεί για αξιολόγηση) +* Ένα αρχείο PDF με όνομα `report.pdf` τοποθετημένο σε φάκελο που μπορείτε να αναφερθείτε από τον κώδικα + +Δεν απαιτούνται πρόσθετα πακέτα NuGet εκτός από το `Aspose.Pdf`. + +## Βήμα 1: Εγκατάσταση του πακέτου NuGet Aspose.PDF + +Ανοίξτε το τερματικό στο φάκελο του έργου σας και εκτελέστε: + +```bash +dotnet add package Aspose.Pdf +``` + +Το πακέτο προσθέτει το namespace `Aspose.Pdf`, το οποίο περιέχει την κλάση `Document` και τον τύπο `HtmlSaveOptions` που χρησιμοποιείται για λειτουργίες **convert pdf to html**. + +## Βήμα 2: Δημιουργία ενός console project και προσθήκη using directives + +Δημιουργήστε μια νέα εφαρμογή console εάν δεν έχετε ήδη μία: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Στη συνέχεια ανοίξτε το `Program.cs` και προσθέστε τα απαιτούμενα namespaces: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Αυτές οι οδηγίες σας δίνουν πρόσβαση στο core PDF API και στις επιλογές αποθήκευσης HTML που ελέγχουν τη διαδικασία **aspose convert pdf html**. + +## Βήμα 3: Φόρτωση του PDF εγγράφου + +Η πρώτη γραμμή λειτουργίας διαβάζει το πηγαίο PDF σε ένα αντικείμενο `Aspose.Pdf.Document`. Αυτό το αντικείμενο αντιπροσωπεύει ολόκληρο το αρχείο PDF στη μνήμη και παρέχει μεθόδους για αποθήκευση, επεξεργασία και εξαγωγή περιεχομένου. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Γιατί είναι σημαντικό*: Η φόρτωση του εγγράφου μία φορά διατηρεί τη χρήση μνήμης προβλέψιμη, ειδικά για μεγάλα PDFs. Εάν το αρχείο δεν βρεθεί, το Aspose ρίχνει `FileNotFoundException`, οπότε βεβαιωθείτε ότι η διαδρομή είναι σωστή. + +## Βήμα 4: Διαμόρφωση επιλογών αποθήκευσης HTML + +`HtmlSaveOptions` σας επιτρέπει να ρυθμίσετε λεπτομερώς πώς μετατρέπεται το PDF. Σε αυτό το tutorial παραλείπουμε raster εικόνες για να διατηρήσουμε το αποτέλεσμα ελαφρύ, αλλά μπορείτε να αλλάξετε τη λειτουργία σε `EmbedAll` εάν τις χρειάζεστε. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Βασικά σημεία**: + +* `RasterImagesSavingMode.Skip` λέει στο Aspose να αγνοήσει τις bitmap εικόνες (JPEG, PNG) κατά τη μετατροπή. Αυτό είναι ιδανικό όταν το πηγαίο PDF περιέχει σαρωμένες σελίδες που δεν χρειάζεστε στην προβολή HTML. +* Μπορείτε να μεταβείτε σε `EmbedAll` ή `External` εάν θέλετε οι εικόνες να αποθηκευτούν ως ξεχωριστά αρχεία. +* Η ιδιότητα `ResourcesFolder` γίνεται σχετική μόνο όταν οι εικόνες αποθηκεύονται εξωτερικά. + +## Βήμα 5: Αποθήκευση του εγγράφου ως HTML + +Τώρα γράφετε το αρχείο HTML στο δίσκο χρησιμοποιώντας τις διαμορφωμένες επιλογές. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Μετά το τέλος αυτής της κλήσης, το `report.html` περιέχει το κειμενικό περιεχόμενο, τα διανυσματικά γραφικά και τη διάταξη που διατηρήθηκαν από το αρχικό PDF, αλλά χωρίς raster εικόνες. Μπορείτε να ανοίξετε το αρχείο σε έναν περιηγητή για να επαληθεύσετε το αποτέλεσμα. + +## Αναμενόμενο αποτέλεσμα + +Όταν ανοίξετε το `report.html` σε Chrome ή Edge, θα πρέπει να δείτε: + +* Όλες οι επικεφαλίδες, παράγραφοι και διανυσματικά σχήματα να αποδίδονται σωστά. +* Καμία ετικέτα `` για raster εικόνες (παραλείπονται λόγω της λειτουργίας `Skip`). +* Καθαρό, ελάχιστο CSS είτε ενσωματωμένο (inline) είτε σε ξεχωριστό stylesheet, ανάλογα με την επιλογή που κάνατε. + +Εάν χρειάζεται να επιβεβαιώσετε ότι οι εικόνες παραλείφθηκαν, ελέγξτε τον πηγαίο κώδικα της σελίδας (`Ctrl+U`). Δεν θα βρείτε καταχωρήσεις ``. + +## Βήμα 6: Διαχείριση κοινών ειδικών περιπτώσεων + +### 6.1 Μεγάλα PDFs (> 100 MB) + +Για πολύ μεγάλα αρχεία, ενεργοποιήστε τη ροή (streaming) για να μειώσετε την πίεση στη μνήμη: + +```csharp +htmlOpts.Streaming = true; +``` + +### 6.2 PDFs με προστασία κωδικού + +Εάν το πηγαίο PDF είναι κρυπτογραφημένο, δώστε τον κωδικό πριν από την αποθήκευση: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Η προσπάθεια αποθήκευσης χωρίς αποκρυπτογράφηση ρίχνει `InvalidPasswordException`. + +### 6.3 Unicode χαρακτήρες + +Το Aspose.PDF ενσωματώνει αυτόματα γραμματοσειρές Unicode, αλλά μπορείτε να επιβάλετε μια συγκεκριμένη γραμματοσειρά για συνεπή απόδοση: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Προσαρμοσμένη ονομασία αρχείων για πολλαπλές σελίδες + +Εάν θέλετε κάθε σελίδα PDF ως ξεχωριστό αρχείο HTML, ορίστε: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Αυτό δημιουργεί τα `report_page_1.html`, `report_page_2.html`, κ.λπ., που μπορεί να είναι χρήσιμα για σελιδοποίηση σε web εφαρμογές. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Παρακάτω βρίσκεται το πλήρες πρόγραμμα που ενσωματώνει όλα τα βήματα που συζητήθηκαν. Αντιγράψτε το στο `Program.cs`, προσαρμόστε τις διαδρομές και εκτελέστε `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Επαλήθευση**: Μετά την εκτέλεση, η κονσόλα εμφανίζει το μήνυμα επιτυχίας. Ανοίξτε το παραγόμενο αρχείο HTML σε έναν περιηγητή για να επιβεβαιώσετε ότι το κείμενο και τα διανυσματικά γραφικά εμφανίζονται σωστά και ότι οι raster εικόνες παραλείπονται. + +## Συμβουλές και παγίδες + +* **Συμβουλή**: Εάν αργότερα χρειαστείτε τις raster εικόνες, αλλάξτε το `RasterImagesSavingMode` σε `External` και ορίστε το `ResourcesFolder`. Αυτό δημιουργεί έναν υποφάκελο `images` με τα εξαγόμενα bitmap. +* **Προσοχή**: Η χρήση της προεπιλεγμένης λειτουργίας `Skip` σε PDFs που βασίζονται έντονα σε σαρωμένες εικόνες θα δημιουργήσει κενές περιοχές όπου ανήκουν οι εικόνες. Πάντα δοκιμάζετε με ένα αντιπροσωπευτικό δείγμα των εγγράφων σας. +* **Συμβουλή απόδοσης**: Η επαναχρησιμοποίηση ενός μόνο αντικειμένου `HtmlSaveOptions` για πολλαπλά έγγραφα μειώνει το κόστος δημιουργίας αντικειμένων σε μαζικές μετατροπές. +* **Έλεγχος έκδοσης**: Το API που εμφανίζεται λειτουργεί με το Aspose.PDF για .NET έκδοση 23.9 και μεταγενέστερη. Παλαιότερες εκδόσεις μπορεί να χρησιμοποιούν `HtmlSaveOptions.RasterImagesSavingMode` με ελαφρώς διαφορετικό όνομα enum. + +## Συμπέρασμα + +Τώρα γνωρίζετε πώς να **αποθηκεύσετε PDF ως HTML** χρησιμοποιώντας το Aspose.PDF, πώς να ελέγχετε τη διαχείριση raster εικόνων, και πώς να αντιμετωπίζετε τυπικές προκλήσεις όπως μεγάλα αρχεία, προστασία κωδικού και έξοδο HTML ανά σελίδα. Αυτή η πλήρης λύση σας επιτρέπει να ενσωματώσετε τη μετατροπή PDF‑σε‑HTML σε οποιαδήποτε εφαρμογή C# με σιγουριά. + +### Τι ακολουθεί; + +* Εξερευνήστε το **aspose pdf html conversion** για ενσωμάτωση γραμματοσειρών και προσαρμογή CSS. +* Συνδυάστε αυτή τη μετατροπή με ένα web API για να παρέχετε HTML κατ' απαίτηση. +* Δοκιμάστε την αντίστροφη κατεύθυνση—**convert pdf to html** και έπειτα πίσω σε PDF—για να επαληθεύσετε την ακεραιότητα του round‑trip. + +Μη διστάσετε να πειραματιστείτε με τις επιλογές και να μοιραστείτε τα ευρήματά σας στα σχόλια ή στα φόρουμ του Aspose. Καλή προγραμματιστική! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικά θέματα που βασίζονται στις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κυριαρχήσετε σε πρόσθετα χαρακτηριστικά του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/greek/net/digital-signatures/_index.md index e08abd976f..6776dfa46d 100644 --- a/pdf/greek/net/digital-signatures/_index.md +++ b/pdf/greek/net/digital-signatures/_index.md @@ -59,6 +59,9 @@ ### [Επικύρωση υπογραφής PDF με το Aspose – Μετατροπή PDF σε HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Μάθετε πώς να επικυρώνετε υπογραφές PDF και να μετατρέπετε PDF σε HTML με το Aspose.PDF για .NET. +### [Πώς να επαληθεύσετε PDF με το Aspose.PDF – έλεγχος εγκυρότητας υπογραφής PDF σε C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Μάθετε πώς να ελέγξετε την εγκυρότητα της ψηφιακής υπογραφής PDF χρησιμοποιώντας το Aspose.PDF σε C#. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/greek/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..a10ad1a92c --- /dev/null +++ b/pdf/greek/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Πώς να επαληθεύσετε PDF χρησιμοποιώντας το Aspose.PDF και να επαληθεύσετε + την ψηφιακή υπογραφή PDF. Ακολουθήστε αυτόν τον οδηγό βήμα‑βήμα για να ελέγξετε + γρήγορα την υπογραφή PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: el +lastmod: 2026-08-08 +og_description: Πώς να επαληθεύσετε PDF χρησιμοποιώντας το Aspose.PDF. Μάθετε πώς + να επαληθεύετε ψηφιακή υπογραφή PDF και να ελέγχετε την εγκυρότητα της υπογραφής + PDF σε λίγες γραμμές κώδικα C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Πώς να επαληθεύσετε το PDF – ελέγξτε την εγκυρότητα της υπογραφής PDF με + το Aspose.PDF σε C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Πώς να επικυρώσετε PDF με το Aspose.PDF – ελέγξτε την εγκυρότητα της υπογραφής + PDF σε C# +url: /el/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να επικυρώσετε PDF με Aspose.PDF – έλεγχος εγκυρότητας υπογραφής PDF σε C# + +Αν χρειάζεστε **πώς να επικυρώσετε PDF** αρχεία που περιέχουν ψηφιακές υπογραφές, αυτό το tutorial σας παρουσιάζει μια πλήρη λύση. Θα μάθετε πώς να φορτώσετε ένα PDF, να δημιουργήσετε έναν ελεγκτή πιστοποιητικών και να ελέγξετε την εγκυρότητα της υπογραφής PDF με το Aspose.PDF for .NET. + +Η επικύρωση μιας ψηφιακής υπογραφής PDF είναι κοινή απαίτηση για συμμόρφωση, τιμολόγηση και ασφαλή ανταλλαγή εγγράφων. Στο τέλος αυτού του οδηγού μπορείτε με σιγουριά να επαληθεύσετε εάν ένα υπογεγραμμένο PDF είναι αξιόπιστο, και θα κατανοήσετε πώς να διαχειρίζεστε τυπικές περιπτώσεις όπως ελλιπή πιστοποιητικά ή πολλαπλές υπογραφές. + +## Prerequisites + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +- .NET 6.0 ή νεότερο εγκατεστημένο +- Ένα IDE όπως το Visual Studio 2022 (οποιοσδήποτε επεξεργαστής που υποστηρίζει C# λειτουργεί) +- Μια αδειοδοτημένη έκδοση του **Aspose.PDF for .NET** (η δωρεάν δοκιμή λειτουργεί για αξιολόγηση) +- Ένα υπογεγραμμένο αρχείο PDF (`signed.pdf`) και, εάν η υπογραφή βασίζεται σε ιδιωτικό CA, το αντίστοιχο αξιόπιστο πιστοποιητικό (`trustedCertificate.pfx`) + +Δεν απαιτούνται πρόσθετα πακέτα NuGet πέρα από το `Aspose.PDF`. + +## Step 1: Install Aspose.PDF + +Ανοίξτε ένα τερματικό στο φάκελο του έργου σας και εκτελέστε: + +```bash +dotnet add package Aspose.PDF +``` + +Η εντολή προσθέτει τη νεότερη βιβλιοθήκη Aspose.PDF, η οποία περιλαμβάνει τις κλάσεις `Document` και `CertificateValidator` που χρησιμοποιούνται αργότερα. + +## Step 2: Load the PDF document + +Η φόρτωση ενός PDF είναι η πρώτη ενέργεια που εκτελείτε όταν **πώς να φορτώσετε pdf** προγραμματιστικά. Ο κατασκευαστής `Document` δέχεται διαδρομή αρχείου, ροή ή πίνακα byte. Η χρήση πλήρους διαδρομής διατηρεί το παράδειγμα σαφές. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Γιατί είναι σημαντικό:** Το αντικείμενο `Document` αντιπροσωπεύει ολόκληρο το αρχείο PDF στη μνήμη. Χωρίς τη φόρτωση του αρχείου, δεν μπορείτε να έχετε πρόσβαση στη συλλογή `Signatures`, η οποία απαιτείται για **check pdf signature** δεδομένα. + +## Step 3: Prepare the certificate validator + +Μια ψηφιακή υπογραφή θεωρείται αξιόπιστη μόνο εάν το πιστοποιητικό υπογραφής αλυσσοδένει σε ρίζα που εμπιστεύεστε. Η `CertificateValidator` σας επιτρέπει να κατευθύνετε το Aspose.PDF σε ένα αξιόπιστο κατάστημα πιστοποιητικών ή σε συγκεκριμένο αρχείο PFX. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Εάν το PDF σας χρησιμοποιεί δημόσιο CA που ήδη εμπιστεύεται το Windows, μπορείτε να παραλείψετε το `certPath` και να δημιουργήσετε το `CertificateValidator` με τον προεπιλεγμένο κατασκευαστή του. Η παροχή προσαρμοσμένου PFX είναι χρήσιμη για εσωτερικά περιβάλλοντα PKI. + +## Step 4: Validate the first digital signature + +Ένα PDF μπορεί να περιέχει πολλαπλές υπογραφές. Για απλότητα, αυτό το tutorial επικυρώνει την πρώτη υπογραφή (`Signatures[0]`). Η μέθοδος `Validate` επιστρέφει `true` όταν η υπογραφή είναι κρυπτογραφικά αμετάβλητη **και** το πιστοποιητικό υπογραφής είναι αξιόπιστο. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Τι συμβαίνει στο παρασκήνιο:** +- Η μέθοδος ελέγχει το hash του υπογεγραμμένου περιεχομένου έναντι της τιμής της υπογραφής. +- Δημιουργεί την αλυσίδα πιστοποιητικών χρησιμοποιώντας τον παρεχόμενο ελεγκτή. +- Η κατάσταση ανάκλησης (CRL/OCSP) αξιολογείται εάν ο ελεγκτής είναι ρυθμισμένος γι' αυτό. + +### Handling multiple signatures + +Εάν το PDF σας περιέχει περισσότερες από μία υπογραφές, επαναλάβετε τη συλλογή `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Αυτό το μοτίβο σας επιτρέπει να **check pdf signature** σε κάθε σελίδα και να αναφέρετε τα μεμονωμένα αποτελέσματα. + +## Step 5: Output the validation result + +Τέλος, γράψτε το αποτέλεσμα στην κονσόλα. Σε παραγωγικό κώδικα πιθανότατα θα καταγράφατε το αποτέλεσμα ή θα εγείρετε εξαίρεση για μη έγκυρη υπογραφή. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +ή + +``` +Invalid +``` + +Το μήνυμα αντανακλά το boolean που επιστρέφει η `Validate`. Ένα αποτέλεσμα “Invalid” μπορεί να υποδεικνύει παραποιημένο έγγραφο, μη αξιόπιστο πιστοποιητικό ή ληγμένο πιστοποιητικό υπογραφής. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +Εάν λαμβάνετε `Invalid` και γνωρίζετε ότι η υπογραφή πρέπει να είναι αξιόπιστη, βεβαιωθείτε ότι το σωστό ριζικό πιστοποιητικό έχει παρασχεθεί στο `CertificateValidator`. Χρησιμοποιήστε την υπερφόρτωση που δέχεται `X509Certificate2Collection` για πολλαπλές ρίζες. + +### 2. Signature with external references +Ορισμένες υπογραφές καλύπτουν εξωτερικό περιεχόμενο (π.χ., συνημμένο αρχείο). Βεβαιωθείτε ότι οι εξωτερικοί πόροι είναι προσβάσιμοι· διαφορετικά η επαλήθευση του hash αποτυγχάνει. + +### 3. Time‑stamp validation +Μια υπογραφή μπορεί να περιλαμβάνει διακριτικό χρονικής σήμανσης. Για να το επικυρώσετε, ρυθμίστε τον ελεγκτή ώστε να ελέγχει τα πιστοποιητικά της αρχής χρονικής σήμανσης (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +Η φόρτωση ενός PDF εκατοντάδων σελίδων μπορεί να καταναλώσει μνήμη. Εάν χρειάζεστε μόνο τα δεδομένα της υπογραφής, χρησιμοποιήστε το `PdfFileEditor` για να εξάγετε το λεξικό υπογραφής χωρίς να αποδώσετε τις σελίδες. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +Οι παρουσίες `Document` δεν είναι ασφαλείς για χρήση από πολλαπλά νήματα. Δημιουργήστε ένα νέο `Document` ανά νήμα όταν επικυρώνετε πολλά PDF παράλληλα. + +## Full, runnable example + +Παρακάτω βρίσκεται το πλήρες πρόγραμμα που μπορείτε να αντιγράψετε, να επικολλήσετε και να εκτελέσετε αφού ενημερώσετε τις διαδρομές αρχείων. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Running the program** prints a line for each signature, clearly indicating whether the PDF passes the **validate pdf digital signature** check. + +## Conclusion + +Τώρα ξέρετε **πώς να επικυρώσετε PDF** αρχεία που περιέχουν ψηφιακές υπογραφές χρησιμοποιώντας το Aspose.PDF for .NET. Το tutorial κάλυψε τη φόρτωση PDF, τη ρύθμιση ελεγκτή πιστοποιητικών, τον έλεγχο εγκυρότητας υπογραφής PDF, τη διαχείριση πολλαπλών υπογραφών και την αντιμετώπιση κοινών προβλημάτων. + +Στη συνέχεια, εξερευνήστε σχετικά θέματα όπως **how to sign PDF**, **how to add timestamp tokens**, και **how to extract signed content**. Αυτές οι επεκτάσεις σας επιτρέπουν να δημιουργήσετε μια πλήρη, άκρη‑σε‑άκρη ασφαλή ροή εργασίας εγγράφων σε C#. + +--- + + +## What Should You Learn Next? + + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που βασίζονται στις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει ολοκληρωμένα παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κυριαρχήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/greek/net/document-conversion/_index.md index 83a706dd9b..a54a4cf544 100644 --- a/pdf/greek/net/document-conversion/_index.md +++ b/pdf/greek/net/document-conversion/_index.md @@ -57,7 +57,8 @@ | [XML σε PDF](./xml-to-pdf/) | Μάθετε πώς να μετατρέψετε XML σε PDF χρησιμοποιώντας το Aspose.PDF για .NET σε αυτό το ολοκληρωμένο βήμα προς βήμα σεμινάριο, με παραδείγματα κώδικα και λεπτομερείς εξηγήσεις. | | [Ορισμός διαδρομής εικόνας από XML σε PDF](./xml-to-pdfset-image-path/) | Μάθετε πώς να μετατρέπετε εύκολα XML σε PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο λεπτομερής οδηγός σας καθοδηγεί βήμα προς βήμα στη διαδικασία, από την εγκατάσταση έως την ολοκλήρωσή της. | | [XPS σε PDF](./xps-to-pdf/) Μάθετε πώς να μετατρέπετε αρχεία XPS σε PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτό το βήμα προς βήμα εκπαιδευτικό βίντεο. Ιδανικό για προγραμματιστές και λάτρους των εγγράφων. | -| [Μετατροπή PDF σε PDF/X‑4 σε C# – Βήμα‑βήμα Εκπαιδευτικό Σεμινάριο ASP.NET PDF](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Μάθετε πώς να μετατρέψετε αρχεία PDF σε PDF/X‑4 χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον αναλυτικό οδηγό βήμα‑βήμα. | +| [Μετατροπή PDF σε PDF/X‑4 σε C# – Βήμα‑βήμα Εκπαιδευτικό Σεμινάριο ASP.NET PDF](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Μάθετε πώς να μετατρέψετε αρχεία PDF σε PDF/X‑4 χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον αναλυτικό οδηγό βήμα‑βήμα. | +| [Σεμινάριο μετατροπής PDFX4 – ορισμός προτύπου PDF και μετατροπή PDF με το Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Μάθετε πώς να ορίσετε πρότυπο PDF/X‑4 και να μετατρέψετε PDF χρησιμοποιώντας το Aspose.PDF για .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/greek/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..89613b30fe --- /dev/null +++ b/pdf/greek/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,230 @@ +--- +category: general +date: 2026-08-08 +description: Μάθημα μετατροπής pdfx4 που δείχνει πώς να ορίσετε το πρότυπο PDF σε + PDF/X‑4 και να μετατρέψετε PDF με το Aspose για αξιόπιστη μετατροπή μορφής. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: el +lastmod: 2026-08-08 +og_description: Το εκπαιδευτικό σεμινάριο μετατροπής pdfx4 εξηγεί πώς να ορίσετε το + πρότυπο PDF σε PDF/X‑4 και να εκτελέσετε αξιόπιστη μετατροπή PDF χρησιμοποιώντας + το Aspose σε C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Οδηγός μετατροπής pdfx4 – ορίστε το πρότυπο PDF και μετατρέψτε PDF χρησιμοποιώντας + το Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Οδηγός μετατροπής pdfx4 – ορίστε το πρότυπο PDF και μετατρέψτε PDF χρησιμοποιώντας + το Aspose +url: /el/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversion tutorial – ορισμός προτύπου PDF και μετατροπή PDF με Aspose + +Αν χρειάζεστε ένα **pdfx4 conversion tutorial**, αυτός ο οδηγός σας καθοδηγεί μέσα από τη διαδικασία ορισμού του προτύπου PDF σε PDF/X‑4 και της μετατροπής ενός PDF χρησιμοποιώντας το Aspose. Είτε προετοιμάζετε αρχεία έτοιμα για εκτύπωση είτε διασφαλίζετε τη συμμόρφωση με μακροπρόθεσμη αρχειοθέτηση, θα μάθετε μια αξιόπιστη ροή εργασίας **aspose pdf format conversion** που λειτουργεί με .NET 6 και νεότερες εκδόσεις. + +Ο οδηγός καλύπτει τα πάντα, από τη ρύθμιση του έργου μέχρι τη διαχείριση ειδικών περιπτώσεων όπως η έλλειψη αρχείων προέλευσης ή μη υποστηριζόμενες λειτουργίες. Στο τέλος του άρθρου θα έχετε ένα αυτόνομο πρόγραμμα C# που παράγει ένα αρχείο συμβατό με PDF/X‑4, έτοιμο για επόμενες διαδικασίες. + +## Prerequisites + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +- .NET 6 SDK ή νεότερο εγκατεστημένο ([download here](https://dotnet.microsoft.com/download)) +- Ένα έγκυρο license του Aspose.PDF for .NET (η δωρεάν δοκιμή λειτουργεί για δοκιμές) +- Visual Studio 2022, VS Code ή οποιοδήποτε IDE που υποστηρίζει ανάπτυξη .NET +- Ένα πηγαίο αρχείο PDF που θέλετε να μετατρέψετε (τοποθετήστε το σε γνωστό φάκελο) + +Αυτές οι προϋποθέσεις διασφαλίζουν ότι ο κώδικας θα εκτελεστεί χωρίς πρόσθετη διαμόρφωση. + +## Step 1: Create a new .NET console project + +Ανοίξτε ένα τερματικό και εκτελέστε τις παρακάτω εντολές για να δημιουργήσετε μια κονσολική εφαρμογή με όνομα `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Προσθέστε το πακέτο NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Το πακέτο `Aspose.Pdf` παρέχει την κλάση `Document` και το `PdfFormatConversionOptions` που απαιτούνται για λειτουργίες **convert pdf pdfx4**. + +## Step 2: Write the conversion code + +Ανοίξτε το `Program.cs` (ή `Program.cs` αν χρησιμοποιείτε τις νέες δηλώσεις top‑level) και αντικαταστήστε το περιεχόμενό του με το πλήρες παράδειγμα παρακάτω. Ο κώδικας δείχνει πώς να **set pdf standard** σε PDF/X‑4, εκτελεί τη μετατροπή και περιλαμβάνει διαχείριση σφαλμάτων για κοινά προβλήματα. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Why each part matters + +- **Argument validation** αποτρέπει το πρόγραμμα από το να καταρρεύσει όταν ο χρήστης ξεχάσει τη διαδρομή του αρχείου. +- **`Document` loading** ρίχνει σαφή εξαίρεση αν το πηγαίο PDF λείπει ή είναι κατεστραμμένο, κάτι που είναι απαραίτητο για μια αξιόπιστη εμπειρία **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** είναι το σημείο όπου **set pdf standard**. Αναθέτοντας `PdfStandard.PdfX4`, το Aspose προσαρμόζει αυτόματα τους χρωματικούς χώρους, ενσωματώνει τις απαιτούμενες γραμματοσειρές και γράφει τα απαραίτητα μεταδεδομένα PDF/X‑4. +- **`FontEmbeddingMode.EmbedAll`** διασφαλίζει ότι κάθε γραμματοσειρά που χρησιμοποιείται στο πηγαίο PDF ενσωματώνεται, κάτι που είναι κοινή απαίτηση για PDF έτοιμα για εκτύπωση. +- **`doc.Convert`** εκτελεί την πραγματική **aspose pdf format conversion**. Η μέθοδος γράφει το νέο αρχείο με μία κλήση, απλοποιώντας τη ροή εργασίας. + +## Step 3: Run the converter + +Κατασκευάστε το έργο και εκτελέστε το με τις διαδρομές προέλευσης και προορισμού: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Αν όλα λειτουργήσουν, η κονσόλα θα εμφανίσει: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Τώρα μπορείτε να ανοίξετε το `output_pdfx4.pdf` σε οποιονδήποτε προβολέα PDF που υποστηρίζει PDF/X‑4 (π.χ., Adobe Acrobat Pro) και να επαληθεύσετε τη συμμόρφωση μέσω *File → Properties → Standards*. + +## Step 4: Verify PDF/X‑4 compliance (optional) + +Για παραγωγικές γραμμές μπορεί να θέλετε να επικυρώσετε προγραμματιστικά το αποτέλεσμα. Το Aspose παρέχει την κλάση `PdfComplianceChecker` (διαθέσιμη στο πακέτο `Aspose.Pdf`) η οποία μπορεί να χρησιμοποιηθεί ως εξής: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Η εκτέλεση αυτού του αποσπάσματος μετά τη μετατροπή σας δίνει ένα σαφές αποτέλεσμα επιτυχίας/αποτυχίας, χρήσιμο για αυτοματοποιημένες CI/CD γραμμές. + +## Step 5: Common pitfalls and best‑practice tips + +| Πρόβλημα | Γιατί συμβαίνει | Πώς να το αποφύγετε | +|----------|----------------|----------------------| +| Απουσία γραμματοσειρών στο πηγαίο PDF | Οι γραμματοσειρές αναφέρονται αλλά δεν είναι ενσωματωμένες, προκαλώντας προειδοποιήσεις μετατροπής | Χρησιμοποιήστε `FontEmbeddingMode.EmbedAll` όπως φαίνεται παραπάνω | +| Το πηγαίο PDF περιέχει διαφανή αντικείμενα που δεν επιτρέπονται στο PDF/X‑4 | Το PDF/X‑4 απαγορεύει ορισμένες διαφάνειες | Προεπεξεργαστείτε το PDF με `doc.ProcessTransparentObjects()` πριν τη μετατροπή | +| Μεγάλα αρχεία προκαλούν OutOfMemoryException | Ολόκληρο το έγγραφο φορτώνεται στη μνήμη | Διαβάστε το αρχείο με ροή: `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Η άδεια δεν έχει εφαρμοστεί | Η δοκιμαστική έκδοση προσθέτει υδατογραφήματα | Κλήση `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` πριν από οποιαδήποτε χρήση του API του Aspose | + +Η εφαρμογή αυτών των συμβουλών εξασφαλίζει μια ομαλή εμπειρία **convert pdf pdfx4** σε παραγωγικά περιβάλλοντα. + +## Step 6: Extending the tutorial + +Μόλις εξοικειωθείτε με το βασικό **pdfx4 conversion tutorial**, μπορείτε να εξερευνήσετε: + +- **Batch conversion**: επανάληψη σε φάκελο PDF και μετατροπή καθενός σε PDF/X‑4. +- **Metadata injection**: προσθήκη XMP μεταδεδομένων που απαιτούνται από συγκεκριμένα εκτυπωτήρια. +- **Color profile management**: προσθήκη προφίλ ICC με `doc.ColorSpace = ColorSpace.DeviceRGB;` πριν τη μετατροπή. + +Όλες αυτές οι επεκτάσεις βασίζονται στην ίδια βάση **aspose pdf format conversion** που παρουσιάστηκε εδώ. + +## Conclusion + +Αυτό το **pdfx4 conversion tutorial** σας έδειξε πώς να **set pdf standard** σε PDF/X‑4, να εκτελέσετε μια αξιόπιστη **convert pdf using Aspose**, και να επαληθεύσετε το αποτέλεσμα. Τώρα έχετε ένα πλήρες, εκτελέσιμο πρόγραμμα C# που μπορεί να ενσωματωθεί σε μεγαλύτερες γραμμές επεξεργασίας εγγράφων ή να χρησιμοποιηθεί ως αυτόνομη υπηρεσία. Πειραματιστείτε με επεξεργασία δέσμης, διαχείριση μεταδεδομένων ή εναλλακτικά πρότυπα PDF (PDF/A‑2b, PDF/UA) για να εμβαθύνετε τις γνώσεις σας στην **aspose pdf format conversion**. + +Καλή προγραμματιστική δουλειά και απολαύστε την εμπιστοσύνη που προσφέρει η έξοδος συμβατή με PDF/X‑4! + +## What Should You Learn Next? + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να κατακτήσετε επιπλέον δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στα δικά σας έργα. + +- [Μετατροπή PDF/A σε Κανονικό PDF Χρησιμοποιώντας Aspose.PDF .NET : Ολοκληρωμένος Οδηγός](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Πώς να Ορίσετε Ημερομηνία Λήξης σε PDF χρησιμοποιώντας Aspose.PDF για .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/greek/net/document-creation/_index.md b/pdf/greek/net/document-creation/_index.md index 89195bb47e..1a3dfc750d 100644 --- a/pdf/greek/net/document-creation/_index.md +++ b/pdf/greek/net/document-creation/_index.md @@ -76,9 +76,13 @@ ### [Δημιουργία εγγράφου PDF με Aspose.PDF – Προσθήκη σελίδας, σχήματος & αποθήκευση](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Μάθετε πώς να δημιουργήσετε ένα έγγραφο PDF, να προσθέσετε σελίδα, σχήμα και να το αποθηκεύσετε χρησιμοποιώντας το Aspose.PDF. + ### [Δημιουργία εγγράφου PDF με το Aspose.PDF – Οδηγός βήμα προς βήμα](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Μάθετε πώς να δημιουργήσετε ένα έγγραφο PDF από το μηδέν χρησιμοποιώντας το Aspose.PDF με αναλυτικές οδηγίες βήμα‑βήμα. +### [Δημιουργία εγγράφου PDF σε C# με το Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Μάθετε πώς να δημιουργήσετε ένα έγγραφο PDF σε C# χρησιμοποιώντας το Aspose.PDF. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/greek/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..c0fe279c7a --- /dev/null +++ b/pdf/greek/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Δημιουργήστε έγγραφο PDF σε C# χρησιμοποιώντας το Aspose.Pdf. Μάθετε + πώς να προσθέσετε κενή σελίδα PDF, να προσθέσετε παράγραφο σε PDF και να τοποθετήσετε + κείμενο σε PDF με ακριβείς συντεταγμένες. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: el +lastmod: 2026-08-08 +og_description: Δημιουργήστε γρήγορα έγγραφο PDF σε C#. Αυτό το σεμινάριο δείχνει + πώς να προσθέσετε κενή σελίδα PDF, να προσθέσετε παράγραφο σε PDF και να τοποθετήσετε + κείμενο σε PDF χρησιμοποιώντας το Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Δημιουργία εγγράφου PDF σε C# με το Aspose.Pdf – πλήρης οδηγός +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Δημιουργία εγγράφου PDF σε C# με το Aspose.Pdf +url: /el/net/document-creation/create-pdf-document-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** προγραμματιστικά, αυτός ο οδηγός σας δείχνει ακριβώς πώς. Χρησιμοποιώντας το Aspose.Pdf για .NET μπορείτε να προσθέσετε μια κενή σελίδα pdf, να εισάγετε μια παράγραφο σε pdf και να τοποθετήσετε κείμενο σε pdf με ακρίβεια pixel‑perfect—όλα σε λίγες γραμμές κώδικα C#. + +Θα ολοκληρώσετε το tutorial με ένα πλήρως λειτουργικό αρχείο PDF που περιέχει μια σημείωση τοποθετημένη στις συντεταγμένες που καθορίζετε. Χωρίς εξωτερικά εργαλεία, χωρίς χειροκίνητη επεξεργασία—απλός, επαναλαμβανόμενος κώδικας που μπορείτε να ενσωματώσετε σε οποιοδήποτε έργο .NET. + +## Τι θα μάθετε + +* Πώς να **δημιουργήσετε έγγραφο pdf** με Aspose.Pdf. +* Ο σωστός τρόπος για **προσθήκη κενής σελίδας pdf** και γιατί πρέπει να υπάρχει μια σελίδα πριν προστεθεί περιεχόμενο. +* Πώς να **προσθέσετε παράγραφο σε pdf** και να επισυνάψετε μια προσαρμοσμένη ετικέτα (χρήσιμη για μετέπειτα εξαγωγή ή στυλ). +* Η τεχνική για **τοποθέτηση κειμένου σε pdf** χρησιμοποιώντας την κλάση `Position`. +* Πώς να αποθηκεύσετε το αποτέλεσμα στο δίσκο και να επαληθεύσετε το αρχείο. + +**Προαπαιτούμενα** + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7+). +* Έγκυρη άδεια Aspose.Pdf for .NET ή ένα δωρεάν κλειδί αξιολόγησης. +* Ένα IDE όπως το Visual Studio 2022 ή το VS Code με την επέκταση C#. + +> **Pro tip:** Αν χρησιμοποιείτε δωρεάν αξιολόγηση, το παραγόμενο PDF θα περιέχει ένα μικρό υδατογράφημα. Καταχωρήστε άδεια για να το αφαιρέσετε. + +## Πώς να δημιουργήσετε έγγραφο pdf με Aspose.Pdf + +Το πρώτο βήμα είναι η δημιουργία ενός αντικειμένου της κλάσης `Document`. Αυτό το αντικείμενο αντιπροσωπεύει ολόκληρο το αρχείο PDF και σας δίνει πρόσβαση στις σελίδες, τους πόρους και τις επιλογές αποθήκευσης. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Η δημιουργία του εγγράφου **δεν** γράφει τίποτα στο δίσκο ακόμη· προετοιμάζει μόνο μια αναπαράσταση στη μνήμη που μπορείτε να επεξεργαστείτε. Αυτή η προσέγγιση διατηρεί το API γρήγορο και αποδοτικό σε μνήμη. + +## Προσθήκη κενής σελίδας pdf με Aspose.Pdf + +Ένα PDF πρέπει να περιέχει τουλάχιστον μία σελίδα πριν μπορέσετε να τοποθετήσετε οποιοδήποτε περιεχόμενο. Η προσθήκη κενής σελίδας είναι μια κλήση μεθόδου: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Η μέθοδος `Add()` δημιουργεί μια σελίδα με προεπιλεγμένο μέγεθος (A4) και προσανατολισμό (πορτραίτο). Αν χρειάζεστε διαφορετικό μέγεθος, περάστε μια παρουσία `PageSize` στην `Add()`. + +## Προσθήκη παραγράφου σε pdf και ορισμός σημείωσης + +Τώρα που υπάρχει η σελίδα, μπορείτε να δημιουργήσετε ένα αντικείμενο `Paragraph` που κρατά το ορατό κείμενο. Η παράγραφος μπορεί επίσης να μεταφέρει μια προσαρμοσμένη ετικέτα, κάτι που είναι χρήσιμο όταν αργότερα χρειαστείτε να εντοπίσετε ή να μορφοποιήσετε το στοιχείο προγραμματιστικά. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Γιατί να χρησιμοποιήσετε ετικέτα; + +Οι ετικέτες είναι μεταδεδομένα που ταξιδεύουν μαζί με το στοιχείο PDF. Μπορούν να ερωτηθούν αργότερα με `Document.FindObject()` ή να χρησιμοποιηθούν από επεξεργαστές PDF που βασίζονται σε ετικέτες για προσβασιμότητα ή ευρετηρίαση. + +## Τοποθέτηση κειμένου σε pdf με ακριβείς συντεταγμένες + +Η προεπιλεγμένη τοποθέτηση μιας παραγράφου είναι στην επάνω‑αριστερή γωνία του περιθωρίου της σελίδας. Για να μετακινήσετε το κείμενο σε ακριβή θέση, ορίστε την ιδιότητα `Position` στην ετικέτα της παραγράφου: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Οι συντεταγμένες μετρώνται σε points (1 point = 1/72 inch). Το αρχικό σημείο (0,0) βρίσκεται στο κάτω‑αριστερό μέρος της σελίδας, που ταιριάζει με τις περισσότερες μηχανές απόδοσης PDF. Προσαρμόστε τις τιμές `X` και `Y` ώστε να ταιριάζουν με τις ανάγκες του layout σας. + +Μετά την τοποθέτηση, προσθέστε την παράγραφο στη συλλογή της σελίδας: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Αποθήκευση του εγγράφου pdf + +Τέλος, γράψτε το PDF στη μνήμη σε ένα αρχείο. Μπορείτε να καθορίσετε τη διαδρομή εξόδου, τη μορφή και ακόμη και επιλογές κρυπτογράφησης. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Όταν το πρόγραμμα ολοκληρωθεί, το `output.pdf` περιέχει μια σελίδα με το κείμενο **Important note** τοποθετημένο κοντά στην επάνω‑δεξιά γωνία (X = 50, Y = 750). Ανοίξτε το αρχείο σε οποιονδήποτε προβολέα PDF για να επαληθεύσετε τη θέση. + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*Image alt text: Generated PDF document created with C# Aspose.Pdf showing positioned note* (includes primary keyword). + +## Πλήρες, εκτελέσιμο παράδειγμα + +Συνδυάζοντας όλα τα κομμάτια, εδώ είναι μια πλήρης εφαρμογή κονσόλας που μπορείτε να αντιγράψετε, να χτίσετε και να τρέξετε: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Αναμενόμενο αποτέλεσμα** όταν εκτελέσετε το πρόγραμμα: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Ανοίγοντας το `output.pdf` εμφανίζεται μια σελίδα με το κείμενο **Important note** τοποθετημένο στις συντεταγμένες που καθορίσατε. + +## Συνηθισμένες παραλλαγές και ειδικές περιπτώσεις + +| Σενάριο | Τι να αλλάξετε | Γιατί είναι σημαντικό | +|----------|----------------|------------------------| +| **Διαφορετικό μέγεθος σελίδας** | `pdfDocument.Pages.Add(PageSize.A5)` | Οι μικρότερες σελίδες μειώνουν το μέγεθος του αρχείου και ταιριάζουν σε κινητές οθόνες. | +| **Πολλαπλές σημειώσεις** | Βρόχος πάνω σε μια συλλογή συμβολοσειρών και δημιουργία `Paragraph` για κάθε μία, αυξάνοντας τη συντεταγμένη `Y`. | Επιτρέπει τη μαζική δημιουργία σημειώσεων τύπου bullet. | +| **Χαρακτήρες Unicode** | Βεβαιωθείτε ότι το αρχείο πηγής είναι αποθηκευμένο ως UTF-8 και ορίστε `noteParagraph.Text = "重要なメモ"` | Το Aspose.Pdf υποστηρίζει Unicode από προεπιλογή, αλλά η κωδικοποίηση του αρχείου πρέπει να ταιριάζει. | +| **PDF με κωδικό πρόσβασης** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Προσθέτει ασφάλεια για εμπιστευτικές σημειώσεις. | +| **Έξοδος υψηλής ανάλυσης** | Ορίστε `pdfDocument.PageInfo.Width` και `Height` σε μεγαλύτερες τιμές πριν προσθέσετε περιεχόμενο. | Χρήσιμο για εκτύπωση PDF μεγάλου φορμά. | + +## Συμβουλές για παραγωγική χρήση + +* **Επαναχρησιμοποίηση του αντικειμένου `Document`** όταν δημιουργείτε πολλά PDF σε μία αίτηση για μείωση του GC pressure. +* **Αποδέσμευση αντικειμένων** (`pdfDocument.Dispose()`) αν δημιουργείτε πολλά έγγραφα σε βρόχο. +* **Επαλήθευση συντεταγμένων**: η τιμή `Y` δεν μπορεί να υπερβαίνει το ύψος της σελίδας· διαφορετικά το κείμενο θα κοπεί. +* **Χρήση του `TextFragmentAbsorber`** για μετέπειτα εξαγωγή της σημείωσης με την ετικέτα της (`/P`) αν χρειαστεί να διαβάσετε ξανά το περιεχόμενο. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **δημιουργήσετε έγγραφο pdf** με Aspose.Pdf, **προσθέσετε κενή σελίδα pdf**, **προσθέσετε παράγραφο σε pdf**, **προσθέσετε σημείωση pdf**, και **τοποθετήσετε κείμενο σε pdf** με ακρίβεια. Το πλήρες παράδειγμα παρουσιάζει μια καθαρή, επαναλαμβανόμενη ροή εργασίας που μπορείτε να επεκτείνετε για τιμολόγια, αναφορές ή οποιοδήποτε σενάριο αυτοματοποίησης εγγράφων. + +Στη συνέχεια, εξερευνήστε σχετικά θέματα όπως **προσθήκη εικόνων σε pdf**, **δημιουργία πινάκων με Aspose.Pdf**, ή **εφαρμογή ψηφιακών υπογραφών**. Κάθε ένα από αυτά βασίζεται στις ίδιες βασικές έννοιες που καλύφθηκαν εδώ, ώστε να είστε έτοιμοι να αντιμετωπίσετε πιο σύνθετες εργασίες δημιουργίας PDF. + +Καλή προγραμματιστική εμπειρία! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στα δικά σας έργα. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/greek/net/images-graphics/_index.md index 09e2123b0d..1498bfac2e 100644 --- a/pdf/greek/net/images-graphics/_index.md +++ b/pdf/greek/net/images-graphics/_index.md @@ -164,6 +164,9 @@ ### [Ορισμός φόντου εικόνας σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Ένας πλήρης οδηγός](./aspose-pdf-net-set-image-backgrounds/) Μάθετε πώς να βελτιώσετε τα έγγραφα PDF σας ορίζοντας φόντο εικόνας χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει συμβουλές εγκατάστασης, υλοποίησης και βελτιστοποίησης. +### [Ορισμός διαφάνειας PDF σε C# με το Aspose.PDF – πλήρης οδηγός](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Μάθετε πώς να ορίζετε τη διαφάνεια των PDF χρησιμοποιώντας το Aspose.PDF για .NET σε C# με αυτόν τον πλήρη οδηγό. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/greek/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..add020273f --- /dev/null +++ b/pdf/greek/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Ορίστε τη διαφάνεια PDF σε C# χρησιμοποιώντας το Aspose.PDF – μάθετε + πώς να ρυθμίσετε τη διαφάνεια γραμμής και γεμίσματος με λίγες γραμμές κώδικα. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: el +lastmod: 2026-08-08 +og_description: Ορίστε τη διαφάνεια PDF σε C# γρήγορα. Αυτός ο οδηγός δείχνει πώς + να τροποποιήσετε τη διαφάνεια του περιγράμματος και του γεμίσματος χρησιμοποιώντας + το API κατάστασης γραφικών του Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Ορισμός διαφάνειας PDF σε C# με το Aspose.PDF – βήμα‑βήμα οδηγός +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Ορισμός διαφάνειας PDF σε C# με το Aspose.PDF – πλήρης οδηγός +url: /el/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ορισμός διαφάνειας PDF σε C# με Aspose.PDF – πλήρης οδηγός + +Αν χρειάζεστε **ορισμό διαφάνειας PDF** για συγκεκριμένες λειτουργίες σχεδίασης, αυτό το tutorial σας δείχνει ακριβώς πώς να το κάνετε με το Aspose.PDF for .NET. Είτε δημιουργείτε υδατογραφήματα, ημιδιαφανείς επικάλυψεις ή προσαρμοσμένα γραφικά, θα μάθετε μια σύντομη, έτοιμη για παραγωγή προσέγγιση. + +Στις επόμενες ενότητες θα καλύψουμε τα πάντα, από τη φόρτωση ενός PDF μέχρι την επεξεργασία της κατάστασης γραφικών του, την προσθήκη νέου ορισμού διαφάνειας και την αποθήκευση του αποτελέσματος. Δεν απαιτείται εξωτερική τεκμηρίωση — μόνο ο κώδικας παρακάτω και μια σύντομη εξήγηση κάθε βήματος. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7+) +* Ένα έγκυρο license του Aspose.PDF for .NET (η δωρεάν δοκιμή λειτουργεί για αξιολόγηση) +* Ένα αρχείο PDF εισόδου (`input.pdf`) σε φάκελο με δικαιώματα ανάγνωσης/εγγραφής +* Visual Studio 2022 ή οποιοδήποτε IDE C# προτιμάτε + +## Βήμα 1 – Φόρτωση του εγγράφου PDF (Aspose.PDF for .NET) + +Η πρώτη εργασία είναι το άνοιγμα του υπάρχοντος PDF. Το Aspose.PDF αντιπροσωπεύει ένα αρχείο PDF με την κλάση `Document`, η οποία σας δίνει πλήρη πρόσβαση στις σελίδες, τους πόρους και τα αντικείμενα χαμηλού επιπέδου. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Γιατί είναι σημαντικό*: Η φόρτωση του εγγράφου δημιουργεί ένα μοντέλο στη μνήμη που μπορείτε να τροποποιήσετε με ασφάλεια. Η δήλωση `using` εξασφαλίζει ότι το αρχείο κλείνει αυτόματα μετά το τέλος της εργασίας. + +## Βήμα 2 – Λήψη της πρώτης σελίδας που θέλετε να επεξεργαστείτε + +Η διαφάνεια ορίζεται ανά σελίδα μέσω του λεξικού πόρων της σελίδας. Εδώ στοχεύουμε στην πρώτη σελίδα, αλλά μπορείτε να κάνετε βρόχο στο `doc.Pages` για μαζική επεξεργασία. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Γιατί είναι σημαντικό*: Κάθε σελίδα έχει τη δική της συλλογή `Resources`, η οποία αποθηκεύει καταστάσεις γραφικών, γραμματοσειρές, εικόνες κ.λπ. Η τροποποίηση της σωστής σελίδας εξασφαλίζει ότι το εφέ διαφάνειας εμφανίζεται εκεί που το περιμένετε. + +## Βήμα 3 – Άνοιγμα του λεξικού πόρων της σελίδας για επεξεργασία + +Το Aspose.PDF παρέχει έναν βοηθό `DictionaryEditor` για τη διαχείριση λεξικών PDF χαμηλού επιπέδου χωρίς να διασπά τη δομή του αρχείου. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Γιατί είναι σημαντικό*: Η άμεση επεξεργασία των λεξικών COS (Content Object System) του PDF είναι ο μοναδικός τρόπος να ενσωματώσετε μια προσαρμοσμένη κατάσταση γραφικών. Ο επεξεργαστής αφαιρεί τη σύνταξη χαμηλού επιπέδου ενώ διατηρεί το PDF έγκυρο. + +## Βήμα 4 – Ανάκτηση του υπάρχοντος λεξικού ExtGState + +Το λεξικό **ExtGState** (external graphics state) περιέχει διαφάνεια, λειτουργία ανάμειξης, πάχος γραμμής κ.ά. Αν δεν υπάρχει, το Aspose.PDF το δημιουργεί αυτόματα όταν προσθέτετε μια νέα καταχώρηση. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Γιατί είναι σημαντικό*: Χωρίς καταχώρηση `ExtGState` δεν μπορείτε να αναφερθείτε σε προσαρμοσμένη διαφάνεια αργότερα στο ρεύμα περιεχομένου της σελίδας. Αυτό το βήμα εγγυάται ότι το κοντέινερ υπάρχει. + +## Βήμα 5 – Δημιουργία νέας κατάστασης γραφικών με την επιθυμητή διαφάνεια + +Μια κατάσταση γραφικών είναι μια συλλογή παραμέτρων. Για τη διαφάνεια ορίζουμε `CA` (διαφάνεια γραμμής) και `ca` (διαφάνεια γεμίσματος). Επίσης ορίζουμε μια λειτουργία ανάμειξης (`BM`) για να ελέγξουμε πώς τα διαφανή pixel αλληλεπιδρούν με το υποκείμενο περιεχόμενο. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Γιατί είναι σημαντικό*: Τα `CA` και `ca` δέχονται τιμές από 0 (εντελώς διαφανές) έως 1 (πλήρως αδιαφανές). Ρυθμίστε αυτούς τους αριθμούς για να πετύχετε το οπτικό αποτέλεσμα που χρειάζεστε. Η λειτουργία ανάμειξης `"Normal"` είναι η πιο συνηθισμένη, αλλά μπορείτε να πειραματιστείτε με `"Multiply"` ή `"Screen"` για καλλιτεχνικά εφέ. + +## Βήμα 6 – Καταχώρηση της νέας κατάστασης γραφικών στη συλλογή ExtGState + +Κάθε κατάσταση γραφικών πρέπει να έχει μοναδικό όνομα (π.χ., `GS0`). Προσθέτουμε το λεξικό μας στη συλλογή `ExtGState` και, στη συνέχεια, ενημερώνουμε τους πόρους της σελίδας. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Γιατί είναι σημαντικό*: Ονομάζοντας την κατάσταση (`GS0`), μπορείτε να την αναφέρετε αργότερα στο ρεύμα περιεχομένου της σελίδας χρησιμοποιώντας τον τελεστή `gs`. Αν χρειάζεστε πολλαπλά επίπεδα διαφάνειας, δημιουργήστε επιπλέον καταχωρήσεις (`GS1`, `GS2`, …). + +## Βήμα 7 – Εφαρμογή της κατάστασης γραφικών στις εντολές σχεδίασης (προαιρετικό) + +Αν θέλετε να εφαρμόσετε τη διαφάνεια αμέσως στο υπάρχον περιεχόμενο, πρέπει να επεξεργαστείτε το ρεύμα περιεχομένου της σελίδας. Παρακάτω υπάρχει ένα απλό παράδειγμα που σχεδιάζει ένα ημιδιαφανές ορθογώνιο χρησιμοποιώντας τη νεοδημιουργημένη κατάσταση. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Γιατί είναι σημαντικό*: Ο τελεστής `gs` (`SetGraphicsState`) λέει στον renderer του PDF να χρησιμοποιήσει τις τιμές διαφάνειας που ορίστηκαν στο `GS0` για όλες τις επόμενες εντολές σχεδίασης. Το ζεύγος `grestore`/`gsave` εξασφαλίζει ότι τα άλλα στοιχεία της σελίδας παραμένουν αμετάβλητα. + +## Βήμα 8 – Αποθήκευση του τροποποιημένου PDF + +Τέλος, γράψτε το ενημερωμένο έγγραφο πίσω στο δίσκο. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Γιατί είναι σημαντικό*: Η αποθήκευση ολοκληρώνει όλες τις αλλαγές, ενσωματώνει τη νέα κατάσταση γραφικών και παράγει ένα PDF που οποιοσδήποτε προβολέας (Adobe Acrobat, Chrome κ.ά.) μπορεί να εμφανίσει με την προγραμματισμένη διαφάνεια. + +### Αναμενόμενο αποτέλεσμα + +Ανοίξτε το `output.pdf` σε έναν προβολέα PDF. Θα πρέπει να δείτε ένα κόκκινο ορθογώνιο του οποίου το περίγραμμα είναι 80 % αδιαφανές και το γέμισμα 40 % αδιαφανές, ενσωματώνοντας ομαλά με οποιοδήποτε φόντο. Το υπόλοιπο της σελίδας παραμένει αμετάβλητο. + +## Συνηθισμένες παραλλαγές και ειδικές περιπτώσεις + +| Κατάσταση | Τι να αλλάξετε | Λόγος | +|-----------|----------------|-------| +| **Πολλαπλά επίπεδα διαφάνειας** | Δημιουργήστε επιπλέον καταστάσεις γραφικών (`GS1`, `GS2`, …) με διαφορετικές τιμές `CA`/`ca` και αναφερθείτε σε αυτές όπου χρειάζεται | Επιτρέπει λεπτομερή έλεγχο διαφορετικών στοιχείων | +| **Διαφορετικές λειτουργίες ανάμειξης** | Χρησιμοποιήστε `"Multiply"`, `"Screen"`, `"Overlay"` κ.λπ., αντί για `"Normal"` στην καταχώρηση `BM` | Παράγει καλλιτεχνικά εφέ ανάμειξης | +| **Εφαρμογή σε υπάρχον ρεύμα περιεχομένου** | Εισάγετε `SetGraphicsState` πριν από τους συγκεκριμένους τελεστές σχεδίασης που θέλετε να επηρεάσετε | Αποτρέπει ανεπιθύμητη διαφάνεια σε άσχετα αντικείμενα | +| **Μεγάλα PDFs** | Επεξεργαστείτε τις σελίδες σε βρόχο `foreach (Page p in doc.Pages)` για να αποφύγετε τη φόρτωση ολόκληρου του αρχείου στη μνήμη | Βελτιώνει την απόδοση και μειώνει την πίεση μνήμης | +| **Δεν υπάρχει υπάρχον ExtGState** | Ο κώδικας στο Βήμα 4 δημιουργεί ήδη ένα αν λείπει, επομένως δεν απαιτείται επιπλέον διαχείριση | Εγγυάται ότι το λεξικό υπάρχει | + +### Συμβουλή επαγγελματία + +Όταν προσθέτετε πολλές προσαρμοσμένες καταστάσεις γραφικών, διατηρήστε τη ονομασία συνεπή (`GS0`, `GS1`, …) και τεκμηριώστε τον σκοπό της κάθε μιας σε ένα μπλοκ σχολίων. Αυτό διευκολύνει τη συντήρηση στο μέλλον, ειδικά σε συνεργατικά έργα. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Παρακάτω βρίσκεται το πλήρες πρόγραμμα που μπορείτε να αντιγράψετε, να επικολλήσετε και να τρέξετε. Περιλαμβάνει όλα τα βήματα, τις απαραίτητες οδηγίες `using` και σχόλια. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Τρέξτε το πρόγραμμα, + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..322852d444 100644 --- a/pdf/greek/net/programming-with-forms/_index.md +++ b/pdf/greek/net/programming-with-forms/_index.md @@ -23,7 +23,7 @@ | --- | --- | | [Προσθήκη συμβουλής εργαλείου στο πεδίο](./add-tooltip-to-field/) | Μάθετε πώς να προσθέτετε συμβουλές εργαλείων για να σχηματίζετε πεδία σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον αναλυτικό οδηγό. Βελτιώστε τη χρηστικότητα και την εμπειρία χρήστη. | | [Συμπλήρωση Αραβικού Κειμένου](./arabic-text-filling/) | Μάθετε πώς να συμπληρώνετε αραβικό κείμενο σε φόρμες PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτό το βήμα προς βήμα σεμινάριο. Βελτιώστε τις δεξιότητές σας στον χειρισμό PDF. | -| [Συνδυαστικό κουτί](./combo-box/) Μάθετε πώς να προσθέσετε ένα σύνθετο πλαίσιο σε ένα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε τον αναλυτικό οδηγό μας για να δημιουργήσετε εύκολα διαδραστικές φόρμες PDF. | +| [Συνδυαστικό κουτί](./combo-box/) Μάθετε πώς να προσθέσετε ένα σύνθετο πλαίσιο σε ένα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε τον αναλυτικό οδηγό μας για να δημιουργήσετε εύκολα διαδραστικές φόρμες PDF. | | [Δημιουργία εγγράφου](./create-doc/) | Μάθετε να δημιουργείτε διαδραστικά έγγραφα PDF με κουμπιά επιλογής χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. | | [Διαγραφή πεδίου φόρμας σε έγγραφο PDF](./delete-form-field/) | Μάθετε πώς να διαγράφετε πεδία φόρμας σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. Ιδανικό για προγραμματιστές και λάτρεις των PDF. | | [Προσδιορισμός απαιτούμενου πεδίου σε μορφή PDF](./determine-required-field/) | Μάθετε πώς να προσδιορίζετε τα απαιτούμενα πεδία σε μια φόρμα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ο αναλυτικός οδηγός μας απλοποιεί τη διαχείριση φορμών και βελτιώνει τη ροή εργασίας αυτοματοποίησης PDF. | @@ -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 με Aspose.PDF – πλήρης οδηγός](./save-pdf-document-with-aspose-pdf-complete-guide/) | Μάθετε πώς να αποθηκεύετε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF με αυτόν τον πλήρη οδηγό βήμα προς βήμα. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/greek/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..053169b72e --- /dev/null +++ b/pdf/greek/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Αποθηκεύστε έγγραφο PDF χρησιμοποιώντας το Aspose.PDF, μάθετε πώς να + προσθέτετε σελίδες PDF, να συμπληρώνετε πεδία φόρμας PDF και να δημιουργείτε PDF + με πεδία φόρμας σε ένα ενιαίο σεμινάριο. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: el +lastmod: 2026-08-08 +og_description: Αποθηκεύστε έγγραφο PDF με το Aspose.PDF και ανακαλύψτε πώς να προσθέτετε + σελίδες PDF, να συμπληρώνετε πεδία φόρμας PDF και να δημιουργείτε PDF με πεδία φόρμας + γρήγορα και αξιόπιστα. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Αποθήκευση εγγράφου PDF με το Aspose.PDF – οδηγός βήμα‑βήμα +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Αποθήκευση εγγράφου PDF με το Aspose.PDF – πλήρης οδηγός +url: /el/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Αποθήκευση εγγράφου PDF με Aspose.PDF – πλήρης οδηγός + +Αν χρειάζεστε να **αποθηκεύσετε έγγραφο PDF** που περιέχει διαδραστικά πεδία φόρμας, αυτό το tutorial σας δείχνει ακριβώς πώς. Θα δείτε πώς να προσθέσετε σελίδες PDF, να δημιουργήσετε μια φόρμα PDF και να συμπληρώσετε ένα πεδίο φόρμας PDF — όλα με το Aspose.PDF for .NET. + +Στις επόμενες ενότητες θα μάθετε να: + +* προσθέτετε πολλαπλές σελίδες σε ένα νέο PDF, +* δημιουργείτε ένα πεδίο κειμένου φόρμας στην πρώτη σελίδα, +* τοποθετείτε μια σημείωση widget για το ίδιο πεδίο στη δεύτερη σελίδα, +* ορίζετε την τιμή του πεδίου (συμπλήρωση πεδίου φόρμας PDF), +* και τελικά **αποθηκεύετε έγγραφο PDF** στο δίσκο. + +Δεν απαιτούνται εξωτερικά εργαλεία· ο πλήρης, εκτελέσιμος κώδικας περιλαμβάνεται. + +## Προαπαιτούμενα + +* .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.7.2+). +* Έγκυρη άδεια Aspose.PDF for .NET ή δωρεάν κλειδί αξιολόγησης. +* Visual Studio 2022 (ή οποιοδήποτε IDE C#). + +Προσθέστε το πακέτο NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Πώς να προσθέσετε σελίδες PDF + +Το πρώτο βήμα είναι η δημιουργία ενός κενών PDF και η προσθήκη των σελίδων που χρειάζεστε. Η προσθήκη σελίδων πριν οριστούν τα πεδία φόρμας εξασφαλίζει ότι οι συντεταγμένες διάταξης είναι ακριβείς. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Γιατί είναι σημαντικό:* Κάθε αντικείμενο `Page` αντιπροσωπεύει έναν εκτυπώσιμο καμβά. Προσθέτοντας τις σελίδες νωρίς, μπορείτε να τις αναφέρετε αργότερα όταν τοποθετείτε στοιχεία φόρμας. + +## Πώς να δημιουργήσετε φόρμα PDF με Aspose.PDF + +Μια φόρμα PDF αποτελείται από έναν **ορισμό πεδίου** (το λογικό κοντέινερ) και μία ή περισσότερες **σημειώσεις widget** (η οπτική αναπαράσταση). Το παράδειγμα δημιουργεί ένα `TextBoxField` με όνομα **Comments** στην πρώτη σελίδα. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Γιατί είναι σημαντικό:* Οι συντεταγμένες `Rectangle` εκφράζονται σε points (1 pt = 1/72 in). Προσαρμόστε τις τιμές ώστε να ταιριάζουν στο σχέδιό σας. + +## Συμπλήρωση πεδίου φόρμας PDF + +Μπορείτε να ορίσετε την τιμή του πεδίου προγραμματιστικά πριν αποθηκευτεί το έγγραφο. Αυτό είναι το βασικό βήμα της **συμπλήρωσης πεδίου φόρμας PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Αν χρειαστεί να συμπληρώσετε το πεδίο αργότερα (π.χ. από είσοδο χρήστη), απλώς εκχωρήστε μια νέα συμβολοσειρά στο `commentsField.Value` πριν καλέσετε το `Save`. + +## Προσθήκη σημείωσης widget για το ίδιο πεδίο στη δεύτερη σελίδα + +Μια σημείωση widget κάνει το πεδίο φόρμας ορατό σε μια σελίδα. Προσθέτοντας ένα δεύτερο widget, το ίδιο λογικό πεδίο εμφανίζεται και στις δύο σελίδες, επιδεικνύοντας **δημιουργία PDF με πεδία φόρμας** που εκτείνονται σε πολλαπλές σελίδες. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Γιατί είναι σημαντικό:* Η συλλογή `Widgets` μπορεί να περιέχει οποιονδήποτε αριθμό οπτικών αναπαραστάσεων. Οι χρήστες μπορούν να αλληλεπιδράσουν με το πεδίο σε οποιαδήποτε σελίδα, και η εισαχθείσα τιμή παραμένει συγχρονισμένη. + +## Συγκόλληση του πεδίου στις σημειώσεις της πρώτης σελίδας + +Τα πεδία φόρμας πρέπει να προστεθούν στη συλλογή σημειώσεων μιας σελίδας ώστε ο προβολέας PDF να μπορεί να τα αποδώσει. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Αποθήκευση εγγράφου PDF + +Τώρα που η φόρμα έχει οριστεί πλήρως, μπορείτε να **αποθηκεύσετε έγγραφο PDF** σε μια τοποθεσία της επιλογής σας. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Όταν ανοίξετε το `output.pdf` στο Adobe Acrobat Reader ή σε οποιονδήποτε προβολέα PDF, θα δείτε ένα πλαίσιο κειμένου στη σελίδα 1 και ένα αντίστοιχο πλαίσιο στη σελίδα 2. Η πληκτρολόγηση σε οποιοδήποτε πλαίσιο ενημερώνει το ίδιο υποκείμενο πεδίο. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Παρακάτω βρίσκεται το πλήρες πρόγραμμα που μπορείτε να αντιγράψετε‑και‑επικολλήσετε σε μια εφαρμογή κονσόλας. Συγκεντώνεται και παράγει το περιγραφόμενο PDF χωρίς καμία τροποποίηση. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Αναμενόμενο αποτέλεσμα:** Ένα αρχείο με όνομα `output.pdf` που περιέχει δύο σελίδες. Η σελίδα 1 εμφανίζει ένα πλαίσιο κειμένου με ετικέτα “Comments” στις συντεταγμένες (100, 600). Η σελίδα 2 εμφανίζει το ίδιο πεδίο στις (100, 400). Το πεδίο είναι προ‑συμπληρωμένο με “Enter your feedback here”. Η αλλαγή του κειμένου σε οποιαδήποτε σελίδα ενημερώνει την ίδια τιμή όταν το έγγραφο αποθηκευτεί ξανά. + +## Συχνές ερωτήσεις και διαχείριση ειδικών περιπτώσεων + +| Ερώτηση | Απάντηση | +|----------|--------| +| *Μπορώ να προσθέσω περισσότερα από ένα widget για το ίδιο πεδίο;* | Ναι. Προσθέστε επιπλέον αντικείμενα `WidgetAnnotation` στο `commentsField.Widgets`. Κάθε widget μπορεί να τοποθετηθεί σε οποιαδήποτε σελίδα. | +| *Τι αν χρειαστεί να ορίσω την εμφάνιση του πεδίου (γραμματοσειρά, περιθώριο, φόντο);* | Χρησιμοποιήστε το `commentsField.DefaultAppearance` για να ορίσετε γραμματοσειρά και χρώμα, και θέστε τις ιδιότητες `commentsField.Border` για το στυλ γραμμής. | +| *Πώς κάνω το πεδίο μόνο για ανάγνωση;* | Ορίστε `commentsField.ReadOnly = true;`. Το πεδίο θα εμφανίζει την τιμή του αλλά δεν θα μπορεί να επεξεργαστεί από τον χρήστη. | +| *Μπορεί να συμπληρωθεί το πεδίο μετά τη δημιουργία του PDF;* | Ναι. Φορτώστε το αποθηκευμένο PDF με `new Document("output.pdf")`, εντοπίστε το πεδίο μέσω `pdfDocument.Form["Comments"]`, εκχωρήστε μια νέα `Value` και καλέστε ξανά το `Save`. | +| *Τι αν το PDF πρέπει να συμμορφώνεται με PDF/A για αρχειοθέτηση;* | Μετά τη δημιουργία του εγγράφου, καλέστε `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` πριν το αποθηκεύσετε. | + +## Συμβουλές από τον χώρο + +* **Pro tip:** Κρατήστε το λογικό όνομα του πεδίου σύντομο και μοναδικό· είναι το αναγνωριστικό που θα χρησιμοποιήσετε όταν συμπληρώνετε προγραμματιστικά τη φόρμα αργότερα. +* **Προσοχή σε:** Επικάλυψη ορθογωνίων widget. Οι επικάλυψεις προκαλούν εικονογραφικά σφάλματα σε ορισμένους προβολείς. +* **Σημείωση απόδοσης:** Η προσθήκη πολλών σελίδων ή widget σε βρόχο μπορεί να βελτιστοποιηθεί επαναχρησιμοποιώντας ένα μόνο αντικείμενο `Rectangle` και αλλάζοντας μόνο τις συντεταγμένες του. + +## Συμπέρασμα + +Τώρα γνωρίζετε πώς να **αποθηκεύσετε έγγραφο PDF** που περιέχει μια πλήρως λειτουργική φόρμα, πώς να **συμπληρώσετε πεδίο φόρμας PDF**, και πώς να **προσθέσετε σελίδες PDF** και **δημιουργήσετε PDF με πεδία φόρμας** χρησιμοποιώντας το Aspose.PDF for .NET. Το πλήρες παράδειγμα δείχνει τη ροή εργασίας από τη δημιουργία του εγγράφου μέχρι την τελική αποθήκευση. + +Στη συνέχεια, εξερευνήστε συναφή θέματα όπως **προσθήκη πλαισίων ελέγχου**, **δημιουργία λιστών πτυσσόμενων**, ή **επίπεδη μορφοποίηση της φόρμας** για διανομή μόνο για ανάγνωση. Κάθε ένα από αυτά βασίζεται στις ίδιες αρχές που καλύπτονται εδώ και επεκτείνει τις δυνατότητες αυτοματοποίησης PDF σας. + +Καλή προγραμματιστική δουλειά! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στα δικά σας έργα. + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/greek/net/programming-with-pdf-pages/_index.md index 40642d4e34..c5a4d1d823 100644 --- a/pdf/greek/net/programming-with-pdf-pages/_index.md +++ b/pdf/greek/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ | [Ενημέρωση διαστάσεων σελίδας PDF](./update-dimensions/) | Ανακαλύψτε πώς να ενημερώνετε τις διαστάσεις σελίδας PDF χωρίς κόπο με το Aspose.PDF για .NET σε αυτόν τον ολοκληρωμένο, βήμα προς βήμα οδηγό. | | [Μεγέθυνση στα περιεχόμενα της σελίδας σε αρχείο PDF](./zoom-to-page-contents/) | Μάθετε πώς να κάνετε ζουμ στα περιεχόμενα σελίδας σε αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον ολοκληρωμένο οδηγό. Βελτιώστε τα έγγραφα PDF σας σύμφωνα με τις συγκεκριμένες ανάγκες σας. | | [Προσθήκη αριθμών σελίδας PDF με C# – Πλήρης οδηγός βήμα‑βήμα](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Μάθετε πώς να προσθέσετε αριθμούς σελίδων σε PDF χρησιμοποιώντας C# με αναλυτικές οδηγίες βήμα‑βήμα. | +| [Προσθήκη αρίθμησης Bates σε PDF με Aspose – οδηγός βήμα‑βήμα](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Μάθετε πώς να προσθέσετε αρίθμηση Bates σε αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET με αναλυτικές οδηγίες βήμα‑βήμα. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/greek/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..bde96e4d99 --- /dev/null +++ b/pdf/greek/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Προσθήκη αρίθμησης Bates σε PDF χρησιμοποιώντας το Aspose.Pdf σε C#. + Αυτό το σεμινάριο δείχνει επίσης πώς να προσθέσετε κενή σελίδα σε PDF και να δημιουργήσετε + PDF προγραμματιστικά. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: el +lastmod: 2026-08-08 +og_description: Προσθέστε αρίθμηση Bates σε PDF με το Aspose.Pdf σε C#. Μάθετε πώς + να προσθέτετε κενή σελίδα σε PDF, να δημιουργείτε PDF προγραμματιστικά και να αποθηκεύετε + το τελικό έγγραφο σε λίγα λεπτά. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Προσθήκη αρίθμησης Bates σε PDF με το Aspose – πλήρης οδηγός C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Προσθήκη αρίθμησης Bates σε PDF με το Aspose – οδηγός βήμα‑προς‑βήμα +url: /el/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Προσθήκη αρίθμησης Bates σε PDF με Aspose – οδηγός βήμα‑βήμα + +Η προσθήκη αρίθμησης Bates σε PDF με Aspose.Pdf είναι απλή μόλις κατανοήσετε τα βασικά βήματα. Εάν χρειάζεστε επίσης να προσθέσετε κενή σελίδα PDF ή να δημιουργήσετε PDF προγραμματιστικά, αυτός ο οδηγός καλύπτει όλα όσα χρειάζεστε. + +Σε αυτό το tutorial θα: + +* Δημιουργήσετε ένα νέο έγγραφο PDF από την αρχή. +* Προσθέσετε μια κενή σελίδα PDF που θα φιλοξενήσει τους αριθμούς Bates. +* Διαμορφώσετε το αντικείμενο BatesNumberingArtifact με προσαρμοσμένο πρόθεμα. +* Αποθηκεύσετε το PDF ώστε οι αριθμοί να εμφανίζονται στο παραγόμενο αρχείο. + +Στο τέλος θα έχετε μια πλήρως λειτουργική εφαρμογή κονσόλας C# που παράγει ένα PDF που περιέχει αριθμούς Bates όπως **CASE‑1000**, **CASE‑1001**, … – μια κοινή απαίτηση για νομικές και διαδικασίες e‑discovery. + +## Προαπαιτούμενα + +* .NET 6.0 SDK ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.8). +* Visual Studio 2022 ή οποιοδήποτε IDE συμβατό με C#. +* Ένα έγκυρο άδεια Aspose.Pdf for .NET (ή ένα δωρεάν κλειδί αξιολόγησης). +* Βασική εξοικείωση με τη σύνταξη της C#. + +> **Συμβουλή:** Εάν εκτελέσετε τον κώδικα χωρίς άδεια, το Aspose θα προσθέσει ένα μικρό υδατογράφημα στο παραγόμενο PDF. + +## Βήμα 1: Ρύθμιση του έργου και εισαγωγή του Aspose.Pdf + +Δημιουργήστε ένα νέο έργο κονσόλας και προσθέστε το πακέτο NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Οι οδηγίες `using` που απαιτούνται για το παράδειγμα είναι: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Αυτοί οι χώροι ονομάτων σας δίνουν πρόσβαση στις κλάσεις `Document`, `Page` και `BatesNumberingArtifact` που χρησιμοποιούνται αργότερα. + +## Βήμα 2: Προσθήκη κενής σελίδας PDF + +Ένας αριθμός Bates πρέπει να συνδέεται με μια σελίδα, έτσι πρώτα δημιουργούμε μια κενή σελίδα που θα λάβει το αντικείμενο αρίθμησης. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Η κλάση `Document` αντιπροσωπεύει ολόκληρο το αρχείο PDF, ενώ η μέθοδος `Pages.Add()` εισάγει μια νέα, κενή σελίδα στο τέλος της συλλογής σελίδων του εγγράφου. Επειδή το έγγραφο ξεκινά κενό, αυτή η κλήση δημιουργεί επίσης την πρώτη σελίδα. + +## Βήμα 3: Διαμόρφωση του αντικειμένου BatesNumberingArtifact + +Τώρα ορίζουμε πώς πρέπει να φαίνονται οι αριθμοί Bates. Το `BatesNumberingArtifact` σας επιτρέπει να ορίσετε τον αρχικό αριθμό, το πρόθεμα, το επίθημα και τις επιλογές μορφοποίησης. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Γιατί είναι σημαντικό:** +Ο ορισμός του `StartNumber` σε **1000** ταιριάζει με τις τυπικές συμβάσεις αρχείων νομικών υποθέσεων. Το `Prefix` εξασφαλίζει ότι κάθε αριθμός εμφανίζεται ως **CASE‑1000**, **CASE‑1001**, …, κάτι που διευκολύνει την αναζήτηση και την ταξινόμηση. + +## Βήμα 4: Προσθήκη του αντικειμένου στη σελίδα + +Το αντικείμενο πρέπει να προστεθεί στη συλλογή `Artifacts` της σελίδας ώστε το Aspose να το αποδίδει σε κάθε σελίδα κατά την αποθήκευση. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Όταν το έγγραφο αποθηκευτεί, το Aspose επαναλαμβάνει αυτόματα το αντικείμενο σε όλες τις σελίδες, αυξάνοντας τον αριθμό για κάθε επόμενη σελίδα. + +## Βήμα 5: (Προαιρετικό) Προσθήκη επιπλέον σελίδων + +Εάν χρειάζεστε περισσότερες σελίδες, απλώς επαναλάβετε `pdfDocument.Pages.Add()`. Το αντικείμενο BatesNumberingArtifact που προσθέσατε στο προηγούμενο βήμα θα εμφανίζεται αυτόματα σε κάθε νέα σελίδα. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Βήμα 6: Αποθήκευση του PDF – δημιουργία PDF προγραμματιστικά + +Τέλος, αποθηκεύστε το έγγραφο στο δίσκο. Αυτό είναι το σημείο όπου οι αριθμοί Bates αποδίδονται στις σελίδες. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Αναμενόμενο αποτέλεσμα:** +Ανοίξτε το *BatesNumberedDocument.pdf* και θα δείτε ένα PDF τριών σελίδων. Κάθε σελίδα εμφανίζει έναν αριθμό Bates στην κάτω‑δεξιά γωνία: + +* Σελίδα 1 → **CASE‑1000** +* Σελίδα 2 → **CASE‑1001** +* Σελίδα 3 → **CASE‑1002** + +Οι αριθμοί αυξάνονται αυτόματα επειδή το αντικείμενο είναι προσαρτημένο στη συλλογή σελίδων. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Συνδυάζοντας όλα, εδώ είναι ένα πλήρες πρόγραμμα κονσόλας που μπορείτε να αντιγράψετε, επικολλήσετε και να εκτελέσετε: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Εκτελέστε το πρόγραμμα με `dotnet run`. Μετά την εκτέλεση, εντοπίστε το αρχείο στην επιφάνεια εργασίας σας και επαληθεύστε τους αριθμούς Bates. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Συχνές ερωτήσεις και ειδικές περιπτώσεις + +### Τι γίνεται αν χρειάζομαι διαφορετική γραμματοσειρά ή θέση; + +Το `BatesNumberingArtifact` εκθέτει ιδιότητες όπως `FontSize`, `FontColor`, `HorizontalAlignment` και `VerticalAlignment`. Για παράδειγμα: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Πώς μπορώ να εξαιρέσω μια συγκεκριμένη σελίδα από την αρίθμηση; + +Δημιουργήστε ένα ξεχωριστό `BatesNumberingArtifact` για τις σελίδες που θέλετε να αριθμήσετε και προσθέστε το μόνο σε αυτές τις σελίδες. Οι σελίδες χωρίς προσαρτημένο αντικείμενο θα παραμείνουν χωρίς αριθμό. + +### Λειτουργεί αυτό με υπάρχοντα PDF; + +Ναι. Αντί για `new Document()`, φορτώστε ένα υπάρχον αρχείο: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Στη συνέχεια, προσθέστε το αντικείμενο στις επιθυμητές σελίδες και αποθηκεύστε. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **προσθέσετε αρίθμηση Bates σε PDF** χρησιμοποιώντας το Aspose.Pdf, πώς να **προσθέσετε κενή σελίδα PDF**, και πώς να **δημιουργήσετε PDF προγραμματιστικά** σε μια καθαρή, επαναχρησιμοποιήσιμη λύση C#. Η προσέγγιση λειτουργεί με οποιονδήποτε αριθμό σελίδων, προσαρμοσμένα προθέματα και επιλογές στυλ, δίνοντάς σας πλήρη έλεγχο του τελικού εγγράφου. + +Επόμενα βήματα που μπορείτε να εξερευνήσετε: + +* Χρησιμοποιήστε **create pdf as + +## Τι Θα Μάθετε Στη Σειρά; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Πώς να Προσθέσετε και να Προσαρμόσετε Αριθμούς Σελίδων σε 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-empty-page-end-pdf-aspose-pdf-net/) +- [Δημιουργία Εγγράφου PDF με Aspose.PDF – Προσθήκη Σελίδας, Σχήματος & Αποθήκευση](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 4666640685..60c77f751f 100644 --- a/pdf/greek/net/programming-with-security-and-signatures/_index.md +++ b/pdf/greek/net/programming-with-security-and-signatures/_index.md @@ -24,17 +24,19 @@ | [Αλλαγή κωδικού πρόσβασης σε αρχείο PDF](./change-password/) | Μάθετε να αλλάζετε εύκολα κωδικούς πρόσβασης PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ο αναλυτικός οδηγός μας σάς καθοδηγεί στη διαδικασία με ασφάλεια. | | [Αποκρυπτογράφηση αρχείου PDF](./decrypt/) | Μάθετε πώς να αποκρυπτογραφείτε με ασφάλεια αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET. Λάβετε αναλυτικές οδηγίες για να βελτιώσετε τις δεξιότητές σας στη διαχείριση εγγράφων. | | [Προσδιορίστε τον σωστό κωδικό πρόσβασης σε αρχείο PDF](./determine-correct-password/) | Ξεκλειδώστε αρχεία PDF με τον σωστό κωδικό πρόσβασης χρησιμοποιώντας το Aspose.PDF για .NET. Μάθετε πώς να αναγνωρίζετε εύκολα τον σωστό κωδικό πρόσβασης. | -| [Ψηφιακή σύνδεση σε αρχείο PDF](./digitally-sign/) Μάθετε πώς να υπογράφετε ψηφιακά αρχεία PDF με το Aspose.PDF για .NET. Οδηγός βήμα προς βήμα για να διασφαλίσετε ότι τα έγγραφά σας είναι ασφαλή και αυθεντικά. | +| [Ψηφιακή σύνδεση σε αρχείο PDF](./digitally-sign/) Μάθετε πώς να υπογράφετε ψηφιακά αρχεία PDF με το Aspose.PDF για .NET. Οδηγός βήμα προς βήμα για να διασφαλίσετε ότι τα έγγραφά σας είναι ασφαλή και αυθεντικά. | | [Ψηφιακή υπογραφή με χρονική σήμανση σε αρχείο PDF](./digitally-sign-with-time-stamp/) | Μάθετε πώς να υπογράφετε ψηφιακά ένα PDF με χρονική σήμανση χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός βήμα προς βήμα καλύπτει τις προϋποθέσεις, τη ρύθμιση πιστοποιητικών, τη χρονική σήμανση και πολλά άλλα. | | [Κρυπτογράφηση αρχείου PDF](./encrypt/) | Μάθετε πώς να κρυπτογραφείτε τα αρχεία PDF σας χωρίς κόπο χρησιμοποιώντας το Aspose.PDF για .NET. Προστατέψτε ευαίσθητες πληροφορίες με τον εύκολο οδηγό μας βήμα προς βήμα. | | [Εξαγωγή εικόνας](./extracting-image/) | Μάθετε εύκολα πώς να εξάγετε εικόνες από PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ακολουθήστε τον αναλυτικό οδηγό μας για απρόσκοπτη εξαγωγή εικόνων. | | [Εξαγωγή πληροφοριών υπογραφής](./extract-signature-info/) | Μάθετε πώς να εξάγετε ψηφιακές υπογραφές και πληροφορίες πιστοποιητικών από έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Ένας πλήρης οδηγός βήμα προς βήμα για προγραμματιστές C#. | -| [Προστατεύεται με κωδικό πρόσβασης](./is-password-protected/) Μάθετε πώς να ελέγχετε εάν ένα PDF προστατεύεται με κωδικό πρόσβασης χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. | +| [Προστατεύεται με κωδικό πρόσβασης](./is-password-protected/) Μάθετε πώς να ελέγχετε εάν ένα PDF προστατεύεται με κωδικό πρόσβασης χρησιμοποιώντας το Aspose.PDF για .NET σε αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. | | [Ορισμός δικαιωμάτων σε αρχείο PDF](./set-privileges/) | Μάθετε πώς να ορίσετε δικαιώματα PDF χρησιμοποιώντας το Aspose.PDF για .NET με αυτόν τον οδηγό βήμα προς βήμα. Ασφαλίστε τα έγγραφά σας αποτελεσματικά. | | [Υπογραφή με έξυπνη κάρτα χρησιμοποιώντας υπογραφή αρχείου PDF](./sign-with-smart-card-using-pdf-file-signature/) | Μάθετε πώς να υπογράφετε αρχεία PDF χρησιμοποιώντας μια έξυπνη κάρτα με το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον αναλυτικό οδηγό για ασφαλείς ψηφιακές υπογραφές. | | [Υπογραφή με έξυπνη κάρτα χρησιμοποιώντας το πεδίο υπογραφής](./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# με Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Μάθετε πώς να επισκευάσετε αρχεία PDF χρησιμοποιώντας το Aspose.PDF για .NET με οδηγίες βήμα προς βήμα. | +| [Επαλήθευση υπογραφής PDF σε C# με Aspose.PDF – πλήρης οδηγός](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Μάθετε πώς να επαληθεύετε ψηφιακές υπογραφές PDF σε C# χρησιμοποιώντας το Aspose.PDF, με πλήρη βήμα-βήμα οδηγό. | +| [Οδηγός υπογραφής PDF: Επικύρωση ψηφιακής υπογραφής PDF με το Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Μάθετε πώς να επικυρώνετε ψηφιακές υπογραφές PDF χρησιμοποιώντας το Aspose.PDF για .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/greek/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/greek/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..9912c70f9c --- /dev/null +++ b/pdf/greek/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-08-08 +description: Εκπαιδευτικό σεμινάριο υπογραφής PDF που δείχνει πώς να επαληθεύσετε + ψηφιακή υπογραφή PDF χρησιμοποιώντας επιλογές επαλήθευσης υπογραφής και κώδικα C# + – γρήγορος οδηγός βήμα‑βήμα. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: el +lastmod: 2026-08-08 +og_description: Το σεμινάριο υπογραφής PDF σας καθοδηγεί στη διαδικασία επαλήθευσης + ψηφιακής υπογραφής PDF με το Aspose.PDF. Μάθετε πώς να ρυθμίσετε τις επιλογές επαλήθευσης + υπογραφής και να ελέγξετε το αποτέλεσμα. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: Οδηγός υπογραφής PDF – Επικύρωση ψηφιακών υπογραφών PDF σε C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Οδηγός υπογραφής PDF: Επικύρωση ψηφιακής υπογραφής PDF με το Aspose.PDF' +url: /el/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – επικύρωση ψηφιακής υπογραφής PDF σε C# + +Αν χρειάζεστε ένα **pdf signature tutorial** που δείχνει ακριβώς πώς να επικυρώσετε μια ψηφιακή υπογραφή PDF, αυτός ο οδηγός σας καλύπτει. Θα δείτε πώς να φορτώσετε ένα υπογεγραμμένο PDF, να διαμορφώσετε **signature validation options**, να εκτελέσετε την επικύρωση και να εμφανίσετε το αποτέλεσμα — όλα με σαφή, εκτελέσιμο κώδικα C#. + +Η επικύρωση μιας υπογραφής PDF είναι απαραίτητη όταν επεξεργάζεστε συμβόλαια, τιμολόγια ή οποιοδήποτε νομικά δεσμευτικό έγγραφο. Αυτό το tutorial περνάει από τη πλήρη ροή εργασίας, ώστε να μπορείτε να ενσωματώσετε ελέγχους υπογραφών στις δικές σας εφαρμογές χωρίς να μαντεύετε ποιες κλήσεις API απαιτούνται. + +## Τι θα πετύχετε + +Στο τέλος αυτού του tutorial θα: + +* Φορτώσετε ένα υπογεγραμμένο αρχείο PDF χρησιμοποιώντας το Aspose.PDF. +* Ρυθμίσετε **signature validation options** όπως ο αλγόριθμος κατακερματισμού. +* Καλέσετε τη μέθοδο `Validate` για να **validate pdf digital signature**. +* Εκτυπώσετε ένα σαφές μήνυμα “Signature valid” στην κονσόλα. + +**Προαπαιτούμενα** + +* .NET 6.0 (ή νεότερη) εγκατεστημένο. +* Visual Studio 2022 (ή οποιοδήποτε IDE C#). +* Πακέτο NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Συμβουλή επαγγελματία:** Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Aspose.PDF για να έχετε υποστήριξη αλγορίθμων SHA‑3 και βελτιωμένη απόδοση επικύρωσης. + +## Βήμα 1: Εγκατάσταση του πακέτου NuGet Aspose.PDF + +Ανοίξτε το έργο σας στο Visual Studio και εκτελέστε την παρακάτω εντολή στην Κονσόλα Διαχειριστή Πακέτων: + +```bash +Install-Package Aspose.Pdf +``` + +Το πακέτο προσθέτει το χώρο ονομάτων `Aspose.Pdf`, ο οποίος περιλαμβάνει την κλάση `Document` και τα API σχετιζόμενα με υπογραφές που θα χρησιμοποιήσετε. + +## Βήμα 2: Φόρτωση του υπογεγραμμένου εγγράφου PDF + +Η πρώτη γραμμή κώδικα δημιουργεί ένα αντικείμενο `Document` που αντιπροσωπεύει το αρχείο PDF στο δίσκο. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Γιατί είναι σημαντικό:* Η κλάση `Document` αναλύει τη δομή του PDF, εκθέτοντας τη συλλογή `Signatures` που περιέχει όλες τις ενσωματωμένες ψηφιακές υπογραφές. Εάν η διαδρομή του αρχείου είναι λανθασμένη, θα πεταχτεί εξαίρεση, γι’ αυτό ελέγξτε τη διαδρομή πριν τρέξετε το πρόγραμμα. + +## Βήμα 3: Διαμόρφωση επιλογών επικύρωσης υπογραφής + +Μπορείτε να προσαρμόσετε τη διαδικασία επικύρωσης με την κλάση `SignatureValidationOptions`. Σε αυτό το tutorial ορίζουμε τον αλγόριθμο κατακερματισμού, αλλά μπορείτε επίσης να ορίσετε ελέγχους ανάκλησης πιστοποιητικού, επαλήθευση χρονικής σήμανσης κ.ά. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Γιατί είναι σημαντικό:* Ο αλγόριθμος κατακερματισμού πρέπει να ταιριάζει με αυτόν που χρησιμοποιήθηκε κατά τη δημιουργία της υπογραφής. Η χρήση λανθασμένου αλγορίθμου προκαλεί αποτυχία της επικύρωσης ακόμη και αν η υπογραφή είναι σωστή. + +## Βήμα 4: Επικύρωση της πρώτης υπογραφής + +Τα περισσότερα PDF περιέχουν μία μόνο υπογραφή, αλλά η συλλογή `Signatures` μπορεί να περιέχει πολλές. Αυτό το παράδειγμα επικυρώνει την πρώτη καταχώρηση (`[0]`). Η μέθοδος `Validate` επιστρέφει Boolean που υποδεικνύει την επιτυχία. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Περίπτωση άκρης:* Εάν το PDF δεν έχει υπογραφές, το `document.Signatures.Count` θα είναι `0` και η πρόσβαση στο `[0]` θα πετάξει `IndexOutOfRangeException`. Προστατέψτε τον κώδικα με έναν απλό έλεγχο: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Βήμα 5: Εμφάνιση του αποτελέσματος επικύρωσης + +Τέλος, γράψτε το αποτέλεσμα στην κονσόλα. Αυτό το βήμα δείχνει το **check pdf signature** αποτέλεσμα σε μορφή κατανοητή από άνθρωπο. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Όταν τρέξετε το πρόγραμμα, θα πρέπει να δείτε: + +``` +Signature valid: True +``` + +Εάν η υπογραφή είναι κατεστραμμένη, χρησιμοποιεί μη υποστηριζόμενο αλγόριθμο ή το πιστοποιητικό έχει ανακληθεί, η έξοδος θα είναι `False`. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Αντιγράψτε τον παρακάτω κώδικα σε ένα νέο έργο κονσόλας (`dotnet new console`) και αντικαταστήστε το `YOUR_DIRECTORY/signed.pdf` με τη διαδρομή του υπογεγραμμένου PDF σας. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Αναμενόμενη έξοδος + +``` +Signature valid: True +``` + +Εάν η υπογραφή αποτύχει στην επικύρωση, η κονσόλα θα εμφανίσει `Signature valid: False`. + +## Συχνές ερωτήσεις και αντιμετώπιση προβλημάτων + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Τι γίνεται αν το PDF χρησιμοποιεί διαφορετικό αλγόριθμο κατακερματισμού;** | Αλλάξτε το `HashAlgorithm` στο `SignatureValidationOptions` ώστε να ταιριάζει, π.χ., `HashAlgorithm.SHA256`. | +| **Πώς επικυρώνω όλες τις υπογραφές σε PDF με πολλαπλές υπογραφές;** | Κάντε βρόχο μέσω του `document.Signatures` και καλέστε `Validate` για κάθε καταχώρηση. | +| **Μπορώ να επαληθεύσω την αλυσίδα εμπιστοσύνης του πιστοποιητικού υπογραφής;** | Ορίστε `validationOptions.CheckCertificateRevocation = true` και προαιρετικά παρέχετε ένα προσαρμοσμένο `CertificateStore` που περιλαμβάνει αξιόπιστα ριζικά πιστοποιητικά. | +| **Τι κάνω αν χρειάζεται υποστήριξη επικύρωσης χρονικής σήμανσης;** | Ενεργοποιήστε `validationOptions.CheckTimestamp = true`. Το Aspose.PDF θα επαληθεύσει το ενσωματωμένο token χρονικής σήμανσης. | +| **Υπάρχει τρόπος να λάβω λεπτομερή σφάλματα επικύρωσης;** | Χρησιμοποιήστε `ValidateEx(validationOptions, out ValidationResult result)`· το `result` περιέχει `ErrorMessage` και `ErrorCode` για κάθε αποτυχία. | + +## Επόμενα βήματα + +* Εξερευνήστε το **validate pdf signature** για πολλαπλές υπογραφές επαναλαμβάνοντας το `document.Signatures`. +* Συνδυάστε αυτό το tutorial με **check pdf signature** σε ένα web API για να παρέχετε επαλήθευση σε πραγματικό χρόνο για ανεβασμένα συμβόλαια. +* Βυθιστείτε περισσότερο στις **signature validation options** όπως έλεγχοι CRL/OCSP, επικύρωση χρονικής σήμανσης και προσαρμοσμένα αποθετήρια εμπιστοσύνης. + +Τώρα έχετε ένα πλήρες **pdf signature tutorial** που δείχνει πώς να **validate pdf digital signature** χρησιμοποιώντας το Aspose.PDF σε C#. Μη διστάσετε να προσαρμόσετε τον κώδικα στη δική σας ροή εργασίας, να προσθέσετε logging ή να τον ενσωματώσετε σε μεγαλύτερα pipelines επεξεργασίας εγγράφων. Καλή προγραμματιστική! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Οι παρακάτω οδηγίες καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κυριαρχήσετε επιπλέον δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/greek/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ca5f66382a --- /dev/null +++ b/pdf/greek/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,267 @@ +--- +category: general +date: 2026-08-08 +description: Επαλήθευση υπογραφής PDF σε C# χρησιμοποιώντας το Aspose.PDF. Μάθετε + πώς να επικυρώνετε ψηφιακές υπογραφές PDF και να καταγράφετε τις υπογραφές PDF με + λίγες μόνο γραμμές κώδικα. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: el +lastmod: 2026-08-08 +og_description: Επαληθεύστε την υπογραφή PDF σε C# με το Aspose.PDF. Αυτός ο οδηγός + σας δείχνει πώς να επικυρώσετε ψηφιακή υπογραφή PDF, να καταγράψετε τις υπογραφές + PDF και να διαχειριστείτε αποτελεσματικά τις παραβιασμένες υπογραφές. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Επαλήθευση υπογραφής PDF σε C# – γρήγορο σεμινάριο Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Επαλήθευση υπογραφής PDF σε C# με το Aspose.PDF – πλήρης οδηγός +url: /el/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Επαλήθευση υπογραφής PDF σε C# με Aspose.PDF – πλήρης οδηγός + +Αν χρειάζεστε να **επαληθεύσετε υπογραφή PDF** σε μια εφαρμογή .NET, αυτός ο οδηγός σας δείχνει έναν σύντομο τρόπο για να το κάνετε με το Aspose.PDF. Θα μάθετε πώς να **επαληθεύσετε ψηφιακή υπογραφή PDF**, **καταγράψετε υπογραφές PDF**, και να εντοπίσετε παραβιασμένες υπογραφές με λίγες μόνο γραμμές κώδικα. + +Το tutorial καλύπτει τα πάντα, από την εγκατάσταση της βιβλιοθήκης μέχρι τη διαχείριση ειδικών περιπτώσεων όπως μη υπογεγραμμένα έγγραφα ή κρυπτογραφημένα PDF. Στο τέλος θα μπορείτε να ενσωματώσετε την επαλήθευση υπογραφών σε οποιοδήποτε έργο C#, διασφαλίζοντας την αυθεντικότητα των εισερχόμενων αρχείων PDF. + +**Προαπαιτούμενα** + +- .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.6+). +- Βασική εξοικείωση με C# και Visual Studio (ή οποιοδήποτε IDE προτιμάτε). +- Άδεια Aspose.PDF for .NET (η δωρεάν δοκιμή λειτουργεί για αξιολόγηση). + +Αν πληροίτε αυτές τις προϋποθέσεις, είστε έτοιμοι να ξεκινήσετε την επαλήθευση υπογραφών PDF. + +## Επαλήθευση υπογραφής PDF – ρύθμιση του έργου + +1. **Προσθέστε το πακέτο NuGet Aspose.PDF** + Ανοίξτε το Package Manager Console και εκτελέστε: + + ```bash + Install-Package Aspose.PDF + ``` + + Αυτό προσθέτει τη συναρμολόγηση `Aspose.Pdf` και τις εξαρτήσεις της. + +2. **Εισάγετε τους απαιτούμενους χώρους ονομάτων** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` σας παρέχει την επέκταση `Any` που χρησιμοποιείται αργότερα, ενώ το `Aspose.Pdf` περιέχει τις κλάσεις `Document` και `Signature`. + +## Φόρτωση του εγγράφου PDF + +Το πρώτο λειτουργικό βήμα είναι να ανοίξετε το PDF που θέλετε να εξετάσετε. Το Aspose.PDF διαβάζει το αρχείο στη μνήμη, επιτρέποντάς σας να ερωτήσετε τις υπογραφές του. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Γιατί είναι σημαντικό** – Η φόρτωση του εγγράφου μέσα σε ένα μπλοκ `using` εγγυάται ότι το χειριστήριο του αρχείου απελευθερώνεται άμεσα, αποτρέποντας προβλήματα κλειδώματος αρχείων σε υπηρεσίες που τρέχουν για μεγάλο χρονικό διάστημα. + +## Καταγραφή υπογραφών PDF + +Πριν επαληθεύσετε μια υπογραφή, ίσως θέλετε να γνωρίζετε πόσες υπογραφές υπάρχουν. Αυτό το βήμα δείχνει τη δυνατότητα **list PDF signatures**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Επεξήγηση** + +- `document.Signatures` επιστρέφει μια συλλογή από αντικείμενα `Signature`. +- `Count` σας λέει πόσες υπογραφές υπάρχουν. +- Κάθε `Signature` εκθέτει μεταδεδομένα όπως `Id`, `SignatureType` και `Reason`, που μπορεί να είναι χρήσιμα για αρχεία ελέγχου. + +**Ειδική περίπτωση** – Αν το PDF δεν έχει υπογραφές, το `Count` θα είναι `0` και η επανάληψη δεν θα εκτελεστεί. Μπορείτε να διαχειριστείτε αυτήν την κατάσταση με χάρη: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Επικύρωση ψηφιακής υπογραφής PDF – εντοπισμός παραβιασμένων υπογραφών + +Τώρα που μπορείτε να απαριθμήσετε τις υπογραφές, η κύρια εργασία είναι η **επαλήθευση της ακεραιότητας της υπογραφής PDF**. Το Aspose.PDF παρέχει την ιδιότητα `IsCompromised`, η οποία επιστρέφει `true` όταν το κρυπτογραφικό hash της υπογραφής δεν ταιριάζει πλέον με το περιεχόμενο του εγγράφου. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Γιατί λειτουργεί** + +- `Signature.IsCompromised` εκτελεί πλήρη κρυπτογραφική επικύρωση χρησιμοποιώντας την ενσωματωμένη αλυσίδα πιστοποιητικών. +- Ο τελεστής LINQ `Any` σταματά στην πρώτη παραβιασμένη υπογραφή, κάνοντας τον έλεγχο αποδοτικό ακόμη και για έγγραφα με πολλές υπογραφές. + +### Διαχείριση πολλαπλών υπογραφών ξεχωριστά + +Αν χρειάζεστε να γνωρίζετε ποια συγκεκριμένη υπογραφή απέτυχε, επαναλάβετε αντί να χρησιμοποιήσετε το `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Συμβουλή:** Αποθηκεύστε το αποτέλεσμα της επαλήθευσης μαζί με το `sig.Id` σε μια βάση δεδομένων για μετέπειτα δικανική ανάλυση. + +## Έξοδος αποτελεσμάτων και αντιμετώπιση ειδικών περιπτώσεων + +Παρακάτω υπάρχει ένα πλήρες, εκτελέσιμο πρόγραμμα που συνδυάζει τα παραπάνω βήματα. Φορτώνει ένα PDF, καταγράφει όλες τις υπογραφές, τις επικυρώνει και εκτυπώνει ένα σαφές αποτέλεσμα. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Αναμενόμενη έξοδος (έγκυρες υπογραφές)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Αναμενόμενη έξοδος (παραβιασμένη υπογραφή)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Συνηθισμένα προβλήματα και πώς να τα αποφύγετε + +| Πρόβλημα | Λύση | +|---------|----------| +| Το PDF είναι προστατευμένο με κωδικό. | Περνάτε τον κωδικό μέσω `document.Encrypt.Decrypt(password)` πριν προσπελάσετε τις `Signatures`. | +| Δεν έχει οριστεί άδεια Aspose.PDF. | Χρησιμοποιήστε `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` για να αποφύγετε υδατογραφήματα αξιολόγησης. | +| Μεγάλα PDF προκαλούν υψηλή χρήση μνήμης. | Επεξεργαστείτε το αρχείο σε λειτουργία streaming (`Document.Load(stream)`) αντί να φορτώνετε ολόκληρο το αρχείο ταυτόχρονα. | + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **επαληθεύσετε υπογραφή PDF** σε C# χρησιμοποιώντας το Aspose.PDF, πώς να **επαληθεύσετε ψηφιακή υπογραφή PDF**, και πώς να **καταγράψετε υπογραφές PDF** για αναφορές ή σκοπούς ελέγχου. Το πλήρες παράδειγμα δείχνει τη φόρτωση ενός εγγράφου, την απαρίθμηση των υπογραφών του, τον έλεγχο κάθε μιας για παραβίαση, και τη διαχείριση τυπικών ειδικών περιπτώσεων. + +Επόμενα βήματα που μπορείτε να εξερευνήσετε: + +- **Επικύρωση διακριτικών χρονικής σήμανσης** για να διασφαλιστεί ότι μια υπογραφή δημιουργήθηκε πριν λήξει το πιστοποιητικό. +- **Εξαγωγή πιστοποιητικών υπογράφοντα** (`sig.Certificate`) για προσαρμοσμένη επικύρωση αποθήκης εμπιστοσύνης. +- **Ενσωμάτωση με ASP.NET Core** για αυτόματη απόρριψη ανεβασμένων PDF που αποτυγχάνουν στην επαλήθευση. + +Μη διστάσετε να πειραματιστείτε με πολλαπλές υπογραφές, προσαρμοσμένη λογική επαλήθευσης ή εναλλακτικές βιβλιοθήκες PDF. Αν βρήκατε αυτόν τον οδηγό χρήσιμο, μοιραστείτε τον με συναδέλφους ή προσθέστε τις δικές σας συμβουλές στα σχόλια. + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κατακτήσετε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/greek/net/text-operations/_index.md index db74231221..97bf01f872 100644 --- a/pdf/greek/net/text-operations/_index.md +++ b/pdf/greek/net/text-operations/_index.md @@ -90,7 +90,7 @@ Μάθετε πώς να εξάγετε και να εμφανίζετε επισημασμένο κείμενο από έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει την εγκατάσταση, την υλοποίηση και τις πρακτικές εφαρμογές. ### [Πώς να εξαγάγετε κείμενο από συγκεκριμένες περιοχές σε PDF χρησιμοποιώντας το Aspose.PDF για .NET](./extract-text-specific-region-aspose-pdf-net/) -Μάθετε πώς να εξάγετε κείμενο από συγκεκριμένες περιοχές σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει τεχνικές εγκατάστασης, υλοποίησης και βελτιστοποίησης. +Μάθετε πώς να εξάγετε κείμενο από συγκεκριμένες περιοχές σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός η οδηγός καλύπτει τεχνικές εγκατάστασης, υλοποίησης και βελτιστοποίησης. ### [Πώς να επισημάνετε κείμενο σε PDF χρησιμοποιώντας το Aspose.PDF .NET: Ένας πλήρης οδηγός](./highlight-text-aspose-pdf-net/) Μάθετε πώς να επισημαίνετε αποτελεσματικά κείμενο σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF .NET, με οδηγίες βήμα προς βήμα και παραδείγματα κώδικα. @@ -126,7 +126,7 @@ Μάθετε πώς να εξάγετε και να αναζητάτε αποτελεσματικά κείμενο από PDF με το Aspose.PDF για .NET. Ακολουθήστε αυτόν τον οδηγό για πρακτικά βήματα υλοποίησης. ### [Εξαγωγή Κειμένου σε Κύρια Αρχεία PDF με το Aspose.PDF για .NET: Ένας Πλήρης Οδηγός](./mastering-pdf-extraction-aspose-pdf-net-guide/) -Μάθετε να εξάγετε αποτελεσματικά κείμενο από PDF χρησιμοποιώντας το Aspose.PDF για .NET, ακόμη και να χειρίζεστε πολύπλοκες διατάξεις. Αυτός ο οδηγός καλύπτει τη φόρτωση, την ανάλυση και τη βελτιστοποίηση των διαδικασιών εξαγωγής. +Μάθετε πώς να εξάγετε αποτελεσματικά κείμενο από PDF χρησιμοποιώντας το Aspose.PDF για .NET, ακόμη και να χειρίζεστε πολύπλοκες διατάξεις. Αυτός ο οδηγός καλύπτει τη φόρτωση, την ανάλυση και τη βελτιστοποίηση των διαδικασιών εξαγωγής. ### [Εξαγωγή Κειμένου σε Κύρια Αρχεία PDF με το Aspose.PDF για .NET: Οδηγός Προγραμματιστή](./aspose-pdf-net-text-extraction-guide/) Μάθετε πώς να εξάγετε αποτελεσματικά κείμενο από PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο ολοκληρωμένος οδηγός καλύπτει τη ρύθμιση, την υλοποίηση και την ενσωμάτωση των λειτουργιών εξαγωγής κειμένου. @@ -138,7 +138,7 @@ Μάθετε πώς να περιστρέφετε και να προσαρμόζετε αποτελεσματικά κείμενο μέσα σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει την εγκατάσταση, την υλοποίηση και τις προηγμένες λειτουργίες. ### [Κύριος έλεγχος αναζητήσεων κειμένου PDF με Regex χρησιμοποιώντας το Aspose.PDF .NET](./aspose-pdf-net-regex-text-search/) -Ένα σεμινάριο κώδικα για το Aspose.PDF Net +Ένα σεμιναριο κώδικα για το Aspose.PDF Net ### [Κύρια περιστρεφόμενη έκδοση κειμένου σε PDF χρησιμοποιώντας το Aspose.PDF για .NET: Ένας πλήρης οδηγός](./rotate-text-pdf-aspose-dotnet/) Μάθετε πώς να περιστρέφετε κείμενο σε έγγραφα PDF με το Aspose.PDF για .NET. Αυτός ο ολοκληρωμένος οδηγός καλύπτει την εγκατάσταση, παραδείγματα κώδικα και πρακτικές εφαρμογές. @@ -147,7 +147,7 @@ Μάθετε πώς να ευθυγραμμίζετε τέλεια το κείμενο μέσα σε αιωρούμενα πλαίσια χρησιμοποιώντας το Aspose.PDF για .NET. Αυτός ο ολοκληρωμένος οδηγός καλύπτει την εγκατάσταση, τις τεχνικές ευθυγράμμισης και συμβουλές απόδοσης. ### [Αντικατάσταση κύριου κειμένου σε PDF με το Aspose.PDF .NET](./aspose-pdf-net-text-replacement-guide/) -Ένα σεμινάριο κώδικα για το Aspose.PDF Net +Ένα σεμιναριο κώδικα για το Aspose.PDF Net ### [Εξοικείωση με την απόσταση χαρακτήρων σε PDF χρησιμοποιώντας το Aspose.PDF για .NET](./master-character-spacing-aspose-pdf/) Μάθετε πώς να εφαρμόζετε αποτελεσματικά την απόσταση χαρακτήρων σε έγγραφα PDF χρησιμοποιώντας το Aspose.PDF για .NET. Βελτιώστε την αναγνωσιμότητα και την οπτική ελκυστικότητα με πρακτικά σεμινάρια για το TextBuilder, το Fragment και άλλα. @@ -159,11 +159,14 @@ Μάθετε πώς να βελτιστοποιείτε τις γραμματοσειρές PDF χρησιμοποιώντας το Aspose.PDF .NET, βελτιστοποιήστε τα έγγραφά σας αφαιρώντας τις αχρησιμοποίητες γραμματοσειρές και αντικαθιστώντας τες με Arial Bold. ### [Αντικατάσταση γραμματοσειρών σε PDF χρησιμοποιώντας το Aspose.PDF για .NET](./replace-fonts-pdf-aspose-dotnet-guide/) -Ένα σεμινάριο κώδικα για το Aspose.PDF Net +Ένα σεμιναριο κώδικα για το Aspose.PDF Net ### [Διαμόρφωση κειμένου σε PDF με ετικέτες χρησιμοποιώντας το Aspose.PDF για .NET | Οδηγός για προσβάσιμη και αισθητική δημιουργία PDF](./style-text-tagged-pdfs-aspose-pdf-net/) Μάθετε πώς να διαμορφώνετε κείμενο σε έγγραφα PDF με ετικέτες με το Aspose.PDF για .NET. Αυτός ο οδηγός καλύπτει την εγκατάσταση, τις τεχνικές και τις πρακτικές εφαρμογές για τη βελτίωση της προσβασιμότητας. +### [Πώς να συνοψίσετε PDF με το Aspose.Pdf.AI – οδηγός](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Μάθετε πώς να δημιουργείτε περιλήψεις PDF χρησιμοποιώντας το Aspose.Pdf.AI με αυτόν τον βήμα-βήμα οδηγό. + ## Πρόσθετοι Πόροι - [Aspose.PDF για τεκμηρίωση δικτύου](https://docs.aspose.com/pdf/net/) diff --git a/pdf/greek/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/greek/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..2f42a193d1 --- /dev/null +++ b/pdf/greek/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Πώς να συνοψίσετε PDF με το Aspose.Pdf.AI – μάθετε πώς να συνοψίζετε + PDF με AI, να δημιουργήσετε μια σύνοψη PDF και να αποθηκεύσετε τη σύνοψη ως PDF. + Πλήρης κώδικας και βέλτιστες πρακτικές. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: el +lastmod: 2026-08-08 +og_description: Πώς να συνοψίσετε ένα PDF με το Aspose.Pdf.AI. Αυτό το σεμινάριο σας + δείχνει πώς να συνοψίσετε ένα PDF με AI, να δημιουργήσετε μια σύνοψη PDF και να + αποθηκεύσετε τη σύνοψη ως PDF σε λίγες γραμμές C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Πώς να συνοψίσετε PDF με το Aspose.Pdf.AI – βήμα‑βήμα οδηγός +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Πώς να συνοψίσετε PDF με το Aspose.Pdf.AI – οδηγός +url: /el/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να συνοψίσετε PDF με το Aspose.Pdf.AI – οδηγός + +Αν χρειάζεστε **πώς να συνοψίσετε PDF** γρήγορα και αξιόπιστα, μπορείτε να αφήσετε ένα μοντέλο AI να κάνει το σκληρό έργο. Αυτό το tutorial σας δείχνει ακριβώς πώς να συνοψίσετε PDF με AI, να δημιουργήσετε μια σύνοψη PDF και να αποθηκεύσετε τη σύνοψη ως PDF χρησιμοποιώντας το Aspose.Pdf.AI SDK για .NET. Θα λάβετε ένα πλήρες, εκτελέσιμο παράδειγμα και μια εξήγηση κάθε γραμμής ώστε να μπορείτε να προσαρμόσετε τη λύση στα δικά σας έργα. + +Ο οδηγός καλύπτει: + +* Προετοιμασία του φακέλου προέλευσης και του κλειδιού API +* Δημιουργία ενός `OpenAIClient` που επικοινωνεί με το μοντέλο +* Διαμόρφωση επιλογών σύνοψης όπως temperature και διαδρομή εγγράφου +* Κατασκευή ενός `SummaryCopilot` και ανάκτηση του κειμένου σύνοψης ασύγχρονα +* Αποθήκευση της παραγόμενης σύνοψης πίσω σε αρχείο PDF + +Δεν απαιτούνται εξωτερικές υπηρεσίες πέρα από το σημείο λήψης του OpenAI, και ο κώδικας λειτουργεί με .NET 6+ και Aspose.Pdf.AI 23.7 (ή νεότερη έκδοση). + +## Προαπαιτούμενα + +* **.NET 6 SDK** (ή οποιαδήποτε νεότερη έκδοση .NET) +* **Aspose.Pdf.AI for .NET** – εγκατάσταση μέσω NuGet: `dotnet add package Aspose.Pdf.AI` +* Ένα **κλειδί API του OpenAI** με πρόσβαση στο μοντέλο που θέλετε να χρησιμοποιήσετε (π.χ., `gpt‑4o`) +* Ένα αρχείο PDF που θέλετε να συνοψίσετε (το παράδειγμα χρησιμοποιεί το `SampleDocument.pdf`) + +Βεβαιωθείτε ότι ο φάκελος που ορίζετε στο `dataDirectory` υπάρχει και ότι η εφαρμογή έχει δικαιώματα ανάγνωσης/εγγραφής. + +## Βήμα 1: Ρύθμιση της δομής του έργου + +Δημιουργήστε ένα έργο console (ή ενσωματώστε τον κώδικα σε οποιαδήποτε υπάρχουσα εφαρμογή .NET). Το ελάχιστο `Program.cs` είναι ως εξής: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Γιατί αυτή η δομή είναι σημαντική + +* **`await using`** απελευθερώνει αυτόματα το `OpenAIClient`, κλείνοντας τις συνδέσεις HTTP. +* **`Path.Combine`** δημιουργεί διαδρομές ανεξάρτητες από το λειτουργικό σύστημα, αποφεύγοντας σφάλματα σε Windows vs. Linux. +* **Temperature** ελέγχει τη δημιουργικότητα· `0.5` δίνει μια ισορροπημένη, πραγματική σύνοψη. +* **`GetSummaryAsync`** επιστρέφει απλό κείμενο, ενώ το `SaveSummaryAsync` δημιουργεί ένα σωστό PDF που διατηρεί τις γραμματοσειρές και τη διάταξη. + +## Βήμα 2: Κατανόηση των επιλογών σύνοψης + +Η κλάση `OpenAISummaryCopilotOptions` σας επιτρέπει να ρυθμίσετε λεπτομερώς τη διαδικασία σύνοψης: + +| Επιλογή | Σκοπός | Τυπικές τιμές | +|--------|---------|----------------| +| `WithTemperature(double)` | Ελέγχει την τυχαιότητα. `0.0` = ντετερμινιστικό, `1.0` = πολύ δημιουργικό. | `0.3‑0.7` για επιχειρηματικά έγγραφα | +| `WithDocument(string)` | Διαδρομή του πηγαίου PDF. Πρέπει να είναι αναγνώσιμο αρχείο. | Οποιαδήποτε απόλυτη ή σχετική διαδρομή | +| `WithPrompt(string)` *(προαιρετικό)* | Προσαρμοσμένη προτροπή για καθοδήγηση του μοντέλου. | “Summarize the key findings in 150 words.” | + +Αν έχετε **μεγάλα PDF** (πάνω από 10 MB ή πολλές σελίδες), σκεφτείτε να χωρίσετε το έγγραφο σε μικρότερα τμήματα πριν από τη σύνοψη ώστε να αποφύγετε σφάλματα ορίου tokens. Το SDK δεν κάνει αυτόματα chunking· μπορείτε να χρησιμοποιήσετε το `PdfDocument` από το `Aspose.Pdf` για να εξάγετε σελίδες και να τις τροφοδοτήσετε μία‑μια. + +## Βήμα 3: Εκτέλεση του κώδικα και επαλήθευση του αποτελέσματος + +1. Τοποθετήστε το `SampleDocument.pdf` μέσα στον φάκελο `Data` που αναφέρατε. +2. Αντικαταστήστε το `"YOUR_API_KEY"` με το πραγματικό κλειδί OpenAI. +3. Εκτελέστε `dotnet run`. + +Θα πρέπει να δείτε δύο ενότητες στην κονσόλα: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Ανοίξτε το `Summary_out.pdf` με οποιονδήποτε προβολέα PDF – θα περιέχει το ίδιο κείμενο σύνοψης, μορφοποιημένο με προεπιλεγμένη γραμματοσειρά. Το PDF είναι πλήρως αναζητήσιμο επειδή το SDK ενσωματώνει το κείμενο ως κανονική σελίδα PDF. + +## Βήμα 4: Συνηθισμένες παραλλαγές και διαχείριση ειδικών περιπτώσεων + +### Σύνοψη μόνο ενός τμήματος του εγγράφου + +Αν χρειάζεστε **summarize pdf with ai** για ένα συγκεκριμένο κεφάλαιο, εξάγετε πρώτα αυτό το εύρος: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Στη συνέχεια, ορίστε το `WithDocument` στο `Chapter5.pdf`. + +### Προσαρμογή του μήκους της σύνοψης + +Μπορείτε να επηρεάσετε το μήκος προσθέτοντας μια προσαρμοσμένη προτροπή: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Διαχείριση σφαλμάτων API + +Διακοπές δικτύου ή περιορισμοί quota προκαλούν `Aspose.Pdf.AI.Exceptions.AIException`. Τυλίξτε την κλήση σε μπλοκ `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Αποθήκευση της σύνοψης με προσαρμοσμένη διάταξη + +Το `SaveSummaryAsync` γράφει απλό κείμενο. Για να μορφοποιήσετε το PDF (προσθήκη τίτλου, κεφαλίδας ή branding), δημιουργήστε ένα νέο `PdfDocument` και εισάγετε τη σύνοψη χειροκίνητα: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Βήμα 5: Συμβουλές απόδοσης και βέλτιστες πρακτικές + +* **Επαναχρησιμοποίηση του `OpenAIClient`** για πολλαπλές συνοψίσεις στην ίδια διεργασία – η δημιουργία πελάτη είναι φθηνή, αλλά η επαναχρησιμοποίηση του υποκείμενου `HttpClient` μειώνει την εξάντληση sockets. +* **Cache τη σύνοψη** εάν το πηγαίο PDF δεν αλλάζει· μπορείτε να αποθηκεύσετε το κείμενο σε βάση δεδομένων και να παραλείψετε το API. + +## Τι θα πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικές θεματικές που επεκτείνουν τις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε επιπλέον δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/conversion-export/_index.md b/pdf/hindi/net/conversion-export/_index.md index 442c15df85..53ebd1f0df 100644 --- a/pdf/hindi/net/conversion-export/_index.md +++ b/pdf/hindi/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि ### [Aspose.PDF का उपयोग करके .NET में PDF से TIFF रूपांतरण: एक चरण-दर-चरण मार्गदर्शिका](./pdf-to-tiff-conversion-aspose-pdf-net/) .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों को TIFF छवियों में परिवर्तित करना सीखें। कस्टम रंग गहराई और उन्नत छवि प्रसंस्करण तकनीकों में महारत हासिल करें। +### [Aspose.PDF के साथ PDF को HTML के रूप में सहेजें – चरण‑दर‑चरण गाइड](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +PDF को HTML में बदलने की पूरी प्रक्रिया सीखें, कोड उदाहरण और सर्वोत्तम अभ्यासों के साथ। + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/hindi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2afc58b3d9 --- /dev/null +++ b/pdf/hindi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF का उपयोग करके C# में PDF को HTML के रूप में सहेजें। जानें + कि PDF को HTML में कैसे बदलें, रास्टर इमेजेज़ को छोड़ें, और सामान्य किनारी मामलों + को कैसे संभालें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: hi +lastmod: 2026-08-08 +og_description: Aspose.PDF का उपयोग करके PDF को HTML के रूप में सहेजें। यह गाइड आपको + दिखाता है कि PDF को HTML में कैसे बदलें, रास्टर इमेजेज़ को छोड़ें, और सामान्य समस्याओं + से बचें। +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Aspose.PDF के साथ PDF को HTML में सहेजें – पूर्ण C# ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Aspose.PDF के साथ PDF को HTML के रूप में सहेजें – चरण‑दर‑चरण मार्गदर्शिका +url: /hi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF के साथ PDF को HTML के रूप में सहेजें – चरण‑दर‑चरण गाइड + +यदि आपको **PDF को HTML के रूप में जल्दी से सहेजना** है, तो यह ट्यूटोरियल आपको Aspose.PDF for .NET के साथ इसे कैसे करना है, बिल्कुल दिखाता है। चाहे आप एक दस्तावेज़‑व्यूअर वेब ऐप बना रहे हों या SEO‑अनुकूल इंडेक्सिंग के लिए रिपोर्ट निर्यात कर रहे हों, आप एक पूर्ण, चलाने योग्य समाधान देखेंगे जो PDF को HTML में परिवर्तित करता है और आपको रास्टर इमेजेज़ पर सूक्ष्म नियंत्रण देता है। + +मुख्य कार्य के अतिरिक्त, हम **aspose pdf html conversion** विकल्पों को भी कवर करेंगे जो आपको रास्टर इमेजेज़ को छोड़ने, CSS हैंडलिंग को समायोजित करने, और बड़े दस्तावेज़ों को कुशलता से प्रबंधित करने की अनुमति देते हैं। इस गाइड के अंत तक आपके पास एक स्व-निहित प्रोग्राम होगा जिसे आप किसी भी .NET प्रोजेक्ट में डाल सकते हैं। + +## आवश्यकताएँ + +* .NET 6.0 SDK या बाद वाला (कोड .NET Core और .NET Framework के साथ भी काम करता है) +* Visual Studio 2022 या कोई भी IDE जो C# को सपोर्ट करता है +* Aspose.PDF for .NET लाइसेंस (नि:शुल्क ट्रायल मूल्यांकन के लिए काम करता है) +* `report.pdf` नामक PDF फ़ाइल को उस फ़ोल्डर में रखें जिसे आप कोड से संदर्भित कर सकते हैं + +`Aspose.Pdf` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है। + +## चरण 1: Aspose.PDF NuGet पैकेज स्थापित करें + +अपने प्रोजेक्ट फ़ोल्डर में टर्मिनल खोलें और चलाएँ: + +```bash +dotnet add package Aspose.Pdf +``` + +यह पैकेज `Aspose.Pdf` नेमस्पेस जोड़ता है, जिसमें `Document` क्लास और `HtmlSaveOptions` टाइप शामिल हैं, जो **convert pdf to html** ऑपरेशनों के लिए उपयोग होते हैं। + +## चरण 2: एक कंसोल प्रोजेक्ट बनाएं और using निर्देश जोड़ें + +यदि आपके पास पहले से नहीं है तो एक नया कंसोल एप्लिकेशन बनाएं: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +फिर `Program.cs` खोलें और आवश्यक नेमस्पेस जोड़ें: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +ये निर्देश आपको कोर PDF API और HTML सेव विकल्पों तक पहुँच देते हैं जो **aspose convert pdf html** प्रक्रिया को नियंत्रित करते हैं। + +## चरण 3: PDF दस्तावेज़ लोड करें + +पहली ऑपरेशनल लाइन स्रोत PDF को `Aspose.Pdf.Document` ऑब्जेक्ट में पढ़ती है। यह ऑब्जेक्ट पूरी PDF फ़ाइल को मेमोरी में दर्शाता है और सहेजने, संपादित करने, और सामग्री निकालने के लिए मेथड्स प्रदान करता है। + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*क्यों यह महत्वपूर्ण है*: दस्तावेज़ को एक बार लोड करने से मेमोरी उपयोग पूर्वानुमेय रहता है, विशेष रूप से बड़े PDFs के लिए। यदि फ़ाइल नहीं मिलती है, तो Aspose `FileNotFoundException` फेंकता है, इसलिए पथ सही रखें। + +## चरण 4: HTML सेव विकल्प कॉन्फ़िगर करें + +`HtmlSaveOptions` आपको PDF के परिवर्तित होने के तरीके को बारीकी से समायोजित करने देता है। इस ट्यूटोरियल में हम आउटपुट को हल्का रखने के लिए रास्टर इमेजेज़ को छोड़ते हैं, लेकिन यदि आपको उनकी आवश्यकता है तो आप मोड को `EmbedAll` में बदल सकते हैं। + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**मुख्य बिंदु**: + +* `RasterImagesSavingMode.Skip` Aspose को कन्वर्ज़न के दौरान बिटमैप इमेजेज़ (JPEG, PNG) को अनदेखा करने के लिए कहता है। यह तब आदर्श है जब स्रोत PDF में स्कैन किए गए पृष्ठ हों जिन्हें आप HTML दृश्य में नहीं चाहते। +* यदि आप चाहते हैं कि इमेजेज़ अलग फ़ाइलों के रूप में सहेजे जाएँ, तो आप `EmbedAll` या `External` में स्विच कर सकते हैं। +* `ResourcesFolder` प्रॉपर्टी केवल तब प्रासंगिक होती है जब इमेजेज़ बाहरी रूप से सहेजी जाती हैं। + +## चरण 5: दस्तावेज़ को HTML के रूप में सहेजें + +अब आप कॉन्फ़िगर किए गए विकल्पों का उपयोग करके HTML फ़ाइल को डिस्क पर लिखते हैं। + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +इस कॉल के समाप्त होने के बाद, `report.html` में मूल PDF से संरक्षित पाठ्य सामग्री, वेक्टर ग्राफ़िक्स, और लेआउट होता है, लेकिन बिना किसी रास्टर इमेज के। आप परिणाम की पुष्टि करने के लिए फ़ाइल को ब्राउज़र में खोल सकते हैं। + +## अपेक्षित आउटपुट + +जब आप `report.html` को Chrome या Edge में खोलते हैं, तो आपको दिखना चाहिए: + +* सभी हेडिंग, पैराग्राफ, और वेक्टर शैप्स सही ढंग से रेंडर होते हैं। +* रास्टर इमेजेज़ के लिए कोई `` टैग नहीं है (वे `Skip` मोड के कारण हटाए गए हैं)। +* साफ़, न्यूनतम CSS या तो इनलाइन या अलग स्टाइलशीट में, आपके द्वारा चुने गए विकल्प के अनुसार। + +यदि आपको पुष्टि करनी है कि इमेजेज़ हटाए गए हैं, तो पेज सोर्स (`Ctrl+U`) देखें। आपको कोई `` एंट्री नहीं मिलेगी। + +## चरण 6: सामान्य किनारे मामलों को संभालें + +### 6.1 बड़े PDFs (> 100 MB) + +बहुत बड़े फ़ाइलों के लिए, मेमोरी दबाव कम करने हेतु स्ट्रीमिंग सक्षम करें: + +```csharp +htmlOpts.Streaming = true; +``` + +स्ट्रीमिंग HTML के टुकड़ों को सीधे डिस्क पर लिखती है, जिससे पूरे दस्तावेज़ को मेमोरी में रखने से बचा जा सके। + +### 6.2 पासवर्ड‑सुरक्षित PDFs + +यदि स्रोत PDF एन्क्रिप्टेड है, तो सहेजने से पहले पासवर्ड प्रदान करें: + +```csharp +doc.Decrypt("yourPassword"); +``` + +डिक्रिप्ट किए बिना सहेजने का प्रयास करने पर `InvalidPasswordException` फेंका जाता है। + +### 6.3 यूनिकोड कैरेक्टर + +Aspose.PDF स्वचालित रूप से यूनिकोड फ़ॉन्ट एम्बेड करता है, लेकिन आप सुसंगत रेंडरिंग के लिए एक विशिष्ट फ़ॉन्ट को मजबूर कर सकते हैं: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 कई पृष्ठों के लिए कस्टम फ़ाइल नामकरण + +यदि आप प्रत्येक PDF पृष्ठ को अलग HTML फ़ाइल के रूप में चाहते हैं, तो सेट करें: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +यह `report_page_1.html`, `report_page_2.html`, आदि बनाता है, जो वेब एप्लिकेशन में पेजिनेशन के लिए उपयोगी हो सकता है। + +## पूर्ण, चलाने योग्य उदाहरण + +नीचे वह पूर्ण प्रोग्राम है जिसमें चर्चा किए गए सभी चरण शामिल हैं। इसे `Program.cs` में कॉपी करें, पथों को समायोजित करें, और `dotnet run` चलाएँ। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**सत्यापन**: चलाने के बाद, कंसोल सफलता संदेश प्रिंट करता है। उत्पन्न HTML फ़ाइल को ब्राउज़र में खोलें यह पुष्टि करने के लिए कि टेक्स्ट और वेक्टर ग्राफ़िक्स सही ढंग से दिख रहे हैं और रास्टर इमेजेज़ हटाए गए हैं। + +## प्रो टिप्स और संभावित समस्याएँ + +* **Pro tip**: यदि बाद में आपको रास्टर इमेजेज़ की आवश्यकता हो, तो `RasterImagesSavingMode` को `External` में बदलें और `ResourcesFolder` सेट करें। इससे निकाले गए बिटमैप्स के साथ एक `images` सब‑फ़ोल्डर बनता है। +* **Watch out for**: स्कैन की गई इमेजेज़ पर अत्यधिक निर्भर PDFs में डिफ़ॉल्ट `Skip` मोड का उपयोग करने से उन इमेजेज़ की जगह खाली क्षेत्र बनेंगे। हमेशा अपने दस्तावेज़ों के प्रतिनिधि नमूने के साथ परीक्षण करें। +* **Performance tip**: कई दस्तावेज़ों के लिए एक ही `HtmlSaveOptions` इंस्टेंस को पुनः उपयोग करने से बैच कन्वर्ज़न में ऑब्जेक्ट‑क्रिएशन ओवरहेड कम होता है। +* **Version check**: दिखाया गया API Aspose.PDF for .NET संस्करण 23.9 और बाद के साथ काम करता है। पुराने संस्करणों में `HtmlSaveOptions.RasterImagesSavingMode` थोड़ा अलग enum नाम के साथ हो सकता है। + +## निष्कर्ष + +अब आप जानते हैं कि Aspose.PDF का उपयोग करके **PDF को HTML के रूप में कैसे सहेजें**, रास्टर इमेज हैंडलिंग को कैसे नियंत्रित करें, और बड़े फ़ाइलों, पासवर्ड सुरक्षा, और प्रति‑पृष्ठ HTML आउटपुट जैसी सामान्य चुनौतियों को कैसे संबोधित करें। यह पूर्ण समाधान आपको किसी भी C# एप्लिकेशन में PDF‑to‑HTML कन्वर्ज़न को आत्मविश्वास के साथ एकीकृत करने देता है। + +### आगे क्या? + +* फ़ॉन्ट एम्बेड करने और CSS को कस्टमाइज़ करने के लिए **aspose pdf html conversion** का अन्वेषण करें। +* इस कन्वर्ज़न को एक वेब API के साथ मिलाकर मांग पर HTML सर्व करें। +* विपरीत दिशा आज़माएँ—**convert pdf to html** और फिर PDF में वापस बदलें—ताकि राउंड‑ट्रिप फ़िडेलिटी की पुष्टि हो सके। + +विकल्पों के साथ प्रयोग करने में संकोच न करें, और अपनी खोजें टिप्पणी में या Aspose फ़ोरम पर साझा करें। कोडिंग का आनंद लें! + +## अब आपको क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में निपुण बनने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [Aspose.PDF का उपयोग करके .NET में PDF को HTML में बदलें बिना इमेजेज़ सहेजे](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [Aspose.PDF .NET का उपयोग करके PDF से HTML रूपांतरण: इमेजेज़ को बाहरी PNG के रूप में सहेजें](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [Aspose.PDF .NET का उपयोग करके कस्टम इमेज URL के साथ PDF को HTML में बदलें: एक व्यापक गाइड](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/hindi/net/digital-signatures/_index.md index 85a0f84d5f..dc530a99bf 100644 --- a/pdf/hindi/net/digital-signatures/_index.md +++ b/pdf/hindi/net/digital-signatures/_index.md @@ -45,7 +45,6 @@ C# का उपयोग करके PDF हस्ताक्षर को ### [C# में PDF हस्ताक्षर सत्यापित करें – डिजिटल हस्ताक्षर PDF को मान्य करने के लिए पूर्ण गाइड](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) ### [PDF को कैसे सत्यापित करें – Aspose के साथ PDF हस्ताक्षर मान्य करें](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) -Aspose का उपयोग करके PDF हस्ताक्षर को सत्यापित करने की चरण‑दर‑चरण प्रक्रिया सीखें। ### [PDF दस्तावेज़ लोड करें C# – PDF/X‑4 में बदलें और हस्ताक्षर सूचीबद्ध करें](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) C# में PDF दस्तावेज़ लोड करके उसे PDF/X‑4 में परिवर्तित करने और सभी डिजिटल हस्ताक्षरों को सूचीबद्ध करने का चरण-दर-चरण मार्गदर्शक। @@ -53,6 +52,8 @@ C# में PDF दस्तावेज़ लोड करके उसे PD ### [Aspose के साथ PDF हस्ताक्षर सत्यापित करें – PDF को HTML में परिवर्तित करें](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Aspose का उपयोग करके PDF हस्ताक्षर की वैधता जांचें और PDF को HTML में बदलें। +### [Aspose.PDF के साथ PDF को मान्य कैसे करें – C# में PDF हस्ताक्षर वैधता जांचें](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/hindi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..39195e71ad --- /dev/null +++ b/pdf/hindi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF का उपयोग करके PDF को कैसे मान्य करें और PDF डिजिटल हस्ताक्षर + को कैसे सत्यापित करें। PDF हस्ताक्षर को जल्दी जांचने के लिए इस चरण‑दर‑चरण गाइड का + पालन करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: hi +lastmod: 2026-08-08 +og_description: Aspose.PDF का उपयोग करके PDF को कैसे वैध करें। कुछ ही C# कोड लाइनों + में PDF डिजिटल सिग्नेचर को वैध करना और PDF सिग्नेचर की वैधता जांचना सीखें। +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: PDF को वैध कैसे करें – C# में Aspose.PDF के साथ PDF हस्ताक्षर की वैधता जांचें +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Aspose.PDF के साथ PDF को कैसे वैलिडेट करें – C# में PDF सिग्नेचर की वैधता जांचें +url: /hi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF के साथ PDF को वैध कैसे करें – C# में PDF सिग्नेचर वैधता जांचें + +यदि आपको डिजिटल सिग्नेचर वाले **PDF को वैध कैसे करें** फ़ाइलों की आवश्यकता है, तो यह ट्यूटोरियल एक पूर्ण समाधान दिखाता है। आप सीखेंगे कि PDF को कैसे लोड करें, एक सर्टिफ़िकेट वैलिडेटर बनाएं, और Aspose.PDF for .NET के साथ PDF सिग्नेचर वैधता कैसे जांचें। + +PDF डिजिटल सिग्नेचर को वैध करना अनुपालन, इनवॉइसिंग और सुरक्षित दस्तावेज़ विनिमय के लिए एक सामान्य आवश्यकता है। इस गाइड के अंत तक आप आत्मविश्वास के साथ यह सत्यापित कर सकते हैं कि साइन किया गया PDF भरोसेमंद है या नहीं, और आप सामान्य किनारे के मामलों जैसे कि गायब सर्टिफ़िकेट या कई सिग्नेचर को कैसे संभालें, यह समझेंगे। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +- .NET 6.0 या बाद का संस्करण स्थापित हो +- Visual Studio 2022 जैसा कोई IDE (या कोई भी एडिटर जो C# को सपोर्ट करता हो) +- **Aspose.PDF for .NET** की लाइसेंस्ड कॉपी (मुफ़्त ट्रायल मूल्यांकन के लिए काम करता है) +- एक साइन किया हुआ PDF फ़ाइल (`signed.pdf`) और, यदि सिग्नेचर किसी प्राइवेट CA पर निर्भर करता है, तो संबंधित भरोसेमंद सर्टिफ़िकेट (`trustedCertificate.pfx`) + +`Aspose.PDF` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है। + +## Step 1: Install Aspose.PDF + +अपने प्रोजेक्ट फ़ोल्डर में टर्मिनल खोलें और चलाएँ: + +```bash +dotnet add package Aspose.PDF +``` + +यह कमांड नवीनतम Aspose.PDF लाइब्रेरी जोड़ता है, जिसमें बाद में उपयोग किए जाने वाले `Document` और `CertificateValidator` क्लासेज़ शामिल हैं। + +## Step 2: Load the PDF document + +PDF को लोड करना वह पहला कार्य है जो आप **PDF को प्रोग्रामेटिकली कैसे लोड करें** के दौरान करते हैं। `Document` कन्स्ट्रक्टर फ़ाइल पाथ, स्ट्रीम, या बाइट एरे को स्वीकार करता है। स्पष्टता के लिए पूर्ण पाथ का उपयोग किया गया है। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**क्यों यह महत्वपूर्ण है:** `Document` ऑब्जेक्ट संपूर्ण PDF फ़ाइल को मेमोरी में दर्शाता है। फ़ाइल को लोड किए बिना आप उसकी `Signatures` कलेक्शन तक पहुँच नहीं सकते, जो **PDF सिग्नेचर जांचें** डेटा के लिए आवश्यक है। + +## Step 3: Prepare the certificate validator + +डिजिटल सिग्नेचर तभी भरोसेमंद माना जाता है जब साइनिंग सर्टिफ़िकेट किसी ऐसे रूट से जुड़ा हो जिसे आप भरोसेमंद मानते हैं। `CertificateValidator` आपको Aspose.PDF को भरोसेमंद सर्टिफ़िकेट स्टोर या किसी विशिष्ट PFX फ़ाइल की ओर इंगित करने की अनुमति देता है। + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +यदि आपका PDF सार्वजनिक CA का उपयोग करता है जिसे Windows पहले से भरोसा करता है, तो आप `certPath` को छोड़ सकते हैं और `CertificateValidator` को उसके डिफ़ॉल्ट कन्स्ट्रक्टर से इंस्टैंशिएट कर सकते हैं। कस्टम PFX प्रदान करना आंतरिक PKI वातावरणों के लिए उपयोगी है। + +## Step 4: Validate the first digital signature + +PDF में कई सिग्नेचर हो सकते हैं। सरलता के लिए, यह ट्यूटोरियल पहले सिग्नेचर (`Signatures[0]`) को वैध करता है। `Validate` मेथड `true` लौटाता है जब सिग्नेचर क्रिप्टोग्राफ़िक रूप से सही **और** साइनिंग सर्टिफ़िकेट भरोसेमंद हो। + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**आंतरिक प्रक्रिया:** +- मेथड साइन किए गए कंटेंट के हैश की तुलना सिग्नेचर वैल्यू से करता है। +- प्रदान किए गए वैलिडेटर का उपयोग करके सर्टिफ़िकेट चेन बनाता है। +- यदि वैलिडेटर इसके लिए कॉन्फ़िगर किया गया है, तो रिवोकेशन स्टेटस (CRL/OCSP) का मूल्यांकन करता है। + +### Handling multiple signatures + +यदि आपके PDF में एक से अधिक सिग्नेचर हैं, तो `Signatures` कलेक्शन पर इटरेट करें: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +यह पैटर्न आपको प्रत्येक पेज पर **PDF सिग्नेचर जांचें** और व्यक्तिगत परिणाम रिपोर्ट करने की अनुमति देता है। + +## Step 5: Output the validation result + +अंत में, परिणाम को कंसोल पर लिखें। प्रोडक्शन कोड में आप संभवतः परिणाम को लॉग करेंगे या अमान्य सिग्नेचर के लिए एक्सेप्शन उठाएंगे। + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +या + +``` +Invalid +``` + +संदेश `Validate` द्वारा लौटाए गए बूलियन को दर्शाता है। “Invalid” परिणाम दस्तावेज़ में छेड़छाड़, भरोसेमंद न होने वाला सर्टिफ़िकेट, या समाप्त हो चुका साइनिंग सर्टिफ़िकेट दर्शा सकता है। + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +यदि आपको `Invalid` मिलता है और आप जानते हैं कि सिग्नेचर भरोसेमंद होना चाहिए, तो सुनिश्चित करें कि सही रूट सर्टिफ़िकेट `CertificateValidator` को प्रदान किया गया है। कई रूट्स के लिए `X509Certificate2Collection` को स्वीकार करने वाला ओवरलोड उपयोग करें। + +### 2. Signature with external references +कुछ सिग्नेचर बाहरी कंटेंट (जैसे अटैच्ड फ़ाइल) को कवर करते हैं। सुनिश्चित करें कि बाहरी संसाधन उपलब्ध हों; अन्यथा हैश वेरिफिकेशन फेल हो जाएगा। + +### 3. Time‑stamp validation +सिग्नेचर में टाइम‑स्टैम्प टोकन हो सकता है। इसे वैध करने के लिए वैलिडेटर को टाइम‑स्टैम्प अथॉरिटी (TSA) सर्टिफ़िकेट्स की जाँच करने के लिए कॉन्फ़िगर करें: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +सैकड़ों पेज वाले PDF को लोड करने से मेमोरी की खपत बढ़ सकती है। यदि आपको केवल सिग्नेचर डेटा चाहिए, तो `PdfFileEditor` का उपयोग करके सिग्नेचर डिक्शनरी को पेज रेंडर किए बिना निकालें। + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +`Document` इंस्टैंसेज़ थ्रेड‑सेफ़ नहीं हैं। कई PDF को समानांतर में वैध करने के लिए प्रत्येक थ्रेड में नया `Document` बनाएं। + +## Full, runnable example + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप कॉपी‑पेस्ट करके फ़ाइल पाथ अपडेट करने के बाद चला सकते हैं। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**प्रोग्राम चलाने पर** प्रत्येक सिग्नेचर के लिए एक लाइन प्रिंट होगी, जो स्पष्ट रूप से दर्शाएगी कि PDF **PDF डिजिटल सिग्नेचर वैधता** जांच पास करता है या नहीं। + +## Conclusion + +अब आप **PDF को वैध कैसे करें** उन फ़ाइलों के लिए जो डिजिटल सिग्नेचर रखती हैं, Aspose.PDF for .NET का उपयोग करके जानते हैं। ट्यूटोरियल ने PDF लोड करना, सर्टिफ़िकेट वैलिडेटर कॉन्फ़िगर करना, PDF सिग्नेचर वैधता जांचना, कई सिग्नेचर संभालना, और सामान्य समस्याओं का समाधान शामिल किया। + +अगला कदम, **PDF को साइन कैसे करें**, **टाइम‑स्टैम्प टोकन कैसे जोड़ें**, और **साइन किया हुआ कंटेंट कैसे निकालें** जैसे संबंधित विषयों को एक्सप्लोर करें। ये एक्सटेंशन आपको C# में एक पूर्ण‑से‑पूर्ण सुरक्षित दस्तावेज़ वर्कफ़्लो बनाने में मदद करेंगे। + +--- + + +## What Should You Learn Next? + +नीचे दिए गए ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन एप्रोच को एक्सप्लोर कर सकें। + +- [PDF को कैसे वेरिफ़ाई करें – Aspose के साथ PDF सिग्नेचर वैध करें](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Aspose.PDF .NET का उपयोग करके PDF सिग्नेचर जानकारी कैसे निकालें: एक स्टेप‑बाय‑स्टेप गाइड](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Aspose.PDF .NET का उपयोग करके PDF डिजिटल सिग्नेचर कैसे हटाएँ | पूर्ण गाइड](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/hindi/net/document-conversion/_index.md index 4b6d53e4a0..7c69afd63c 100644 --- a/pdf/hindi/net/document-conversion/_index.md +++ b/pdf/hindi/net/document-conversion/_index.md @@ -40,7 +40,7 @@ | [PDF को PNG में बदलें – C# में PDF पृष्ठों को PNG में परिवर्तित करें](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | इस चरण-दर-चरण ट्यूटोरियल के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF पृष्ठों को PNG छवियों में बदलना सीखें। | | [पीडीएफ से पीपीटी](./pdf-to-ppt/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF को PPT में परिवर्तित करना सीखें। आसान, कुशल और प्रस्तुतियों के लिए एकदम सही। | | [पीडीएफ से एसवीजी](./pdf-to-svg/) | इस चरण-दर-चरण ट्यूटोरियल में जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों को SVG प्रारूप में कैसे परिवर्तित किया जाए। डेवलपर्स और डिज़ाइनरों के लिए बिल्कुल सही। | -| [पीडीएफ से टीईएक्स](./pdf-to-tex/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF को TeX में परिवर्तित करना सीखें। दस्तावेज़ प्रसंस्करण कौशल को बढ़ाने के इच्छुक डेवलपर्स के लिए बिल्कुल सही। | +| [पीडीएफ से टीईएक्स](./pdf-to-tex/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF को TeX में परिवर्तित करना सीखें। दस्तावेज़ प्रसंस्करण कौशल को बढ़ाने की इच्छुक डेवलपर्स के लिए बिल्कुल सही। | | [पीडीएफ से एक्सएलएस](./pdf-to-xls/) .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों को आसानी से XLS प्रारूप में बदलें। सहज डेटा निष्कर्षण के लिए हमारे चरण-दर-चरण मार्गदर्शिका का पालन करें। | | [पीडीएफ से XML](./pdf-to-xml/) | इस व्यापक ट्यूटोरियल में जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF को XML में कैसे परिवर्तित किया जाए। कोड उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका शामिल है। | | [पीडीएफ से एक्सपीएस](./pdf-to-xps/) | इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF को XPS में परिवर्तित करना सीखें। डेवलपर्स और दस्तावेज़ प्रसंस्करण के प्रति उत्साही लोगों के लिए बिल्कुल सही। | @@ -58,6 +58,7 @@ | [XML से PDFसेट छवि पथ](./xml-to-pdfset-image-path/) | जानें कि .NET के लिए Aspose.PDF का उपयोग करके XML को आसानी से PDF में कैसे परिवर्तित किया जाए। यह विस्तृत गाइड आपको सेटअप से लेकर पूरा होने तक की प्रक्रिया के बारे में चरण दर चरण बताता है। | | [XPS से PDF में](./xps-to-pdf/) इस चरण-दर-चरण ट्यूटोरियल के साथ .NET के लिए Aspose.PDF का उपयोग करके XPS फ़ाइलों को PDF में कनवर्ट करना सीखें। डेवलपर्स और दस्तावेज़ उत्साही लोगों के लिए बिल्कुल सही। | | [C# में PDF को PDF/X‑4 में परिवर्तित करें – चरण-दर-चरण ASP.NET PDF ट्यूटोरियल](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | इस ट्यूटोरियल में .NET के लिए Aspose.PDF का उपयोग करके PDF को PDF/X‑4 फ़ॉर्मेट में बदलना सीखें। | +| [PDFX4 रूपांतरण ट्यूटोरियल – PDF मानक सेट करें और Aspose का उपयोग करके PDF को परिवर्तित करें](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Aspose के साथ PDF मानक सेट करके PDF को PDF/X‑4 में बदलने की चरण-दर-चरण मार्गदर्शिका। | {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/pdf/hindi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/hindi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..604105cb52 --- /dev/null +++ b/pdf/hindi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4 रूपांतरण ट्यूटोरियल जो दिखाता है कि PDF मानक को PDF/X‑4 कैसे सेट + करें और Aspose के साथ PDF को विश्वसनीय फ़ॉर्मेट रूपांतरण के लिए कैसे बदलें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: hi +lastmod: 2026-08-08 +og_description: pdfx4 रूपांतरण ट्यूटोरियल समझाता है कि PDF मानक को PDF/X‑4 कैसे सेट + करें और C# में Aspose का उपयोग करके विश्वसनीय PDF रूपांतरण कैसे करें। +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 रूपांतरण ट्यूटोरियल – PDF मानक सेट करें और Aspose का उपयोग करके PDF + को परिवर्तित करें +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 रूपांतरण ट्यूटोरियल – PDF मानक सेट करें और Aspose का उपयोग करके PDF रूपांतरित + करें +url: /hi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversion tutorial – PDF मानक सेट करें और Aspose का उपयोग करके PDF को कनवर्ट करें + +यदि आपको एक **pdfx4 conversion tutorial** चाहिए, तो यह गाइड आपको PDF मानक को PDF/X‑4 पर सेट करने और Aspose का उपयोग करके PDF को कनवर्ट करने की पूरी प्रक्रिया से परिचित कराएगा। चाहे आप प्रिंट‑रेडी फ़ाइलें तैयार कर रहे हों या दीर्घकालिक अभिलेखीय अनुपालन सुनिश्चित कर रहे हों, आप एक विश्वसनीय **aspose pdf format conversion** वर्कफ़्लो सीखेंगे जो .NET 6 और बाद के संस्करणों के साथ काम करता है। + +यह ट्यूटोरियल प्रोजेक्ट सेटअप से लेकर गायब स्रोत फ़ाइलों या असमर्थित सुविधाओं जैसी किनारी स्थितियों को संभालने तक सब कुछ कवर करता है। लेख के अंत तक आपके पास एक स्व-समाहित C# प्रोग्राम होगा जो एक PDF/X‑4 अनुपालन फ़ाइल उत्पन्न करता है, जिसे डाउनस्ट्रीम वर्कफ़्लो के लिए तैयार किया गया है। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +- .NET 6 SDK या नया स्थापित हो ([download here](https://dotnet.microsoft.com/download)) +- एक वैध Aspose.PDF for .NET लाइसेंस (टेस्टिंग के लिए फ्री ट्रायल काम करता है) +- Visual Studio 2022, VS Code, या कोई भी IDE जो .NET विकास को सपोर्ट करता है +- एक स्रोत PDF फ़ाइल जिसे आप कनवर्ट करना चाहते हैं (इसे किसी ज्ञात फ़ोल्डर में रखें) + +ये आवश्यकताएँ सुनिश्चित करती हैं कि कोड अतिरिक्त कॉन्फ़िगरेशन के बिना चल सके। + +## Step 1: नया .NET कंसोल प्रोजेक्ट बनाएं + +एक टर्मिनल खोलें और निम्न कमांड चलाकर `PdfX4Converter` नामक कंसोल ऐप बनाएं: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Aspose.PDF NuGet पैकेज जोड़ें: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` पैकेज `Document` क्लास और `PdfFormatConversionOptions` प्रदान करता है, जो **convert pdf pdfx4** ऑपरेशन्स के लिए आवश्यक हैं। + +## Step 2: Write the conversion code + +`Program.cs` (या `Program.cs` यदि आप नई टॉप‑लेवल स्टेटमेंट्स का उपयोग कर रहे हैं) खोलें और उसकी सामग्री को नीचे दिए गए पूर्ण उदाहरण से बदल दें। यह कोड **set pdf standard** को PDF/X‑4 पर सेट करता है, कनवर्ज़न करता है, और सामान्य समस्याओं के लिए एरर हैंडलिंग शामिल करता है। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### प्रत्येक भाग क्यों महत्वपूर्ण है + +- **Argument validation** प्रोग्राम को तब क्रैश होने से रोकता है जब उपयोगकर्ता फ़ाइल पाथ भूल जाता है। +- **`Document` loading** स्रोत PDF के गायब या भ्रष्ट होने पर स्पष्ट अपवाद फेंकता है, जो एक मजबूत **convert pdf using aspose** अनुभव के लिए आवश्यक है। +- **`PdfFormatConversionOptions`** वह जगह है जहाँ आप **set pdf standard** करते हैं। `PdfStandard.PdfX4` असाइन करने पर Aspose स्वचालित रूप से कलर स्पेसेस को समायोजित करता है, आवश्यक फ़ॉन्ट एम्बेड करता है, और आवश्यक PDF/X‑4 मेटाडेटा लिखता है। +- **`FontEmbeddingMode.EmbedAll`** सुनिश्चित करता है कि स्रोत PDF में उपयोग किए गए सभी फ़ॉन्ट एम्बेड हों, जो प्रिंट‑रेडी PDFs के लिए सामान्य आवश्यकता है। +- **`doc.Convert`** वास्तविक **aspose pdf format conversion** करता है। यह मेथड एक ही कॉल में नई फ़ाइल लिखता है, जिससे वर्कफ़्लो सरल हो जाता है। + +## Step 3: Run the converter + +प्रोजेक्ट को बिल्ड करें और स्रोत तथा गंतव्य पाथ के साथ इसे चलाएँ: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +यदि सब कुछ ठीक चलता है, तो कंसोल प्रिंट करेगा: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +अब आप `output_pdfx4.pdf` को किसी भी PDF व्यूअर में खोल सकते हैं जो PDF/X‑4 को सपोर्ट करता है (जैसे Adobe Acrobat Pro) और *File → Properties → Standards* के माध्यम से अनुपालन की जाँच कर सकते हैं। + +## Step 4: Verify PDF/X‑4 compliance (optional) + +प्रोडक्शन पाइपलाइन के लिए आप आउटपुट को प्रोग्रामेटिक रूप से वैलिडेट करना चाह सकते हैं। Aspose एक `PdfComplianceChecker` क्लास प्रदान करता है (जो `Aspose.Pdf` पैकेज में उपलब्ध है) जिसे आप नीचे दिखाए अनुसार उपयोग कर सकते हैं: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +कनवर्ज़न के बाद इस स्निपेट को चलाने से आपको स्पष्ट पास/फ़ेल परिणाम मिलेगा, जो स्वचालित CI/CD पाइपलाइन के लिए उपयोगी है। + +## Step 5: Common pitfalls and best‑practice tips + +| समस्या | क्यों होता है | कैसे बचें | +|-------|----------------|-----------------| +| स्रोत PDF में फ़ॉन्ट गायब हैं | फ़ॉन्ट संदर्भित हैं लेकिन एम्बेड नहीं हैं, जिससे कनवर्ज़न चेतावनियाँ आती हैं | ऊपर दिखाए अनुसार `FontEmbeddingMode.EmbedAll` का उपयोग करें | +| स्रोत PDF में पारदर्शी ऑब्जेक्ट हैं जो PDF/X‑4 में अनुमति नहीं हैं | PDF/X‑4 कुछ पारदर्शी मिश्रणों को अनुमति नहीं देता | कनवर्ज़न से पहले `doc.ProcessTransparentObjects()` के साथ PDF को पूर्व-प्रसंस्करण करें | +| बड़े फ़ाइलें OutOfMemoryException उत्पन्न करती हैं | पूरा दस्तावेज़ मेमोरी में लोड हो जाता है | `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` का उपयोग करके स्रोत को स्ट्रीम करें | +| लाइसेंस लागू नहीं हुआ | ट्रायल संस्करण वॉटरमार्क जोड़ता है | किसी भी Aspose API उपयोग से पहले `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` को कॉल करें | + +इन टिप्स को लागू करने से प्रोडक्शन वातावरण में एक सुगम **convert pdf pdfx4** अनुभव सुनिश्चित होता है। + +## Step 6: Extending the tutorial + +एक बार जब आप बुनियादी **pdfx4 conversion tutorial** में महारत हासिल कर लेते हैं, तो आप आगे की चीज़ें एक्सप्लोर कर सकते हैं: + +- **बैच कनवर्ज़न**: PDFs के फ़ोल्डर के माध्यम से लूप करें और प्रत्येक को PDF/X‑4 में कनवर्ट करें। +- **मेटाडेटा इंजेक्शन**: विशिष्ट प्रिंट हाउस द्वारा आवश्यक XMP मेटाडेटा जोड़ें। +- **कलर प्रोफ़ाइल प्रबंधन**: कनवर्ज़न से पहले `doc.ColorSpace = ColorSpace.DeviceRGB;` का उपयोग करके ICC प्रोफ़ाइल संलग्न करें। + +इन सभी एक्सटेंशन उसी **aspose pdf format conversion** बुनियाद पर निर्मित हैं, जैसा कि यहाँ प्रदर्शित किया गया है। + +## Conclusion + +यह **pdfx4 conversion tutorial** आपको दिखाया कि कैसे **set pdf standard** को PDF/X‑4 पर सेट करें, एक विश्वसनीय **convert pdf using Aspose** करें, और परिणाम की जाँच करें। अब आपके पास एक पूर्ण, चलने योग्य C# प्रोग्राम है जिसे बड़े दस्तावेज़‑प्रोसेसिंग पाइपलाइन में एकीकृत किया जा सकता है या एक स्टैंडअलोन यूटिलिटी के रूप में उपयोग किया जा सकता है। बैच प्रोसेसिंग, मेटाडेटा हैंडलिंग, या वैकल्पिक PDF मानकों (PDF/A‑2b, PDF/UA) के साथ प्रयोग करें ताकि **aspose pdf format conversion** में आपकी विशेषज्ञता गहरी हो सके। + +कोडिंग का आनंद लें, और PDF/X‑4 अनुपालन आउटपुट के साथ मिलने वाले आत्मविश्वास का आनंद उठाएँ! + +## What Should You Learn Next? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर करने में मदद करेंगे। + +- [Aspose.PDF .NET का उपयोग करके PDF/A को स्टैंडर्ड PDF में कनवर्ट करें : एक व्यापक गाइड](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Aspose.PDF for .NET (C# ट्यूटोरियल) का उपयोग करके PDFs पर समाप्ति तिथि कैसे सेट करें](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [व्यापक गाइड: Aspose.PDF .NET का उपयोग करके PDF को TIFF में कनवर्ट करें सहज दस्तावेज़ कनवर्ज़न के लिए](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hindi/net/document-creation/_index.md b/pdf/hindi/net/document-creation/_index.md index f99909f3e9..3fd7bcc114 100644 --- a/pdf/hindi/net/document-creation/_index.md +++ b/pdf/hindi/net/document-creation/_index.md @@ -76,9 +76,13 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि ### [Aspose.PDF के साथ PDF दस्तावेज़ बनाएं – पृष्ठ जोड़ें, आकार बनाएं और सहेजें](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Aspose.PDF का उपयोग करके पृष्ठ, आकार जोड़कर PDF बनाना और सहेजना सीखें। + ### [Aspose.PDF के साथ PDF दस्तावेज़ बनाएं – चरण‑दर‑चरण मार्गदर्शिका](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aspose.PDF के साथ PDF दस्तावेज़ बनाने के चरण‑दर‑चरण निर्देश, सेटअप और कोड उदाहरण सहित। +### [C# के साथ Aspose.Pdf का उपयोग करके PDF दस्तावेज़ बनाएं](./create-pdf-document-in-c-with-aspose-pdf/) +C# में Aspose.Pdf का उपयोग करके PDF दस्तावेज़ बनाने का चरण‑दर‑चरण मार्गदर्शन। + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/hindi/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..22141eb158 --- /dev/null +++ b/pdf/hindi/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf का उपयोग करके C# में PDF दस्तावेज़ बनाएं। सीखें कि कैसे खाली + पृष्ठ PDF जोड़ें, PDF में पैराग्राफ जोड़ें, और सटीक निर्देशांक के साथ PDF में टेक्स्ट + को स्थित करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: hi +lastmod: 2026-08-08 +og_description: C# में तेज़ी से PDF दस्तावेज़ बनाएं। यह ट्यूटोरियल दिखाता है कि कैसे + खाली पृष्ठ PDF जोड़ें, PDF में पैराग्राफ जोड़ें, और Aspose.Pdf का उपयोग करके PDF + में टेक्स्ट को स्थित करें। +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Aspose.Pdf के साथ C# में PDF दस्तावेज़ बनाएं – पूर्ण गाइड +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: C# में Aspose.Pdf के साथ PDF दस्तावेज़ बनाएं +url: /hi/net/document-creation/create-pdf-document-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 दस्तावेज़ बनाना** है, तो यह गाइड आपको बिल्कुल वही दिखाता है। Aspose.Pdf for .NET का उपयोग करके आप एक खाली पेज pdf जोड़ सकते हैं, pdf में एक पैराग्राफ डाल सकते हैं, और pdf में टेक्स्ट को पिक्सेल‑परफेक्ट सटीकता के साथ स्थित कर सकते हैं—सिर्फ कुछ ही पंक्तियों के C# कोड में। + +आप इस ट्यूटोरियल को एक पूरी तरह कार्यशील PDF फ़ाइल के साथ समाप्त करेंगे जिसमें आपके द्वारा निर्दिष्ट निर्देशांक पर रखा गया नोट होगा। कोई बाहरी टूल नहीं, कोई मैन्युअल संपादन नहीं—सिर्फ साफ़, दोहराने योग्य कोड जिसे आप किसी भी .NET प्रोजेक्ट में डाल सकते हैं। + +## आप क्या सीखेंगे + +* Aspose.Pdf के साथ **pdf दस्तावेज़ बनाना** कैसे करें। +* **blank page pdf जोड़ना** का सही तरीका और सामग्री जोड़ने से पहले पेज का मौजूद होना क्यों आवश्यक है। +* **pdf में पैराग्राफ जोड़ना** और एक कस्टम टैग संलग्न करना (बाद में एक्सट्रैक्शन या स्टाइलिंग के लिए उपयोगी)। +* `Position` क्लास का उपयोग करके **pdf में टेक्स्ट को स्थित करना** की तकनीक। +* परिणाम को डिस्क पर कैसे सहेजें और आउटपुट को सत्यापित करें। + +**Prerequisites** + +* .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.7+ के साथ भी काम करता है)। +* एक वैध Aspose.Pdf for .NET लाइसेंस या एक मुफ्त इवैल्यूएशन कुंजी। +* Visual Studio 2022 या VS Code के साथ C# एक्सटेंशन जैसी IDE। + +> **Pro tip:** यदि आप मुफ्त इवैल्यूएशन का उपयोग करते हैं, तो उत्पन्न PDF में एक छोटा वॉटरमार्क होगा। इसे हटाने के लिए लाइसेंस रजिस्टर करें। + +## Aspose.Pdf के साथ pdf दस्तावेज़ कैसे बनाएं + +पहला कदम `Document` क्लास का एक इंस्टेंस बनाना है। यह ऑब्जेक्ट पूरे PDF फ़ाइल का प्रतिनिधित्व करता है और आपको पेज, रिसोर्सेज, और सेविंग विकल्पों तक पहुँच देता है। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +डॉक्यूमेंट बनाना अभी तक **डिस्क पर कुछ नहीं लिखता**; यह केवल एक इन‑मेमोरी प्रतिनिधित्व तैयार करता है जिसे आप बदल सकते हैं। यह तरीका API को तेज़ और मेमोरी‑कुशल बनाता है। + +## Aspose.Pdf का उपयोग करके blank page pdf जोड़ें + +A PDF में कोई भी सामग्री रखने से पहले कम से कम एक पेज होना आवश्यक है। एक खाली पेज जोड़ना एक ही मेथड कॉल है: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` मेथड डिफ़ॉल्ट आकार (A4) और ओरिएंटेशन (पोर्ट्रेट) के साथ एक पेज बनाता है। यदि आपको अलग आकार चाहिए, तो `Add()` में एक `PageSize` इंस्टेंस पास करें। + +## pdf में पैराग्राफ जोड़ें और नोट सेट करें + +अब जब पेज मौजूद है, आप एक `Paragraph` ऑब्जेक्ट बना सकते हैं जो दृश्यमान टेक्स्ट रखता है। पैराग्राफ एक कस्टम टैग भी ले जा सकता है, जो बाद में प्रोग्रामेटिक रूप से एलिमेंट को खोजने या स्टाइल करने में उपयोगी होता है। + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### टैग क्यों उपयोग करें? + +टैग मेटाडाटा होते हैं जो PDF एलिमेंट के साथ चलते हैं। इन्हें बाद में `Document.FindObject()` से क्वेरी किया जा सकता है या डाउनस्ट्रीम PDF प्रोसेसर द्वारा उपयोग किया जा सकता है जो एक्सेसिबिलिटी या इंडेक्सिंग के लिए टैग पर निर्भर होते हैं। + +## सटीक निर्देशांक के साथ pdf में टेक्स्ट को स्थित करें + +पैराग्राफ की डिफ़ॉल्ट प्लेसमेंट पेज मार्जिन के टॉप‑लेफ़्ट कोने में होती है। टेक्स्ट को सटीक स्थान पर ले जाने के लिए, पैराग्राफ के टैग पर `Position` प्रॉपर्टी सेट करें: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +निर्देशांक पॉइंट्स में मापे जाते हैं (1 पॉइंट = 1/72 इंच)। मूल बिंदु (0,0) पेज के बॉटम‑लेफ़्ट पर होता है, जो अधिकांश PDF रेंडरिंग इंजन से मेल खाता है। अपने लेआउट की जरूरतों के अनुसार `X` और `Y` मान समायोजित करें। + +स्थिति सेट करने के बाद, पैराग्राफ को पेज के कलेक्शन में जोड़ें: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## pdf दस्तावेज़ सहेजें + +अंत में, इन‑मेमोरी PDF को फ़ाइल में लिखें। आप आउटपुट पाथ, फॉर्मेट, और यहाँ तक कि एन्क्रिप्शन विकल्प भी निर्दिष्ट कर सकते हैं। + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +जब प्रोग्राम समाप्त हो जाता है, `output.pdf` में एक पेज होता है जिसमें टेक्स्ट **Important note** टॉप‑राइट कोने के पास (X = 50, Y = 750) स्थित होता है। प्लेसमेंट सत्यापित करने के लिए फ़ाइल को किसी भी PDF व्यूअर में खोलें। + +![C# Aspose.Pdf से बनाई गई जनरेटेड PDF दस्तावेज़ जिसमें स्थित नोट दिखाया गया है](https://example.com/images/generated-pdf.png) + +*छवि वैकल्पिक पाठ: C# Aspose.Pdf से बनाई गई जनरेटेड PDF दस्तावेज़ जिसमें स्थित नोट दिखाया गया है* (मुख्य कीवर्ड शामिल है)। + +## पूर्ण, चलाने योग्य उदाहरण + +सभी भागों को मिलाकर, यहाँ एक पूर्ण कंसोल एप्लिकेशन है जिसे आप कॉपी, बिल्ड और रन कर सकते हैं: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**अपेक्षित आउटपुट** जब आप प्रोग्राम चलाते हैं: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +`output.pdf` खोलने पर एक पेज दिखता है जिसमें टेक्स्ट **Important note** आपके निर्दिष्ट निर्देशांक पर स्थित होता है। + +## सामान्य विविधताएँ और किनारे के केस + +| परिदृश्य | क्या बदलें | क्यों महत्वपूर्ण है | +|----------|------------|--------------------| +| **विभिन्न पेज आकार** | `pdfDocument.Pages.Add(PageSize.A5)` | छोटे पेज फ़ाइल आकार कम करते हैं और मोबाइल स्क्रीन में फिट होते हैं। | +| **एकाधिक नोट्स** | स्ट्रिंग्स के संग्रह पर लूप करें और प्रत्येक के लिए एक `Paragraph` बनाएं, `Y` निर्देशांक को बढ़ाते हुए। | बुलेट‑स्टाइल नोट्स की बैच जेनरेशन की अनुमति देता है। | +| **Unicode अक्षर** | सुनिश्चित करें कि स्रोत फ़ाइल UTF-8 में सहेजी गई है और `noteParagraph.Text = "重要なメモ"` सेट करें। | Aspose.Pdf बॉक्स से बाहर Unicode का समर्थन करता है, लेकिन फ़ाइल एन्कोडिंग मेल खानी चाहिए। | +| **पासवर्ड‑सुरक्षित PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | गोपनीय नोट्स के लिए सुरक्षा जोड़ता है। | +| **हाई‑रेज़ोल्यूशन आउटपुट** | कंटेंट जोड़ने से पहले `pdfDocument.PageInfo.Width` और `Height` को बड़े मानों पर सेट करें। | बड़े‑फ़ॉर्मेट PDF प्रिंट करने के लिए उपयोगी। | + +## प्रोडक्शन उपयोग के लिए टिप्स + +* एक ही अनुरोध में कई PDFs जेनरेट करते समय **`Document` इंस्टेंस को पुन: उपयोग करें** ताकि GC दबाव कम हो। +* यदि आप लूप में कई दस्तावेज़ बनाते हैं तो **ऑब्जेक्ट्स को डिस्पोज़ करें** (`pdfDocument.Dispose()`)। +* **निर्देशांक सत्यापित करें**: `Y` मान पेज की ऊँचाई से अधिक नहीं हो सकता; अन्यथा टेक्स्ट कट जाएगा। +* यदि आपको सामग्री वापस पढ़नी है तो उसके टैग (`/P`) द्वारा नोट को निकालने के लिए **`TextFragmentAbsorber`** का उपयोग करें। + +## निष्कर्ष + +अब आप जानते हैं कि Aspose.Pdf के साथ **pdf दस्तावेज़ कैसे बनाएं**, **blank page pdf कैसे जोड़ें**, **pdf में पैराग्राफ कैसे जोड़ें**, **pdf में नोट कैसे जोड़ें**, और **pdf में टेक्स्ट को सटीक रूप से कैसे स्थित करें**। पूर्ण उदाहरण एक साफ़, दोहराने योग्य वर्कफ़्लो दिखाता है जिसे आप इनवॉइस, रिपोर्ट या किसी भी दस्तावेज़‑ऑटोमेशन परिदृश्य के लिए विस्तारित कर सकते हैं। + +अगला, संबंधित विषयों का अन्वेषण करें जैसे **pdf में इमेज जोड़ना**, **Aspose.Pdf के साथ टेबल बनाना**, या **डिजिटल सिग्नेचर लागू करना**। इनमें से प्रत्येक यहाँ कवर किए गए मूल अवधारणाओं पर आधारित है, इसलिए आप अधिक परिष्कृत PDF जेनरेशन कार्यों को संभालने के लिए तैयार होंगे। + +कोडिंग का आनंद लें! + +## आपको अगला क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट-संबंधित विषयों को कवर करते हैं जो इस गाइड में दर्शाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का पता लगाने में मदद करती हैं। + +- [Aspose.PDF के साथ PDF दस्तावेज़ बनाएं – पेज, शैप जोड़ें और सहेजें](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Aspose.PDF for .NET का उपयोग करके PDF के अंत में एक खाली पेज कैसे जोड़ें | चरण‑दर‑चरण गाइड](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/hindi/net/images-graphics/_index.md index 17910f1ed4..66f24a5b9f 100644 --- a/pdf/hindi/net/images-graphics/_index.md +++ b/pdf/hindi/net/images-graphics/_index.md @@ -17,23 +17,23 @@ ## उपलब्ध ट्यूटोरियल -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में इमेज स्टैम्प जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./add-image-stamp-to-pdf-aspose-dotnet/) +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में इमेज स्टैम्प जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./add-image-stamp-to-pdf-aspose-dotnet/) .NET के लिए Aspose.PDF का उपयोग करके PDF के प्रत्येक पृष्ठ पर लोगो जैसे छवि स्टैम्प को सहजता से जोड़ना सीखें। पेशेवर ब्रांडिंग के साथ अपने दस्तावेज़ों को बेहतर बनाएँ। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./adding-images-aspose-pdf-net-guide/) +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./adding-images-aspose-pdf-net-guide/) इस विस्तृत गाइड के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में छवियाँ जोड़ना सीखें। XImage संग्रह और मैट्रिक्स रूपांतरण में महारत हासिल करके अपनी रिपोर्ट और ब्रोशर को बेहतर बनाएँ। -### [.NET के लिए Aspose.PDF में ग्रेडिएंट शेडिंग के साथ टेक्स्ट जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./add-text-gradient-shading-aspose-pdf-net/) +### [.NET के लिए Aspose.PDF में ग्रेडिएंट शेडिंग के साथ टेक्स्ट जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./add-text-gradient-shading-aspose-pdf-net/) .NET के लिए Aspose.PDF का उपयोग करके PDF में ग्रेडिएंट-शेडेड टेक्स्ट जोड़ने का तरीका जानें। दस्तावेज़ की सुंदरता और पठनीयता बढ़ाने के लिए इस गाइड का पालन करें। -### [.NET के लिए Aspose.PDF का उपयोग करके छवियों को PDF में बदलें: चरण-दर-चरण मार्गदर्शिका](./convert-images-pdf-aspose-net-guide/) -जानें कि C# में .NET के लिए Aspose.PDF के साथ छवियों को एकल PDF में कैसे परिवर्तित किया जाए। यह मार्गदर्शिका चरण-दर-चरण निर्देश, सुझाव और सर्वोत्तम अभ्यास प्रदान करती है। +### [.NET के लिए Aspose.PDF का उपयोग करके छवियों को PDF में बदलें: चरण-दर-स्टेप मार्गदर्शिका](./convert-images-pdf-aspose-net-guide/) +जानें कि C# में .NET के लिए Aspose.PDF के साथ छवियों को एकल PDF में कैसे परिवर्तित किया जाए। यह मार्गदर्शिका चरण-दर-स्टेप निर्देश, सुझाव और सर्वोत्तम अभ्यास प्रदान करती है। -### [.NET के लिए Aspose.PDF का उपयोग करके SVG को PDF में बदलें: एक चरण-दर-चरण मार्गदर्शिका](./svg-to-pdf-aspose-pdf-net-tutorial/) +### [.NET के लिए Aspose.PDF का उपयोग करके SVG को PDF में बदलें: एक चरण-दर-स्टेप मार्गदर्शिका](./svg-to-pdf-aspose-pdf-net-tutorial/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके SVG फ़ाइलों को उच्च-गुणवत्ता वाली PDF में कैसे आसानी से परिवर्तित किया जाए। कोड उदाहरणों और प्रदर्शन युक्तियों के साथ इस व्यापक ट्यूटोरियल का पालन करें। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में आयत बनाएं और भरें: एक चरण-दर-चरण मार्गदर्शिका](./create-fill-rectangle-aspose-pdf-net/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में आयत कैसे बनाएँ और भरें। यह चरण-दर-चरण मार्गदर्शिका C# के साथ सेटअप से लेकर कार्यान्वयन तक सब कुछ कवर करती है। +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में आयत बनाएं और भरें: एक चरण-दर-स्टेप मार्गदर्शिका](./create-fill-rectangle-aspose-pdf-net/) +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में आयत कैसे बनाएँ और भरें। यह चरण-दर-स्टेप मार्गदर्शिका C# के साथ सेटअप से लेकर कार्यान्वयन तक सब कुछ कवर करती है। ### [.NET में Aspose.PDF के साथ कस्टम पीडीएफ स्टैम्प बनाएं](./create-custom-pdf-stamps-aspose-pdf-net/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल @@ -48,7 +48,7 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि .NET के लिए Aspose.PDF का उपयोग करके PDF में ग्रेस्केल और RGB छवियों की पहचान करना सीखें। यह ट्यूटोरियल इंस्टॉलेशन, इमेज एक्सट्रैक्शन और प्रदर्शन युक्तियों को कवर करता है। ### [.NET के लिए Aspose.PDF के साथ छवि स्ट्रीम को कुशलतापूर्वक PDF में बदलें](./convert-image-stream-to-pdf-aspose-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके इमेज स्ट्रीम को पेशेवर-गुणवत्ता वाले PDF दस्तावेज़ों में कैसे परिवर्तित किया जाए। अपने दस्तावेज़ वर्कफ़्लो को बेहतर बनाने के लिए इस चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके इमेज स्ट्रीम को पेशेवर-गुणवत्ता वाले PDF दस्तावेज़ों में कैसे परिवर्तित किया जाए। अपने दस्तावेज़ वर्कफ़्लो को बेहतर बनाने के लिए इस चरण-दर-स्टेप मार्गदर्शिका का पालन करें। ### [Aspose.PDF के साथ PDF क्षेत्रों को छवियों में निकालें और परिवर्तित करें](./extract-convert-pdf-regions-aspose-net/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल @@ -57,7 +57,7 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल ### [Aspose.PDF .NET का उपयोग करके PDF हस्ताक्षरों से छवियाँ निकालें: एक व्यापक गाइड](./extract-images-pdf-signatures-aspose-pdf-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF हस्ताक्षरों में एम्बेड की गई छवियों को कैसे निकाला जाए। यह मार्गदर्शिका चरण-दर-चरण निर्देश और व्यावहारिक अनुप्रयोग प्रदान करती है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF हस्ताक्षरों में एम्बेड की गई छवियों को कैसे निकाला जाए। यह मार्गदर्शिका चरण-दर-स्टेप निर्देश और व्यावहारिक अनुप्रयोग प्रदान करती है। ### [.NET के लिए Aspose.PDF के साथ PDF से छवियाँ निकालें](./extract-images-pdfs-aspose-pdf-net/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल @@ -66,22 +66,22 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों में छवियों को छोटा करना सीखें, गुणवत्ता बनाए रखते हुए फ़ाइल आकार को कम करें। तेज़ लोडिंग और कुशल भंडारण के लिए बिल्कुल सही। ### [C# में Aspose.PDF .NET का उपयोग करके PDF में इमेज फ़ुटर कैसे जोड़ें](./aspose-pdf-net-add-image-footers-pdfs/) -इस चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में छवि फ़ुटर जोड़ना सीखें। ब्रांडिंग और अनुकूलन के लिए बिल्कुल सही। +इस चरण-दर-स्टेप मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में छवि फ़ुटर जोड़ना सीखें। ब्रांडिंग और अनुकूलन के लिए बिल्कुल सही। -### [.NET के लिए Aspose.PDF के साथ PDF में छवियाँ और पाठ कैसे जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./adding-images-text-pdfs-aspose-pdf-dotnet/) +### [.NET के लिए Aspose.PDF के साथ PDF में छवियाँ और पाठ कैसे जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./adding-images-text-pdfs-aspose-pdf-dotnet/) .NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ और टेक्स्ट जोड़ना सीखें। यह व्यापक गाइड सेटअप से लेकर कार्यान्वयन तक सब कुछ कवर करती है, जो आपके दस्तावेज़ संपादन कौशल को बढ़ाने के लिए एकदम सही है। ### [Aspose.PDF .NET का उपयोग करके PDF में छवियाँ कैसे जोड़ें: एक व्यापक गाइड](./aspose-pdf-net-add-images-pdfs/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में सहजता से छवियाँ कैसे जोड़ें। यह चरण-दर-चरण मार्गदर्शिका सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करती है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में सहजता से छवियाँ कैसे जोड़ें। यह चरण-दर-स्टेप मार्गदर्शिका सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करती है। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ कैसे जोड़ें: एक संपूर्ण मार्गदर्शिका](./add-images-to-pdfs-using-aspose-pdf-net/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में सहजता से छवियाँ कैसे जोड़ें। यह चरण-दर-चरण मार्गदर्शिका सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करती है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में सहजता से छवियाँ कैसे जोड़ें। यह चरण-दर-स्टेप मार्गदर्शिका सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करती है। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ कैसे जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./add-images-to-pdfs-aspose-pdf-net/) +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवियाँ कैसे जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./add-images-to-pdfs-aspose-pdf-net/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF में सहजता से छवियाँ कैसे जोड़ें। यह मार्गदर्शिका मौजूदा PDF में छवियाँ जोड़ने और DICOM फ़ाइलों से नई छवियाँ बनाने के बारे में बताती है। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में इमेज हेडर कैसे जोड़ें: एक चरण-दर-चरण मार्गदर्शिका](./add-image-header-pdf-aspose-dotnet/) -इस व्यापक चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में छवि हेडर जोड़ने का तरीका जानें। +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में इमेज हेडर कैसे जोड़ें: एक चरण-दर-स्टेप मार्गदर्शिका](./add-image-header-pdf-aspose-dotnet/) +इस व्यापक चरण-दर-स्टेप मार्गदर्शिका के साथ .NET के लिए Aspose.PDF का उपयोग करके अपने PDF दस्तावेज़ों में छवि हेडर जोड़ने का तरीका जानें। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF हेडर में इमेज स्टैम्प कैसे जोड़ें](./add-image-stamp-pdf-header-aspose-pdf/) .NET के लिए Aspose.PDF के साथ अपने PDF हेडर में छवि स्टैम्प जोड़ना सीखें, जिससे ब्रांडिंग और व्यावसायिकता बढ़ेगी। @@ -93,42 +93,42 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि .NET के लिए Aspose.PDF का उपयोग करके अपने PDF में लोगो या वॉटरमार्क जैसे इमेज स्टैम्प जोड़ना सीखें। यह गाइड सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करती है। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF पृष्ठों को PNG छवियों में कैसे परिवर्तित करें](./convert-pdf-page-to-png-aspose-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF पृष्ठों को उच्च-गुणवत्ता वाली PNG छवियों में कैसे परिवर्तित किया जाए। कोड उदाहरणों और सर्वोत्तम प्रथाओं के साथ इस चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF पृष्ठों को उच्च-गुणवत्ता वाली PNG छवियों में कैसे परिवर्तित किया जाए। कोड उदाहरणों और सर्वोत्तम प्रथाओं के साथ इस चरण-दर-स्टेप मार्गदर्शिका का पालन करें। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF में डैश्ड लाइन्स कैसे बनाएं: एक चरण-दर-चरण मार्गदर्शिका](./create-dashed-lines-aspose-pdf-net/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके डैश्ड लाइन जोड़कर अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। एक पॉलिश्ड, प्रोफेशनल लुक के लिए इस चरण-दर-चरण गाइड का पालन करें। +### [.NET के लिए Aspose.PDF का उपयोग करके PDF में डैश्ड लाइन्स कैसे बनाएं: एक चरण-दर-स्टेप मार्गदर्शिका](./create-dashed-lines-aspose-pdf-net/) +जानें कि .NET के लिए Aspose.PDF का उपयोग करके डैश्ड लाइन जोड़कर अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। एक पॉलिश्ड, प्रोफेशनल लुक के लिए इस चरण-दर-स्टेप गाइड का पालन करें। ### [Aspose.PDF का उपयोग करके .NET में छवियों के साथ टैग की गई PDF कैसे बनाएं](./create-tagged-pdf-image-dotnet/) .NET के लिए Aspose.PDF का उपयोग करके छवियों के साथ एम्बेड किए गए सुलभ टैग किए गए PDF बनाने का तरीका जानें। सभी उपयोगकर्ताओं के लिए दस्तावेज़ की पहुँच और प्रस्तुति को बेहतर बनाएँ। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में पारदर्शी आयत कैसे बनाएं](./create-transparent-rectangles-aspose-pdf-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके अल्फा पारदर्शिता के साथ आयत बनाकर अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। इस चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके अल्फा पारदर्शिता के साथ आयत बनाकर अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। इस चरण-दर-स्टेप मार्गदर्शिका का पालन करें। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से छवियाँ कैसे हटाएँ - संपूर्ण गाइड](./delete-images-aspose-pdf-net/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से छवियों को कुशलतापूर्वक कैसे हटाया जाए। यह मार्गदर्शिका सेटअप, कोड उदाहरण और सर्वोत्तम अभ्यासों को कवर करती है। -### [Aspose.PDF .NET का उपयोग करके PDF से छवियाँ कैसे हटाएँ: एक चरण-दर-चरण मार्गदर्शिका](./delete-images-aspose-pdf-net-guide/) +### [Aspose.PDF .NET का उपयोग करके PDF से छवियाँ कैसे हटाएँ: एक चरण-दर-स्टेप मार्गदर्शिका](./delete-images-aspose-pdf-net-guide/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से छवियों को कैसे हटाया जाए। यह व्यापक गाइड सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करता है। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे हटाएँ: एक व्यापक गाइड](./delete-images-from-pdf-aspose-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से सभी छवियों को कुशलतापूर्वक कैसे हटाया जाए, फ़ाइल गोपनीयता को बढ़ाया जाए और आकार को कम किया जाए। इस चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से सभी छवियों को कुशलतापूर्वक कैसे हटाया जाए, फ़ाइल गोपनीयता को बढ़ाया जाए और आकार को कम किया जाए। इस चरण-दर-स्टेप मार्गदर्शिका का पालन करें। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF पृष्ठ के रंगों का पता कैसे लगाएं: एक व्यापक गाइड](./detect-pdf-page-color-aspose-dotnet/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF में प्रत्येक पृष्ठ का रंग प्रकार कैसे निर्धारित किया जाए। यह चरण-दर-चरण ट्यूटोरियल इंस्टॉलेशन, सेटअप और व्यावहारिक अनुप्रयोगों को कवर करता है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF में प्रत्येक पृष्ठ का रंग प्रकार कैसे निर्धारित किया जाए। यह चरण-दर-स्टेप ट्यूटोरियल इंस्टॉलेशन, सेटअप और व्यावहारिक अनुप्रयोगों को कवर करता है। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवि जानकारी कैसे निकालें](./extract-image-info-pdf-aspose-pdf-net/) .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से छवि आयाम और रिज़ॉल्यूशन निकालने का तरीका जानें। यह ट्यूटोरियल सेटअप, कार्यान्वयन और व्यावहारिक अनुप्रयोगों को कवर करता है। -### [Aspose.PDF .NET का उपयोग करके PDF से छवियाँ कैसे निकालें (चरण-दर-चरण मार्गदर्शिका)](./extract-images-pdf-aspose-net/) +### [Aspose.PDF .NET का उपयोग करके PDF से छवियाँ कैसे निकालें (चरण-दर-स्टेप मार्गदर्शिका)](./extract-images-pdf-aspose-net/) इस व्यापक गाइड के साथ Aspose.PDF .NET का उपयोग करके PDF फ़ाइलों से छवियों को कुशलतापूर्वक निकालने का तरीका जानें। सटीक छवि निष्कर्षण की आवश्यकता वाले डेवलपर्स के लिए बिल्कुल सही। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे निकालें: एक डेवलपर गाइड](./extract-images-from-pdf-aspose-net-guide/) इस व्यापक डेवलपर गाइड के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों से आसानी से छवियाँ निकालना सीखें। आज ही अपने दस्तावेज़ प्रसंस्करण वर्कफ़्लो को बेहतर बनाएँ। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे निकालें: एक चरण-दर-चरण मार्गदर्शिका](./extract-images-aspose-pdf-dot-net-guide/) +### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे निकालें: एक चरण-दर-स्टेप मार्गदर्शिका](./extract-images-aspose-pdf-dot-net-guide/) इस व्यापक गाइड के साथ, कोड उदाहरणों और सर्वोत्तम प्रथाओं की विशेषता के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से कुशलतापूर्वक छवियों को निकालने का तरीका जानें। -### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे निकालें: एक चरण-दर-चरण मार्गदर्शिका](./extract-images-aspose-pdf-net-guide/) +### [.NET के लिए Aspose.PDF का उपयोग करके PDF से छवियाँ कैसे निकालें: एक चरण-दर-स्टेप मार्गदर्शिका](./extract-images-aspose-pdf-net-guide/) इस व्यापक गाइड के साथ .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों से छवियाँ निकालना सीखें। दस्तावेज़ प्रसंस्करण क्षमताओं को बढ़ाने के इच्छुक डेवलपर्स के लिए बिल्कुल सही। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF के विशिष्ट पृष्ठों से छवियाँ कैसे निकालें](./extract-images-pdfs-specific-pages-aspose-dotnet/) @@ -141,7 +141,7 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि .NET के लिए Aspose.PDF का उपयोग करके PDF में छवि गुणवत्ता को कुशलतापूर्वक आकार बदलने, संपीड़ित करने और समायोजित करने का तरीका जानें। दस्तावेज़ प्रदर्शन और उपयोगकर्ता अनुभव में सुधार करें। ### [Aspose.PDF .NET का उपयोग करके PDF से ग्राफ़िक्स कैसे हटाएँ: एक संपूर्ण गाइड](./remove-graphics-aspose-pdf-net/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से ग्राफ़िक्स को कुशलतापूर्वक कैसे हटाया जाए। अपने दस्तावेज़ों को अव्यवस्थित करने और फ़ाइल आकार को अनुकूलित करने के लिए इस चरण-दर-चरण मार्गदर्शिका का पालन करें। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से ग्राफ़िक्स को कुशलतापूर्वक कैसे हटाया जाए। अपने दस्तावेज़ों को अव्यवस्थित करने और फ़ाइल आकार को अनुकूलित करने के लिए इस चरण-दर-स्टेप मार्गदर्शिका का पालन करें। ### [Aspose.PDF .NET का उपयोग करके PDF में छवियों को कैसे बदलें: एक डेवलपर गाइड](./replace-images-pdf-aspose-net-guide/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में छवियों को कुशलतापूर्वक कैसे बदला जाए। इस व्यापक डेवलपर गाइड के साथ अपने दस्तावेज़ अपडेट को सरल बनाएँ। @@ -158,12 +158,14 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि ### [.NET के लिए Aspose.PDF के साथ PDF छवियों को अनुकूलित करें: एक व्यापक गाइड](./optimize-pdf-images-aspose-pdf-dotnet/) .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में छवियों को संपीड़ित और अनुकूलित करना सीखें, गुणवत्ता बनाए रखते हुए फ़ाइल आकार को कम करें। डेवलपर्स और दस्तावेज़ प्रबंधकों के लिए आदर्श। -### [Aspose.PDF .NET के साथ PDF में LaTeX रेंडर करें: एक चरण-दर-चरण मार्गदर्शिका](./render-latex-aspose-pdf-net-guide/) +### [Aspose.PDF .NET के साथ PDF में LaTeX रेंडर करें: एक चरण-दर-स्टेप मार्गदर्शिका](./render-latex-aspose-pdf-net-guide/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके जटिल LaTeX स्क्रिप्ट को PDF दस्तावेज़ों में कैसे प्रस्तुत किया जाए, जिसमें सेटअप, कार्यान्वयन और अनुकूलन युक्तियां शामिल हैं। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में छवि पृष्ठभूमि सेट करें: एक व्यापक गाइड](./aspose-pdf-net-set-image-backgrounds/) जानें कि .NET के लिए Aspose.PDF का उपयोग करके छवि पृष्ठभूमि सेट करके अपने PDF दस्तावेज़ों को कैसे बेहतर बनाया जाए। यह मार्गदर्शिका सेटअप, कार्यान्वयन और अनुकूलन युक्तियों को कवर करती है। +### [.NET के लिए Aspose.PDF के साथ PDF अपारदर्शिता सेट करें – संपूर्ण गाइड](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) + ## अतिरिक्त संसाधन - [Aspose.PDF for Net दस्तावेज़ीकरण](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hindi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hindi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ccc960551c --- /dev/null +++ b/pdf/hindi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF का उपयोग करके C# में PDF की अपारदर्शिता सेट करें – कुछ लाइनों + के कोड से स्ट्रोक और फ़िल की पारदर्शिता को कैसे समायोजित करें, जानें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: hi +lastmod: 2026-08-08 +og_description: C# में PDF अपारदर्शिता जल्दी सेट करें। यह गाइड आपको Aspose.PDF के + ग्राफ़िक्स स्टेट API का उपयोग करके स्ट्रोक और फ़िल ट्रांसपेरेंसी को संशोधित करने + का तरीका दिखाता है। +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Aspose.PDF के साथ C# में PDF अपारदर्शिता सेट करें – चरण‑दर‑चरण ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Aspose.PDF के साथ C# में PDF की अपारदर्शिता सेट करें – पूर्ण मार्गदर्शिका +url: /hi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Set PDF opacity in C# with Aspose.PDF – complete guide + +यदि आपको **PDF की अपारदर्शिता (opacity)** को विशिष्ट ड्रॉइंग ऑपरेशन्स के लिए सेट करना है, तो यह ट्यूटोरियल Aspose.PDF for .NET के साथ इसे कैसे किया जाए, यह बिल्कुल दिखाता है। चाहे आप वॉटरमार्क, अर्द्ध‑पारदर्शी ओवरले, या कस्टम ग्राफ़िक्स बना रहे हों, आप एक संक्षिप्त, प्रोडक्शन‑रेडी तरीका सीखेंगे। + +आगे के सेक्शन में हम PDF को लोड करने से लेकर उसके ग्राफ़िक्स स्टेट को एडिट करने, नई अपारदर्शिता परिभाषा जोड़ने, और परिणाम को सेव करने तक सब कुछ कवर करेंगे। कोई बाहरी दस्तावेज़ आवश्यक नहीं—सिर्फ नीचे दिया गया कोड और प्रत्येक चरण की संक्षिप्त व्याख्या। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.7+ पर भी काम करता है) +* एक वैध Aspose.PDF for .NET लाइसेंस (मुफ़्त ट्रायल मूल्यांकन के लिए पर्याप्त है) +* एक इनपुट PDF फ़ाइल (`input.pdf`) जो किसी ऐसे फ़ोल्डर में हो जहाँ आप पढ़‑और‑लिख सकें +* Visual Studio 2022 या कोई भी C# IDE जो आप पसंद करते हैं + +## Step 1 – Load the PDF document (Aspose.PDF for .NET) + +पहला काम मौजूदा PDF को खोलना है। Aspose.PDF PDF फ़ाइल को `Document` क्लास से दर्शाता है, जो आपको पेजेज़, रिसोर्सेज़ और लो‑लेवल ऑब्जेक्ट्स तक पूरी पहुँच देता है। + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Why this matters*: डॉक्यूमेंट को लोड करने से एक इन‑मेमोरी मॉडल बनता है जिसे आप सुरक्षित रूप से संशोधित कर सकते हैं। `using` स्टेटमेंट फ़ाइल हैंडल को स्वचालित रूप से रिलीज़ कर देता है जब हम काम समाप्त कर लेते हैं। + +## Step 2 – Get the first page you want to edit + +अपारदर्शिता प्रत्येक पेज के रिसोर्स डिक्शनरी के माध्यम से परिभाषित होती है। यहाँ हम पहले पेज को टारगेट कर रहे हैं, लेकिन आप `doc.Pages` पर लूप करके बैच ऑपरेशन भी कर सकते हैं। + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Why this matters*: हर पेज की अपनी `Resources` कलेक्शन होती है, जिसमें ग्राफ़िक्स स्टेट्स, फ़ॉन्ट्स, इमेजेज़ आदि संग्रहीत होते हैं। सही पेज को संशोधित करने से अपारदर्शिता इफ़ेक्ट वहीँ दिखेगा जहाँ आप चाहते हैं। + +## Step 3 – Open the page’s resource dictionary for editing + +Aspose.PDF एक `DictionaryEditor` हेल्पर प्रदान करता है जिससे आप लो‑लेवल PDF डिक्शनरी को फ़ाइल संरचना को बिगाड़े बिना बदल सकते हैं। + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Why this matters*: PDF की COS (Content Object System) डिक्शनरी को सीधे एडिट करना ही कस्टम ग्राफ़िक्स स्टेट इन्जेक्ट करने का एकमात्र तरीका है। एडिटर लो‑लेवल सिंटैक्स को एब्स्ट्रैक्ट करता है जबकि PDF वैध रहता है। + +## Step 4 – Retrieve the existing ExtGState dictionary + +**ExtGState** (external graphics state) डिक्शनरी में अपारदर्शिता, ब्लेंड मोड, लाइन विड्थ आदि होते हैं। यदि यह मौजूद नहीं है, तो आप नया एंट्री जोड़ते समय Aspose.PDF इसे स्वचालित रूप से बना देता है। + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Why this matters*: `ExtGState` एंट्री के बिना आप बाद में पेज कंटेंट स्ट्रीम में कस्टम अपारदर्शिता को रेफ़र नहीं कर पाएंगे। यह चरण सुनिश्चित करता है कि कंटेनर मौजूद है। + +## Step 5 – Create a new graphics state with the desired opacity + +एक ग्राफ़िक्स स्टेट पैरामीटर्स का संग्रह होता है। अपारदर्शिता के लिए हम `CA` (stroke opacity) और `ca` (fill opacity) सेट करते हैं। हम ब्लेंड मोड (`BM`) भी सेट करते हैं ताकि ट्रांसपेरेंट पिक्सेल नीचे की सामग्री के साथ कैसे इंटरैक्ट करें, यह नियंत्रित हो। + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Why this matters*: `CA` और `ca` का मान 0 (पूरी तरह से पारदर्शी) से 1 (पूरी तरह से अपारदर्शी) तक हो सकता है। इन संख्याओं को समायोजित करके आप वांछित विज़ुअल इफ़ेक्ट प्राप्त कर सकते हैं। ब्लेंड मोड `"Normal"` सबसे आम है, लेकिन आप कलात्मक प्रभावों के लिए `"Multiply"` या `"Screen"` आज़मा सकते हैं। + +## Step 6 – Register the new graphics state in the ExtGState collection + +हर ग्राफ़िक्स स्टेट का एक यूनिक नाम होना चाहिए (जैसे `GS0`)। हम अपनी डिक्शनरी को `ExtGState` कलेक्शन में जोड़ते हैं, फिर पेज की रिसोर्सेज़ को अपडेट करते हैं। + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Why this matters*: स्टेट को नाम (`GS0`) देने से आप बाद में पेज कंटेंट स्ट्रीम में `gs` ऑपरेटर के ज़रिए इसे रेफ़र कर सकते हैं। यदि आपको कई अपारदर्शिता लेवल चाहिए, तो अतिरिक्त एंट्रीज़ (`GS1`, `GS2`, …) बनाएँ। + +## Step 7 – Apply the graphics state to drawing commands (optional) + +यदि आप मौजूदा कंटेंट पर तुरंत अपारदर्शिता लागू करना चाहते हैं, तो आपको पेज की कंटेंट स्ट्रीम को एडिट करना होगा। नीचे एक सरल उदाहरण है जो नई बनाई गई स्टेट का उपयोग करके अर्द्ध‑पारदर्शी आयत बनाता है। + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Why this matters*: `gs` ऑपरेटर (`SetGraphicsState`) PDF रेंडरर को बताता है कि आगे के सभी ड्रॉइंग कमांड्स में `GS0` में परिभाषित अपारदर्शिता मानों का उपयोग करना है। `grestore`/`gsave` जोड़ी यह सुनिश्चित करती है कि पेज के अन्य तत्व अप्रभावित रहें। + +## Step 8 – Save the modified PDF + +अंत में, अपडेटेड डॉक्यूमेंट को डिस्क पर लिखें। + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Why this matters*: सेव करने से सभी बदलाव फाइनल हो जाते हैं, नई ग्राफ़िक्स स्टेट एम्बेड हो जाती है, और एक ऐसा PDF बनता है जिसे कोई भी व्यूअर (Adobe Acrobat, Chrome, आदि) इच्छित ट्रांसपेरेंसी के साथ दिखा सके। + +### Expected result + +`output.pdf` को किसी PDF व्यूअर में खोलें। आपको एक लाल आयत दिखेगी जिसकी आउटलाइन 80 % अपारदर्शी और फ़िल 40 % अपारदर्शी होगी, जो बैकग्राउंड कंटेंट के साथ स्मूदली ब्लेंड होगी। पेज का बाकी हिस्सा अपरिवर्तित रहेगा। + +## Common variations and edge cases + +| Situation | What to change | Reason | +|-----------|----------------|--------| +| **Multiple opacity levels** | Create additional graphics states (`GS1`, `GS2`, …) with different `CA`/`ca` values and reference them where needed | Allows fine‑grained control over different elements | +| **Different blend modes** | Use `"Multiply"`, `"Screen"`, `"Overlay"` etc., instead of `"Normal"` in the `BM` entry | Produces artistic blending effects | +| **Applying to an existing content stream** | Insert `SetGraphicsState` before the specific drawing operators you want to affect | Prevents unwanted opacity on unrelated objects | +| **Large PDFs** | Process pages in a `foreach (Page p in doc.Pages)` loop to avoid loading the entire file into memory at once | Improves performance and reduces memory pressure | +| **No existing ExtGState** | The code in Step 4 already creates one if missing, so no extra handling is required | Guarantees the dictionary is present | + +### Pro tip + +जब आप कई कस्टम ग्राफ़िक्स स्टेट्स जोड़ते हैं, तो नामकरण को सुसंगत रखें (`GS0`, `GS1`, …) और प्रत्येक का उद्देश्य एक टिप्पणी ब्लॉक में दस्तावेज़ करें। इससे भविष्य में मेंटेनेंस आसान हो जाता है, विशेषकर सहयोगी प्रोजेक्ट्स में। + +## Full, runnable example + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप कॉपी‑पेस्ट करके चला सकते हैं। इसमें सभी चरण, आवश्यक `using` निर्देश, और टिप्पणी शामिल हैं। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Run the program, + +## What Should You Learn Next? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में निपुण हो सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन एप्रोचेज़ को एक्सप्लोर कर सकें। + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..9dc71f7294 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 बनाते समय फ़ॉर्म फ़ील्ड और पेज कैसे जोड़ें, इस चरण-दर-चरण गाइड में सीखें। | +| [Aspose.PDF के साथ PDF दस्तावेज़ सहेजें – पूर्ण मार्गदर्शिका](./save-pdf-document-with-aspose-pdf-complete-guide/) | Aspose.PDF का उपयोग करके PDF दस्तावेज़ को सहेजने के सभी चरणों को इस पूर्ण गाइड में सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/pdf/hindi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/hindi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0aff612ff3 --- /dev/null +++ b/pdf/hindi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF का उपयोग करके PDF दस्तावेज़ को सहेजें, PDF में पृष्ठ जोड़ना, + PDF फ़ॉर्म फ़ील्ड भरना, और एक ही ट्यूटोरियल में फ़ॉर्म फ़ील्ड वाले PDF बनाना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: hi +lastmod: 2026-08-08 +og_description: Aspose.PDF के साथ PDF दस्तावेज़ सहेजें और जानें कि कैसे PDF पृष्ठ + जोड़ें, PDF फ़ॉर्म फ़ील्ड भरें, और फ़ॉर्म फ़ील्ड वाले PDF को तेज़ और विश्वसनीय तरीके + से बनाएं। +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Aspose.PDF के साथ PDF दस्तावेज़ सहेजें – चरण‑दर‑चरण गाइड +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Aspose.PDF के साथ PDF दस्तावेज़ सहेजें – पूर्ण गाइड +url: /hi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF के साथ PDF दस्तावेज़ सहेजें – पूर्ण गाइड + +यदि आपको इंटरैक्टिव फ़ॉर्म फ़ील्ड वाले **PDF दस्तावेज़ को सहेजना** है, तो यह ट्यूटोरियल आपको ठीक‑ठीक दिखाएगा। आप देखेंगे कि PDF पृष्ठ कैसे जोड़ें, PDF फ़ॉर्म कैसे बनाएं, और PDF फ़ॉर्म फ़ील्ड को कैसे भरें—सभी Aspose.PDF for .NET के साथ। + +अगले सेक्शन में आप सीखेंगे: + +* नई PDF में कई पृष्ठ जोड़ना, +* पहले पृष्ठ पर एक टेक्स्ट बॉक्स फ़ॉर्म फ़ील्ड बनाना, +* उसी फ़ील्ड के लिए दूसरे पृष्ठ पर एक विजेट एनोटेशन रखना, +* फ़ील्ड का मान सेट करना (PDF फ़ॉर्म फ़ील्ड भरना), +* और अंत में **PDF दस्तावेज़ को सहेजना** डिस्क पर। + +कोई बाहरी टूल आवश्यक नहीं है; पूर्ण, चलाने योग्य कोड शामिल है। + +## आवश्यकताएँ + +* .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.7.2+ पर भी काम करता है)। +* एक वैध Aspose.PDF for .NET लाइसेंस या मुफ्त इवैल्यूएशन कुंजी। +* Visual Studio 2022 (या कोई भी C# IDE)। + +NuGet पैकेज जोड़ें: + +```bash +dotnet add package Aspose.PDF +``` + +## PDF पृष्ठ कैसे जोड़ें + +पहला कदम एक खाली PDF बनाना और आवश्यक पृष्ठ जोड़ना है। फ़ॉर्म फ़ील्ड परिभाषित करने से पहले पृष्ठ जोड़ने से लेआउट कॉर्डिनेट सटीक रहते हैं। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*क्यों यह महत्वपूर्ण है:* प्रत्येक `Page` ऑब्जेक्ट एक प्रिंटेबल कैनवास का प्रतिनिधित्व करता है। पृष्ठ जल्दी जोड़ने से बाद में फ़ॉर्म एलिमेंट्स को पोजिशन करते समय उनका संदर्भ ले सकते हैं। + +## Aspose.PDF के साथ PDF फ़ॉर्म कैसे बनाएं + +एक PDF फ़ॉर्म में **फ़ील्ड परिभाषा** (तार्किक कंटेनर) और एक या अधिक **विजेट एनोटेशन** (दृश्य प्रतिनिधित्व) होते हैं। उदाहरण पहले पृष्ठ पर **Comments** नामक `TextBoxField` बनाता है। + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*क्यों यह महत्वपूर्ण है:* `Rectangle` कॉर्डिनेट पॉइंट्स में व्यक्त होते हैं (1 pt = 1/72 in)। अपने डिज़ाइन के अनुसार मान समायोजित करें। + +## PDF फ़ॉर्म फ़ील्ड भरें + +आप दस्तावेज़ सहेजने से पहले प्रोग्रामmatically फ़ील्ड का मान सेट कर सकते हैं। यही **PDF फ़ॉर्म फ़ील्ड भरने** का मुख्य भाग है। + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +यदि आपको बाद में फ़ील्ड भरना है (जैसे उपयोगकर्ता इनपुट से), तो `Save` कॉल करने से पहले `commentsField.Value` को नई स्ट्रिंग असाइन कर दें। + +## दूसरे पृष्ठ पर उसी फ़ील्ड के लिए विजेट एनोटेशन जोड़ें + +विजेट एनोटेशन फ़ॉर्म फ़ील्ड को पृष्ठ पर दिखाता है। दूसरा विजेट जोड़ने से वही तार्किक फ़ील्ड दोनों पृष्ठों पर दिखाई देता है, जो कई पृष्ठों में फैले **फ़ॉर्म फ़ील्ड वाले PDF बनाना** दर्शाता है। + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*क्यों यह महत्वपूर्ण है:* `Widgets` कलेक्शन में किसी भी संख्या में दृश्य प्रतिनिधित्व रखे जा सकते हैं। उपयोगकर्ता किसी भी पृष्ठ पर फ़ील्ड के साथ इंटरैक्ट कर सकते हैं, और दर्ज किया गया मान सिंक्रनाइज़ रहता है। + +## फ़ील्ड को पहले पृष्ठ की एनोटेशन में जोड़ें + +फ़ॉर्म फ़ील्ड को पृष्ठ की एनोटेशन कलेक्शन में जोड़ना आवश्यक है ताकि PDF व्यूअर उन्हें रेंडर कर सके। + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDF दस्तावेज़ सहेजें + +अब फ़ॉर्म पूरी तरह परिभाषित है, आप **PDF दस्तावेज़ को सहेज** सकते हैं अपनी पसंद के स्थान पर। + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +जब आप `output.pdf` को Adobe Acrobat Reader या किसी भी PDF व्यूअर में खोलेंगे, तो पृष्ठ 1 पर एक टेक्स्ट बॉक्स और पृष्ठ 2 पर एक मिलते‑जुलते बॉक्स दिखेगा। किसी भी बॉक्स में टाइप करने से वही अंतर्निहित फ़ील्ड अपडेट हो जाएगा। + +## पूर्ण, चलाने योग्य उदाहरण + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप कंसोल एप्लिकेशन में कॉपी‑पेस्ट कर सकते हैं। यह बिना किसी बदलाव के संकलित होता है और वर्णित PDF उत्पन्न करता है। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**अपेक्षित आउटपुट:** `output.pdf` नाम की फ़ाइल जिसमें दो पृष्ठ हैं। पृष्ठ 1 पर (100, 600) कॉर्डिनेट पर “Comments” लेबल वाला टेक्स्ट बॉक्स दिखता है। पृष्ठ 2 पर वही फ़ील्ड (100, 400) पर दिखता है। फ़ील्ड “Enter your feedback here” से पहले‑भरा हुआ है। किसी भी पृष्ठ पर टेक्स्ट बदलने से दस्तावेज़ फिर से सहेजने पर वही मान अपडेट हो जाता है। + +## सामान्य प्रश्न और किनारी‑स्थिति संभालना + +| प्रश्न | उत्तर | +|----------|--------| +| *क्या मैं उसी फ़ील्ड के लिए एक से अधिक विजेट जोड़ सकता हूँ?* | हाँ। अतिरिक्त `WidgetAnnotation` ऑब्जेक्ट्स को `commentsField.Widgets` में जोड़ें। प्रत्येक विजेट को किसी भी पृष्ठ पर रखा जा सकता है। | +| *यदि मुझे फ़ील्ड की उपस्थिति (फ़ॉन्ट, बॉर्डर, बैकग्राउंड) सेट करनी हो तो?* | `commentsField.DefaultAppearance` का उपयोग करके फ़ॉन्ट और रंग निर्दिष्ट करें, और लाइन स्टाइल के लिए `commentsField.Border` प्रॉपर्टीज़ सेट करें। | +| *फ़ील्ड को केवल‑पढ़ने‑योग्य कैसे बनाऊँ?* | `commentsField.ReadOnly = true;` सेट करें। फ़ील्ड अपना मान दिखाएगा लेकिन उपयोगकर्ता द्वारा संपादित नहीं किया जा सकेगा। | +| *क्या PDF बन जाने के बाद फ़ील्ड को भरना संभव है?* | हाँ। सहेजे गए PDF को `new Document("output.pdf")` से लोड करें, `pdfDocument.Form["Comments"]` के माध्यम से फ़ील्ड खोजें, नया `Value` असाइन करें, और फिर `Save` कॉल करें। | +| *यदि PDF को आर्काइविंग के लिए PDF/A मानकों के अनुरूप होना चाहिए तो?* | दस्तावेज़ बनाने के बाद `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` को कॉल करें और फिर सहेजें। | + +## क्षेत्र से टिप्स + +* **प्रो टिप:** लॉजिकल फ़ील्ड नाम को छोटा और अद्वितीय रखें; यह वही पहचानकर्ता है जिसका उपयोग आप बाद में प्रोग्रामmatically फ़ॉर्म भरते समय करेंगे। +* **ध्यान रखें:** ओवरलैपिंग विजेट रेक्टेंगल्स। ओवरलैप कुछ व्यूअर्स में रेंडरिंग आर्टिफैक्ट्स पैदा कर सकते हैं। +* **परफ़ॉर्मेंस नोट:** कई पृष्ठ या विजेट को टाइट लूप में जोड़ते समय एक ही `Rectangle` इंस्टेंस को पुन: उपयोग करके और केवल उसके कॉर्डिनेट बदलकर ऑप्टिमाइज़ किया जा सकता है। + +## निष्कर्ष + +अब आप जानते हैं कि **PDF दस्तावेज़ को सहेजें** जिसमें पूरी तरह कार्यात्मक फ़ॉर्म हो, **PDF फ़ॉर्म फ़ील्ड को कैसे भरें**, और **PDF पृष्ठ कैसे जोड़ें** तथा **फ़ॉर्म फ़ील्ड वाले PDF बनाएं** Aspose.PDF for .NET का उपयोग करके। पूर्ण उदाहरण दस्तावेज़ निर्माण से लेकर अंतिम सहेजने तक का एंड‑टू‑एंड वर्कफ़्लो दर्शाता है। + +अब, **चेक बॉक्स जोड़ना**, **ड्रॉप‑डाउन् लिस्ट बनाना**, या **फ़ॉर्म को फ़्लैटन करना** जैसे संबंधित विषयों का अन्वेषण करें ताकि रीड‑ओनली वितरण संभव हो सके। इन सभी में यहाँ कवर किए गए सिद्धांतों का उपयोग होता है और आपके PDF ऑटोमेशन क्षमताओं को विस्तारित करता है। + +कोडिंग का आनंद लें! + +## आगे आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में निपुण हो सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोच का पता लगा सकें। + +- [Aspose के साथ PDF बनाना – फ़ॉर्म फ़ील्ड और पृष्ठ जोड़ें](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose के साथ PDF दस्तावेज़ बनाएं – पृष्ठ, टेक्स्ट बॉक्स और फ़ॉर्म जोड़ें](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Aspose.PDF for .NET का उपयोग करके PDF फ़ॉर्म फ़ील्ड जोड़ना और निकालना: एक व्यापक गाइड](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/hindi/net/programming-with-pdf-pages/_index.md index 41093544d9..93ceb5a76f 100644 --- a/pdf/hindi/net/programming-with-pdf-pages/_index.md +++ b/pdf/hindi/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ | [पीडीएफ पेज आयाम अपडेट करें](./update-dimensions/) | इस व्यापक, चरण-दर-चरण मार्गदर्शिका में जानें कि .NET के लिए Aspose.PDF के साथ PDF पृष्ठ आयामों को आसानी से कैसे अपडेट किया जाए। | | [पीडीएफ फाइल में पेज सामग्री तक ज़ूम करें](./zoom-to-page-contents/) | इस व्यापक गाइड में .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों में पृष्ठ सामग्री को ज़ूम करने का तरीका जानें। अपनी विशिष्ट आवश्यकताओं के अनुसार अपने PDF दस्तावेज़ों को बेहतर बनाएँ। | | [C# के साथ PDF में पेज नंबर जोड़ें – पूर्ण चरण‑दर‑चरण गाइड](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | .NET के लिए Aspose.PDF का उपयोग करके C# में PDF फ़ाइल में पेज नंबर जोड़ने की पूरी चरण‑दर‑चरण मार्गदर्शिका। | +| [Aspose के साथ Bates नंबरिंग PDF जोड़ें – चरण‑दर‑चरण गाइड](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Aspose के साथ PDF में Bates नंबरिंग जोड़ने की चरण‑दर‑चरण गाइड। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/hindi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..252dc687f0 --- /dev/null +++ b/pdf/hindi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: C# में Aspose.Pdf का उपयोग करके PDF में बेट्स नंबरिंग जोड़ें। यह ट्यूटोरियल + यह भी दिखाता है कि कैसे खाली पृष्ठ वाला PDF जोड़ें और प्रोग्रामेटिक रूप से PDF जनरेट + करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: hi +lastmod: 2026-08-08 +og_description: C# में Aspose.Pdf के साथ बेट्स नंबरिंग PDF जोड़ें। ब्लैंक पेज PDF + जोड़ना सीखें, प्रोग्रामेटिकली PDF जेनरेट करें, और मिनटों में अंतिम दस्तावेज़ सहेजें। +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Aspose के साथ PDF में Bates नंबरिंग जोड़ें – पूर्ण C# गाइड +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Aspose के साथ PDF में Bates नंबरिंग जोड़ें – चरण‑दर‑चरण गाइड +url: /hi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose के साथ PDF में bates नंबरिंग जोड़ें – चरण‑दर‑चरण गाइड + +Aspose.Pdf के साथ PDF में bates नंबरिंग जोड़ना सरल है जब आप मूल चरणों को समझ लेते हैं। यदि आपको खाली पृष्ठ PDF जोड़ने या प्रोग्रामेटिक रूप से PDF उत्पन्न करने की भी आवश्यकता है, तो यह गाइड आपकी सभी आवश्यकताओं को कवर करता है। + +इस ट्यूटोरियल में आप करेंगे: + +* शुरुआत से एक नया PDF दस्तावेज़ बनाएं। +* एक खाली पृष्ठ PDF जोड़ें जो Bates नंबरों को होस्ट करेगा। +* कस्टम प्रीफ़िक्स के साथ Bates नंबरिंग आर्टिफैक्ट को कॉन्फ़िगर करें। +* PDF को सहेजें ताकि नंबर उत्पन्न फ़ाइल में दिखाई दें। + +अंत तक आपके पास एक पूर्ण कार्यात्मक C# कंसोल एप्लिकेशन होगा जो **CASE‑1000**, **CASE‑1001**, … जैसे Bates नंबरों वाला PDF उत्पन्न करता है – कानूनी और e‑discovery कार्यप्रवाहों के लिए एक सामान्य आवश्यकता। + +## पूर्वापेक्षाएँ + +* .NET 6.0 SDK या बाद का संस्करण (कोड .NET Framework 4.8 के साथ भी काम करता है)। +* Visual Studio 2022 या कोई भी C#‑संगत IDE। +* एक वैध Aspose.Pdf for .NET लाइसेंस (या एक मुफ्त मूल्यांकन कुंजी)। +* C# सिंटैक्स की बुनियादी परिचितता। + +> **प्रो टिप:** यदि आप कोड को बिना लाइसेंस के चलाते हैं, तो Aspose आउटपुट PDF में एक छोटा वॉटरमार्क जोड़ देगा। + +## चरण 1: प्रोजेक्ट सेट अप करें और Aspose.Pdf इम्पोर्ट करें + +एक नया कंसोल प्रोजेक्ट बनाएं और Aspose.Pdf NuGet पैकेज जोड़ें: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +उदाहरण के लिए आवश्यक `using` निर्देश इस प्रकार हैं: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +ये नेमस्पेस आपको बाद में उपयोग किए जाने वाले `Document`, `Page`, और `BatesNumberingArtifact` क्लासेज़ तक पहुँच प्रदान करते हैं। + +## चरण 2: एक खाली पृष्ठ PDF जोड़ें + +Bates नंबर को किसी पृष्ठ से संलग्न होना आवश्यक है, इसलिए हम पहले एक खाली पृष्ठ बनाते हैं जो नंबरिंग आर्टिफैक्ट प्राप्त करेगा। + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` क्लास पूरे PDF फ़ाइल का प्रतिनिधित्व करता है, जबकि `Pages.Add()` दस्तावेज़ के पृष्ठ संग्रह के अंत में एक नया, खाली पृष्ठ सम्मिलित करता है। क्योंकि दस्तावेज़ शुरू में खाली है, यह कॉल पहला पृष्ठ भी बनाता है। + +## चरण 3: Bates नंबरिंग आर्टिफैक्ट को कॉन्फ़िगर करें + +अब हम परिभाषित करते हैं कि Bates नंबर कैसे दिखने चाहिए। `BatesNumberingArtifact` आपको प्रारंभिक संख्या, प्रीफ़िक्स, सफ़िक्स, और फ़ॉर्मेटिंग विकल्प सेट करने की अनुमति देता है। + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**यह क्यों महत्वपूर्ण है:** +`StartNumber` को **1000** पर सेट करने से सामान्य कानूनी केस फ़ाइल परम्पराओं से मेल खाता है। `Prefix` सुनिश्चित करता है कि प्रत्येक संख्या **CASE‑1000**, **CASE‑1001**, … के रूप में दिखाई दे, जिससे खोज और क्रमबद्ध करना आसान हो जाता है। + +## चरण 4: आर्टिफैक्ट को पृष्ठ से संलग्न करें + +आर्टिफैक्ट को पृष्ठ के `Artifacts` संग्रह में जोड़ना आवश्यक है ताकि Aspose सहेजते समय इसे प्रत्येक पृष्ठ पर रेंडर करे। + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +जब दस्तावेज़ सहेजा जाता है, तो Aspose स्वचालित रूप से सभी पृष्ठों पर आर्टिफैक्ट को दोहराता है, और प्रत्येक अगले पृष्ठ के लिए संख्या बढ़ाता है। + +## चरण 5: (वैकल्पिक) अतिरिक्त पृष्ठ जोड़ें + +यदि आपको अधिक पृष्ठों की आवश्यकता है, तो बस `pdfDocument.Pages.Add()` को दोहराएँ। पिछले चरण में संलग्न किया गया Bates नंबरिंग आर्टिफैक्ट प्रत्येक नए पृष्ठ पर स्वचालित रूप से दिखाई देगा। + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## चरण 6: PDF सहेजें – प्रोग्रामेटिक रूप से PDF उत्पन्न करें + +अंत में, दस्तावेज़ को डिस्क पर सहेजें। यही वह बिंदु है जहाँ Bates नंबर पृष्ठों पर रेंडर होते हैं। + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**अपेक्षित परिणाम:** +*BatesNumberedDocument.pdf* खोलें और आपको एक तीन‑पृष्ठीय PDF दिखाई देगा। प्रत्येक पृष्ठ नीचे‑दाएँ कोने में एक Bates नंबर दिखाता है: + +* पृष्ठ 1 → **CASE‑1000** +* पृष्ठ 2 → **CASE‑1001** +* पृष्ठ 3 → **CASE‑1002** + +संख्याएँ स्वचालित रूप से बढ़ती हैं क्योंकि आर्टिफैक्ट पृष्ठ संग्रह से जुड़ा हुआ है। + +## पूर्ण, चलाने योग्य उदाहरण + +सब कुछ मिलाकर, यहाँ एक पूर्ण कंसोल प्रोग्राम है जिसे आप कॉपी, पेस्ट और चलाकर उपयोग कर सकते हैं: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +`dotnet run` के साथ प्रोग्राम चलाएँ। निष्पादन के बाद, फ़ाइल को अपने डेस्कटॉप पर खोजें और Bates नंबरों की पुष्टि करें। + +![bates नंबरिंग PDF उदाहरण](/images/bates-numbering.png "bates नंबरिंग PDF उदाहरण") + +## सामान्य प्रश्न और किनारे के मामले + +### यदि मुझे अलग फ़ॉन्ट या स्थिति चाहिए तो क्या करें? + +`BatesNumberingArtifact` `FontSize`, `FontColor`, `HorizontalAlignment`, और `VerticalAlignment` जैसी प्रॉपर्टीज़ को उजागर करता है। उदाहरण के लिए: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### किसी विशिष्ट पृष्ठ को नंबरिंग से कैसे बाहर रखें? + +उन पृष्ठों के लिए एक अलग `BatesNumberingArtifact` बनाएं जिन्हें आप नंबर करना चाहते हैं और इसे केवल उन पृष्ठों में जोड़ें। जिन पृष्ठों में कोई आर्टिफैक्ट संलग्न नहीं है, वे अननंबर रहेंगे। + +### क्या यह मौजूदा PDFs के साथ काम करता है? + +हां। `new Document()` के बजाय, मौजूदा फ़ाइल लोड करें: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +फिर इच्छित पृष्ठों पर आर्टिफैक्ट संलग्न करें और सहेजें। + +## निष्कर्ष + +अब आप जानते हैं कि Aspose.Pdf का उपयोग करके **bates नंबरिंग PDF कैसे जोड़ें**, **खाली पृष्ठ PDF कैसे जोड़ें**, और **प्रोग्रामेटिक रूप से PDF कैसे उत्पन्न करें** एक साफ़, पुन: उपयोग योग्य C# समाधान में। यह तरीका किसी भी संख्या में पृष्ठों, कस्टम प्रीफ़िक्स, और स्टाइलिंग विकल्पों के साथ काम करता है, जिससे आपको अंतिम दस्तावेज़ पर पूर्ण नियंत्रण मिलता है। + +अगले कदम जिन्हें आप देख सकते हैं: + +* उपयोग करें **create pdf as + +## आगे आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API सुविधाओं में निपुण बनने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [Aspose.PDF for .NET का उपयोग करके PDFs में पृष्ठ संख्याएँ जोड़ना और अनुकूलित करना | दस्तावेज़ हेरफेर गाइड](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Aspose.PDF for .NET का उपयोग करके PDF के अंत में एक खाली पृष्ठ जोड़ना | चरण‑दर‑चरण गाइड](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Aspose.PDF के साथ PDF दस्तावेज़ बनाएं – पृष्ठ, आकार जोड़ें और सहेजें](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 a229655fe5..04a7c7817c 100644 --- a/pdf/hindi/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hindi/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ | [हस्ताक्षर फ़ील्ड का उपयोग करके स्मार्ट कार्ड से हस्ताक्षर करें](./sign-with-smart-card-using-signature-field/) | .NET के लिए Aspose.PDF के साथ स्मार्ट कार्ड का उपयोग करके PDF पर सुरक्षित रूप से हस्ताक्षर करना सीखें। आसान कार्यान्वयन के लिए हमारे चरण-दर-चरण मार्गदर्शिका का पालन करें। | | [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 हस्ताक्षर सत्यापित करें – Aspose.PDF के साथ पूर्ण गाइड](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Aspose.PDF का उपयोग करके C# में PDF हस्ताक्षर कैसे सत्यापित करें, इस पूर्ण गाइड में जानें। | +| [PDF हस्ताक्षर ट्यूटोरियल: Aspose.PDF के साथ PDF डिजिटल हस्ताक्षर सत्यापित करें](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Aspose.PDF का उपयोग करके PDF डिजिटल हस्ताक्षर को कैसे सत्यापित करें, इस चरण-दर-चरण गाइड में जानें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hindi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/hindi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..4ea25cd4d6 --- /dev/null +++ b/pdf/hindi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,222 @@ +--- +category: general +date: 2026-08-08 +description: PDF सिग्नेचर ट्यूटोरियल जो सिग्नेचर वैलिडेशन विकल्पों और C# कोड का उपयोग + करके PDF डिजिटल सिग्नेचर को वैलिडेट करने का तरीका दिखाता है – त्वरित चरण‑दर‑चरण + गाइड +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: hi +lastmod: 2026-08-08 +og_description: PDF सिग्नेचर ट्यूटोरियल आपको Aspose.PDF के साथ PDF डिजिटल सिग्नेचर + को वैध करने की प्रक्रिया दिखाता है। सिग्नेचर वैधता विकल्पों को कॉन्फ़िगर करना सीखें + और परिणाम जांचें। +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: पीडीएफ सिग्नेचर ट्यूटोरियल – C# में पीडीएफ डिजिटल हस्ताक्षरों को सत्यापित + करें +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'PDF हस्ताक्षर ट्यूटोरियल: Aspose.PDF के साथ PDF डिजिटल हस्ताक्षर को सत्यापित + करें' +url: /hi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF हस्ताक्षर ट्यूटोरियल – C# में PDF डिजिटल हस्ताक्षर को मान्य करें + +यदि आपको **pdf signature tutorial** चाहिए जो बिल्कुल दिखाए कि PDF डिजिटल हस्ताक्षर को कैसे मान्य किया जाए, तो यह गाइड आपके लिए है। आप देखेंगे कि साइन किए गए PDF को कैसे लोड करें, **signature validation options** को कैसे कॉन्फ़िगर करें, वैधता जांच चलाएँ, और परिणाम को कैसे प्रदर्शित करें—सभी स्पष्ट, चलाने योग्य C# कोड के साथ। + +PDF हस्ताक्षर को मान्य करना आवश्यक है जब आप अनुबंध, चालान, या कोई भी कानूनी दस्तावेज़ प्रोसेस करते हैं। यह ट्यूटोरियल पूर्ण कार्यप्रवाह को चरण‑दर‑चरण दर्शाता है, ताकि आप अपने एप्लिकेशन में हस्ताक्षर जांच को बिना किसी अनुमान के एकीकृत कर सकें। + +## What you’ll accomplish + +ट्यूटोरियल के अंत तक आप करेंगे: + +* Aspose.PDF का उपयोग करके साइन किए गए PDF फ़ाइल को लोड करना। +* हैश एल्गोरिदम जैसी **signature validation options** सेट करना। +* `Validate` मेथड को कॉल करके **validate pdf digital signature** करना। +* कंसोल में स्पष्ट “Signature valid” संदेश आउटपुट करना। + +**Prerequisites** + +* .NET 6.0 (या बाद का) स्थापित हो। +* Visual Studio 2022 (या कोई भी C# IDE)। +* Aspose.PDF for .NET NuGet पैकेज (`Aspose.Pdf`)। + +> **Pro tip:** नवीनतम Aspose.PDF संस्करण का उपयोग करें ताकि SHA‑3 एल्गोरिदम का समर्थन और वैधता प्रदर्शन में सुधार मिल सके। + +## Step 1: Install the Aspose.PDF NuGet package + +Visual Studio में अपना प्रोजेक्ट खोलें और Package Manager Console में निम्न कमांड चलाएँ: + +```bash +Install-Package Aspose.Pdf +``` + +यह पैकेज `Aspose.Pdf` नेमस्पेस जोड़ता है, जिसमें `Document` क्लास और वह सिग्नेचर‑संबंधित API शामिल हैं जिन्हें आप उपयोग करेंगे। + +## Step 2: Load the signed PDF document + +कोड की पहली पंक्ति एक `Document` ऑब्जेक्ट बनाती है जो डिस्क पर मौजूद PDF फ़ाइल का प्रतिनिधित्व करता है। + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* `Document` क्लास PDF संरचना को पार्स करता है, जिससे `Signatures` कलेक्शन उपलब्ध होता है जिसमें सभी एम्बेडेड डिजिटल सिग्नेचर रखे होते हैं। यदि फ़ाइल पथ गलत है, तो एक्सेप्शन फेंका जाएगा, इसलिए प्रोग्राम चलाने से पहले पथ की जाँच करें। + +## Step 3: Configure signature validation options + +आप `SignatureValidationOptions` क्लास के साथ वैधता प्रक्रिया को अनुकूलित कर सकते हैं। इस ट्यूटोरियल में हम हैश एल्गोरिदम निर्दिष्ट करते हैं, लेकिन आप प्रमाणपत्र रद्दीकरण जांच, टाइमस्टैम्प सत्यापन, आदि भी सेट कर सकते हैं। + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* हैश एल्गोरिदम को उसी के समान होना चाहिए जो सिग्नेचर बनाते समय उपयोग किया गया था। यदि एल्गोरिदम मेल नहीं खाता, तो वैधता विफल हो जाएगी भले ही सिग्नेचर अन्यथा सही हो। + +## Step 4: Validate the first signature + +अधिकांश PDFs में एक ही सिग्नेचर होता है, लेकिन `Signatures` कलेक्शन में कई भी हो सकते हैं। यह उदाहरण पहली एंट्री (`[0]`) को वैध करता है। `Validate` मेथड एक Boolean लौटाता है जो सफलता दर्शाता है। + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* यदि PDF में कोई सिग्नेचर नहीं है, तो `document.Signatures.Count` `0` होगा और `[0]` तक पहुँचने पर `IndexOutOfRangeException` फेंका जाएगा। इसे सरल चेक से रोकें: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Step 5: Display the validation result + +अंत में, परिणाम को कंसोल में लिखें। यह कदम **check pdf signature** परिणाम को मानव‑पठनीय रूप में दिखाता है। + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +जब आप प्रोग्राम चलाएँगे, तो आपको यह दिखना चाहिए: + +``` +Signature valid: True +``` + +यदि सिग्नेचर भ्रष्ट है, असमर्थित एल्गोरिदम उपयोग किया गया है, या प्रमाणपत्र रद्द किया गया है, तो आउटपुट `False` होगा। + +## Full, runnable example + +निम्न कोड को एक नए कंसोल प्रोजेक्ट (`dotnet new console`) में कॉपी करें और `YOUR_DIRECTORY/signed.pdf` को अपने साइन किए गए PDF फ़ाइल के पथ से बदलें। + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Expected output + +``` +Signature valid: True +``` + +यदि सिग्नेचर वैधता में विफल रहता है, तो कंसोल `Signature valid: False` प्रदर्शित करेगा। + +## Common questions and troubleshooting + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | `SignatureValidationOptions` में `HashAlgorithm` को मिलते‑जुलते एल्गोरिदम, जैसे `HashAlgorithm.SHA256`, में बदलें। | +| **How do I validate all signatures in a multi‑signature PDF?** | `document.Signatures` पर लूप चलाएँ और प्रत्येक एंट्री के लिए `Validate` कॉल करें। | +| **Can I verify the signing certificate’s trust chain?** | `validationOptions.CheckCertificateRevocation = true` सेट करें और वैकल्पिक रूप से विश्वसनीय रूट प्रमाणपत्रों को शामिल करने के लिए कस्टम `CertificateStore` प्रदान करें। | +| **What if I need to support timestamp validation?** | `validationOptions.CheckTimestamp = true` सक्षम करें। Aspose.PDF तब एम्बेडेड टाइमस्टैम्प टोकन को सत्यापित करेगा। | +| **Is there a way to get detailed validation errors?** | `ValidateEx(validationOptions, out ValidationResult result)` उपयोग करें; `result` में प्रत्येक विफलता के लिए `ErrorMessage` और `ErrorCode` होते हैं। | + +## Next steps + +* `document.Signatures` को इटररेट करके **validate pdf signature** को कई सिग्नेचर के लिए एक्सप्लोर करें। +* इस ट्यूटोरियल को **check pdf signature** के साथ वेब API में संयोजित करें ताकि अपलोड किए गए अनुबंधों के लिए रीयल‑टाइम वैधता प्रदान की जा सके। +* **signature validation options** जैसे CRL/OCSP जांच, टाइमस्टैम्प वैधता, और कस्टम ट्रस्ट स्टोर्स में गहराई से जाएँ। + +आपके पास अब एक पूर्ण **pdf signature tutorial** है जो Aspose.PDF का उपयोग करके C# में **validate pdf digital signature** दिखाता है। कोड को अपने वर्कफ़्लो के अनुसार अनुकूलित करें, लॉगिंग जोड़ें, या बड़े दस्तावेज़‑प्रोसेसिंग पाइपलाइन में एकीकृत करें। Happy coding! + +## What Should You Learn Next? + +नीचे दिए गए ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API सुविधाओं में निपुण हो सकें और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन तरीकों का अन्वेषण कर सकें। + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hindi/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..041fb264bb --- /dev/null +++ b/pdf/hindi/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,267 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF का उपयोग करके C# में PDF हस्ताक्षर सत्यापित करें। जानें कि + डिजिटल हस्ताक्षर PDF को कैसे मान्य करें और कुछ ही कोड लाइनों में PDF हस्ताक्षरों + की सूची कैसे बनाएं। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: hi +lastmod: 2026-08-08 +og_description: Aspose.PDF के साथ C# में PDF हस्ताक्षर सत्यापित करें। यह गाइड आपको + डिजिटल PDF हस्ताक्षर को मान्य करने, PDF हस्ताक्षरों की सूची बनाने और समझौता किए + गए हस्ताक्षरों को कुशलतापूर्वक संभालने का तरीका दिखाता है। +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: C# में PDF हस्ताक्षर सत्यापित करें – तेज़ Aspose.PDF ट्यूटोरियल +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Aspose.PDF के साथ C# में PDF हस्ताक्षर सत्यापित करें – पूर्ण मार्गदर्शिका +url: /hi/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में Aspose.PDF के साथ PDF हस्ताक्षर सत्यापित करें – पूर्ण गाइड + +यदि आपको .NET एप्लिकेशन में **PDF हस्ताक्षर सत्यापित** करने की आवश्यकता है, तो यह गाइड Aspose.PDF के साथ इसे करने का संक्षिप्त तरीका दिखाता है। आप सीखेंगे कि **डिजिटल सिग्नेचर PDF को वैलिडेट** कैसे करें, **PDF हस्ताक्षर सूचीबद्ध** करें, और कुछ ही कोड लाइनों में समझौता किए गए हस्ताक्षर का पता लगाएँ। + +यह ट्यूटोरियल लाइब्रेरी को इंस्टॉल करने से लेकर अनसाइन किए गए दस्तावेज़ या एन्क्रिप्टेड PDF जैसे एज केस को संभालने तक सब कुछ कवर करता है। अंत तक आप किसी भी C# प्रोजेक्ट में हस्ताक्षर सत्यापन को इंटीग्रेट कर सकेंगे, जिससे आने वाली PDF फ़ाइलों की प्रामाणिकता सुनिश्चित होगी। + +**Prerequisites** + +- .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.6+ के साथ भी काम करता है)। +- C# और Visual Studio (या आपका पसंदीदा IDE) की बुनियादी जानकारी। +- Aspose.PDF for .NET लाइसेंस (मुफ़्त ट्रायल मूल्यांकन के लिए काम करता है)। + +यदि आप इन आवश्यकताओं को पूरा करते हैं, तो आप PDF हस्ताक्षर सत्यापित करना शुरू करने के लिए तैयार हैं। + +## Verify PDF signature – प्रोजेक्ट सेट अप करें + +1. **Add the Aspose.PDF NuGet package** + पैकेज मैनेजर कंसोल खोलें और चलाएँ: + + ```bash + Install-Package Aspose.PDF + ``` + + यह `Aspose.Pdf` असेंबली और उसकी डिपेंडेंसीज़ को जोड़ता है। + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` आपको बाद में उपयोग होने वाले `Any` एक्सटेंशन देता है, जबकि `Aspose.Pdf` में `Document` और `Signature` क्लासेस होते हैं। + +## Load the PDF document + +पहला कार्यात्मक कदम वह PDF खोलना है जिसे आप जांचना चाहते हैं। Aspose.PDF फ़ाइल को मेमोरी में पढ़ता है, जिससे आप उसके हस्ताक्षरों को क्वेरी कर सकते हैं। + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – `using` ब्लॉक के भीतर दस्तावेज़ लोड करने से फ़ाइल हैंडल तुरंत रिलीज़ हो जाता है, जिससे लंबी‑चलने वाली सर्विसेज़ में फ़ाइल‑लॉक समस्याओं से बचा जा सकता है। + +## List PDF signatures + +हस्ताक्षर वैलिडेट करने से पहले, आप यह जानना चाह सकते हैं कि कितने हस्ताक्षर मौजूद हैं। यह चरण **list PDF signatures** क्षमता को दर्शाता है। + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` `Signature` ऑब्जेक्ट्स का संग्रह लौटाता है। +- `Count` आपको बताता है कि कितने हस्ताक्षर मौजूद हैं। +- प्रत्येक `Signature` में `Id`, `SignatureType`, और `Reason` जैसी मेटाडाटा होती है, जो ऑडिट लॉग के लिए उपयोगी हो सकती है। + +**Edge case** – यदि PDF में कोई हस्ताक्षर नहीं है, तो `Count` `0` होगा और लूप नहीं चलेगा। आप इस स्थिति को सहजता से इस प्रकार हैंडल कर सकते हैं: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validate digital signature PDF – समझौता किए गए हस्ताक्षर का पता लगाएँ + +अब जब आप हस्ताक्षरों की सूची बना सकते हैं, मुख्य कार्य **verify PDF signature** की अखंडता जाँचना है। Aspose.PDF `IsCompromised` प्रॉपर्टी प्रदान करता है, जो तब `true` लौटाती है जब हस्ताक्षर का क्रिप्टोग्राफ़िक हैश दस्तावेज़ सामग्री से मेल नहीं खाता। + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised` एम्बेडेड सर्टिफ़िकेट चेन का उपयोग करके पूर्ण क्रिप्टोग्राफ़िक वैलिडेशन करता है। +- `Any` LINQ ऑपरेटर पहले समझौता किए गए हस्ताक्षर पर रुक जाता है, जिससे कई हस्ताक्षरों वाले दस्तावेज़ों में भी जांच कुशल रहती है। + +### Handling multiple signatures individually + +यदि आपको यह जानना है कि कौन सा विशिष्ट हस्ताक्षर फेल हुआ, तो `Any` के बजाय इटरेट करें: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** वैलिडेशन परिणाम को `sig.Id` के साथ डेटाबेस में स्टोर करें ताकि बाद में फॉरेंसिक विश्लेषण किया जा सके। + +## Output results and consider edge cases + +नीचे एक पूर्ण, चलाने योग्य प्रोग्राम है जो ऊपर के सभी चरणों को मिलाता है। यह PDF लोड करता है, सभी हस्ताक्षर सूचीबद्ध करता है, उन्हें वैलिडेट करता है, और स्पष्ट परिणाम प्रिंट करता है। + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Common pitfalls and how to avoid them + +| Pitfall | Solution | +|---------|----------| +| PDF पासवर्ड‑प्रोटेक्टेड है। | `document.Encrypt.Decrypt(password)` के माध्यम से पासवर्ड पास करें, फिर `Signatures` तक पहुँचें। | +| कोई Aspose.PDF लाइसेंस सेट नहीं है। | `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` का उपयोग करके इवैल्यूएशन वाटरमार्क से बचें। | +| बड़े PDF से मेमोरी उपयोग अधिक हो जाता है। | पूरी फ़ाइल लोड करने के बजाय स्ट्रीमिंग मोड (`Document.Load(stream)`) में प्रोसेस करें। | + +## Conclusion + +अब आप **C# में Aspose.PDF का उपयोग करके PDF हस्ताक्षर सत्यापित** करना, **डिजिटल सिग्नेचर PDF को वैलिडेट** करना, और रिपोर्टिंग या ऑडिट के लिए **PDF हस्ताक्षर सूचीबद्ध** करना जानते हैं। पूरा उदाहरण दस्तावेज़ लोड करना, उसके हस्ताक्षरों को एन्ह्यूमरेट करना, प्रत्येक को समझौता के लिए चेक करना, और सामान्य एज केस को संभालना दर्शाता है। + +अगले कदम जिन्हें आप एक्सप्लोर कर सकते हैं: + +- **Validate timestamp tokens** ताकि यह सुनिश्चित किया जा सके कि हस्ताक्षर प्रमाणपत्र समाप्त होने से पहले बनाया गया था। +- **Extract signer certificates** (`sig.Certificate`) को कस्टम ट्रस्ट‑स्टोर वैलिडेशन के लिए निकालें। +- **Integrate with ASP.NET Core** ताकि अपलोड किए गए PDF जो वैलिडेशन फेल होते हैं, उन्हें स्वचालित रूप से रेजेक्ट किया जा सके। + +कई हस्ताक्षरों, कस्टम वैलिडेशन लॉजिक, या वैकल्पिक PDF लाइब्रेरी के साथ प्रयोग करने में संकोच न करें। यदि यह गाइड आपके काम आया, तो इसे टीम के साथ शेयर करें या कमेंट्स में अपने टिप्स जोड़ें। + +## What Should You Learn Next? + +नीचे दिए गए ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर कर सकें। + +- [PDF कैसे सत्यापित करें – Aspose के साथ PDF हस्ताक्षर वैलिडेट करें](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [C# में PDF हस्ताक्षर सत्यापित करें – डिजिटल सिग्नेचर PDF वैलिडेट करने का पूर्ण गाइड](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net डिजिटल हस्ताक्षर सत्यापित करें](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/hindi/net/text-operations/_index.md index c28deb0712..d6c99bc3f6 100644 --- a/pdf/hindi/net/text-operations/_index.md +++ b/pdf/hindi/net/text-operations/_index.md @@ -129,10 +129,10 @@ Aspose.PDF के साथ अपने .NET अनुप्रयोगों .NET के लिए Aspose.PDF का उपयोग करके PDF से कुशलतापूर्वक टेक्स्ट निकालना सीखें, यहाँ तक कि जटिल लेआउट को भी संभालें। यह गाइड लोडिंग, पार्सिंग और निष्कर्षण प्रक्रियाओं को अनुकूलित करने को कवर करती है। ### [.NET के लिए Aspose.PDF के साथ PDF टेक्स्ट एक्सट्रैक्शन में महारत हासिल करें: एक डेवलपर गाइड](./aspose-pdf-net-text-extraction-guide/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से कुशलतापूर्वक टेक्स्ट कैसे निकाला जाए। यह व्यापक गाइड टेक्स्ट निष्कर्षण सुविधाओं के सेटअप, कार्यान्वयन और एकीकरण को कवर करती है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF से कुशलतापूर्वक टेक्स्ट कैसे निकाला जाए। यह व्यापक गाइड टेक्स्ट निष्कर्षण सुविधाओं के सेटअप, कार्यान्वयन और एकीकरण को कवर करता है। ### [.NET के लिए Aspose.PDF के साथ PDF टेक्स्ट मैनिपुलेशन में महारत हासिल करें: एक व्यापक गाइड](./mastering-pdf-text-manipulation-aspose-dotnet/) -.NET के लिए Aspose.PDF का उपयोग करके PDF में टेक्स्ट जोड़ने और स्टाइल करने का तरीका जानें। यह गाइड सेटअप, स्टाइलिंग, हाइपरलिंक और व्यावहारिक अनुप्रयोगों को कवर करती है। +.NET के लिए Aspose.PDF का उपयोग करके PDF में टेक्स्ट जोड़ने और स्टाइल करने का तरीका जानें। यह गाइड सेटअप, स्टाइलिंग, हाइपरलिंक और व्यावहारिक अनुप्रयोगों को कवर करता है। ### [मास्टर पीडीएफ टेक्स्ट मैनिपुलेशन: .NET के लिए Aspose.PDF का उपयोग करके पीडीएफ में टेक्स्ट को घुमाएं और कस्टमाइज़ करें](./aspose-pdf-net-create-rotate-text-pdfs/) .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में टेक्स्ट को प्रभावी ढंग से घुमाने और अनुकूलित करने का तरीका जानें। यह मार्गदर्शिका सेटअप, कार्यान्वयन और उन्नत सुविधाओं को कवर करती है। @@ -141,10 +141,10 @@ Aspose.PDF के साथ अपने .NET अनुप्रयोगों Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में टेक्स्ट को घुमाना सीखें: एक संपूर्ण गाइड](./rotate-text-pdf-aspose-dotnet/) -.NET के लिए Aspose.PDF के साथ PDF दस्तावेज़ों में टेक्स्ट को घुमाना सीखें। यह व्यापक गाइड सेटअप, कोड उदाहरण और व्यावहारिक अनुप्रयोगों को कवर करती है। +.NET के लिए Aspose.PDF के साथ PDF दस्तावेज़ों में टेक्स्ट को घुमाना सीखें। यह व्यापक गाइड सेटअप, कोड उदाहरण और व्यावहारिक अनुप्रयोगों को कवर करता है। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF फ़्लोटिंग बॉक्स में टेक्स्ट संरेखण में महारत हासिल करें](./align-text-pdf-floating-boxes-aspose-pdf-net/) -.NET के लिए Aspose.PDF का उपयोग करके फ़्लोटिंग बॉक्स में टेक्स्ट को पूरी तरह से संरेखित करना सीखें। यह व्यापक गाइड सेटअप, संरेखण तकनीक और प्रदर्शन युक्तियों को कवर करती है। +.NET के लिए Aspose.PDF का उपयोग करके फ़्लोटिंग बॉक्स में टेक्स्ट को पूरी तरह से संरेखित करना सीखें। यह व्यापक गाइड सेटअप, संरेखण तकनीक और प्रदर्शन युक्तियों को कवर करता है। ### [Aspose.PDF .NET के साथ PDF में मास्टर टेक्स्ट प्रतिस्थापन](./aspose-pdf-net-text-replacement-guide/) Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल @@ -153,16 +153,16 @@ Aspose.PDF नेट के लिए एक कोड ट्यूटोरि .NET के लिए Aspose.PDF का उपयोग करके PDF दस्तावेज़ों में वर्ण स्पेसिंग को प्रभावी ढंग से लागू करने का तरीका जानें। TextBuilder, Fragment, और अधिक पर व्यावहारिक ट्यूटोरियल के साथ पठनीयता और दृश्य अपील को बढ़ाएँ। ### [PDF से टेक्स्ट निष्कर्षण में निपुणता: C# में .NET के लिए Aspose.PDF का उपयोग करने की सम्पूर्ण मार्गदर्शिका](./guide-extract-text-aspose-pdf-dotnet-csharp/) -जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से टेक्स्ट को कैसे सहजता से निकाला जाए। यह व्यापक गाइड सेटअप, कार्यान्वयन और सर्वोत्तम प्रथाओं को कवर करती है। +जानें कि .NET के लिए Aspose.PDF का उपयोग करके PDF फ़ाइलों से टेक्स्ट को कैसे सहजता से निकाला जाए। यह व्यापक गाइड सेटअप, कार्यान्वयन और सर्वोत्तम प्रथाओं को कवर करता है। ### [Aspose.PDF .NET के साथ PDF फ़ॉन्ट्स को अनुकूलित करें: टेक्स्ट ऑपरेशन के लिए एक संपूर्ण गाइड](./optimize-pdf-fonts-aspose-pdf-net-guide/) जानें कि Aspose.PDF .NET का उपयोग करके पीडीएफ फ़ॉन्ट्स को कैसे अनुकूलित करें, अप्रयुक्त फ़ॉन्ट्स को हटाकर और उन्हें एरियल बोल्ड के साथ बदलकर अपने दस्तावेज़ों को सुव्यवस्थित करें। ### [.NET के लिए Aspose.PDF का उपयोग करके PDF में फ़ॉन्ट बदलें](./replace-fonts-pdf-aspose-dotnet-guide/) -Aspose.PDF नेट के लिए एक कोड ट्यूटोरियल ### [.NET के लिए Aspose.PDF का उपयोग करके टैग किए गए PDF में टेक्स्ट को स्टाइल करें | सुलभ और सुंदर PDF निर्माण के लिए गाइड](./style-text-tagged-pdfs-aspose-pdf-net/) -.NET के लिए Aspose.PDF के साथ टैग किए गए PDF दस्तावेज़ों में टेक्स्ट को स्टाइल करने का तरीका जानें। यह गाइड एक्सेसिबिलिटी बढ़ाने के लिए इंस्टॉलेशन, तकनीक और व्यावहारिक अनुप्रयोगों को कवर करती है। + +### [Aspose.Pdf.AI के साथ PDF का सारांश कैसे बनाएं – गाइड](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) ## अतिरिक्त संसाधन diff --git a/pdf/hindi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/hindi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..b6a85ba21a --- /dev/null +++ b/pdf/hindi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf.AI के साथ PDF को कैसे सारांशित करें – AI के साथ PDF को सारांशित + करना सीखें, PDF सारांश बनाएं, और सारांश को PDF के रूप में सहेजें। पूर्ण कोड और सर्वोत्तम + प्रथाएँ। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: hi +lastmod: 2026-08-08 +og_description: Aspose.Pdf.AI के साथ PDF को कैसे सारांशित करें। यह ट्यूटोरियल आपको + दिखाता है कि AI के साथ PDF को कैसे सारांशित करें, PDF सारांश कैसे जनरेट करें, और + कुछ ही C# लाइनों में सारांश को PDF के रूप में कैसे सहेजें। +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Aspose.Pdf.AI के साथ PDF को कैसे सारांशित करें – चरण‑दर‑चरण मार्गदर्शिका +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Aspose.Pdf.AI के साथ PDF को कैसे सारांशित करें – गाइड +url: /hi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Pdf.AI के साथ PDF का सारांश कैसे बनाएं – गाइड + +यदि आपको **PDF का सारांश कैसे बनाएं** जल्दी और विश्वसनीय रूप से बनाना है, तो आप AI मॉडल को काम सौंप सकते हैं। यह ट्यूटोरियल आपको दिखाता है कि AI के साथ PDF का सारांश कैसे बनाएं, PDF सारांश उत्पन्न करें, और Aspose.Pdf.AI SDK for .NET का उपयोग करके सारांश को PDF के रूप में सहेजें। आपको एक पूर्ण, चलाने योग्य उदाहरण और प्रत्येक पंक्ति की व्याख्या मिलेगी ताकि आप समाधान को अपने प्रोजेक्ट्स में अनुकूलित कर सकें। + +गाइड में शामिल हैं: + +* स्रोत फ़ोल्डर और API कुंजी तैयार करना +* मॉडल से संवाद करने वाला `OpenAIClient` बनाना +* तापमान और दस्तावेज़ पथ जैसे सारांश विकल्पों को कॉन्फ़िगर करना +* `SummaryCopilot` बनाना और असिंक्रोनस रूप से सारांश पाठ प्राप्त करना +* उत्पन्न सारांश को PDF फ़ाइल में वापस सहेजना + +OpenAI एन्डपॉइंट के अलावा कोई बाहरी सेवा आवश्यक नहीं है, और कोड .NET 6+ और Aspose.Pdf.AI 23.7 (या बाद के संस्करण) के साथ काम करता है। + +## आवश्यकताएँ + +* **.NET 6 SDK** (या कोई भी नया .NET संस्करण) +* **Aspose.Pdf.AI for .NET** – NuGet के माध्यम से स्थापित करें: `dotnet add package Aspose.Pdf.AI` +* एक **OpenAI API कुंजी** जिसमें वह मॉडल हो जिसे आप उपयोग करना चाहते हैं (जैसे, `gpt‑4o`) +* एक PDF फ़ाइल जिसे आप सारांशित करना चाहते हैं (उदाहरण में `SampleDocument.pdf` उपयोग किया गया है) + +सुनिश्चित करें कि आप `dataDirectory` में जो फ़ोल्डर निर्दिष्ट करते हैं वह मौजूद है और एप्लिकेशन को पढ़ने/लिखने की अनुमति है। + +## चरण 1: प्रोजेक्ट संरचना सेट करें + +एक कंसोल प्रोजेक्ट बनाएं (या कोड को किसी मौजूदा .NET ऐप में एकीकृत करें)। न्यूनतम `Program.cs` इस प्रकार दिखता है: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### यह संरचना क्यों महत्वपूर्ण है + +* **`await using`** `OpenAIClient` को स्वचालित रूप से डिस्पोज़ करता है, HTTP कनेक्शन मुक्त करता है। +* **`Path.Combine`** OS‑स्वतंत्र पथ बनाता है, Windows बनाम Linux में बग से बचाता है। +* **Temperature** रचनात्मकता को नियंत्रित करता है; `0.5` संतुलित, तथ्यात्मक सारांश देता है। +* **`GetSummaryAsync`** साधारण टेक्स्ट लौटाता है, जबकि `SaveSummaryAsync` एक उचित PDF बनाता है जो फ़ॉन्ट और लेआउट को संरक्षित रखता है। + +## चरण 2: सारांश विकल्पों को समझें + +`OpenAISummaryCopilotOptions` क्लास आपको सारांश प्रक्रिया को बारीकी से ट्यून करने देती है: + +| विकल्प | उद्देश्य | सामान्य मान | +|--------|----------|-------------| +| `WithTemperature(double)` | रैंडमनेस को नियंत्रित करता है। `0.0` = निर्धारक, `1.0` = बहुत रचनात्मक। | व्यवसायिक दस्तावेज़ों के लिए `0.3‑0.7` | +| `WithDocument(string)` | स्रोत PDF का पथ। यह एक पढ़ने योग्य फ़ाइल होनी चाहिए। | कोई भी पूर्ण या सापेक्ष पथ | +| `WithPrompt(string)` *(optional)* | मॉडल को मार्गदर्शन करने के लिए कस्टम प्रॉम्प्ट। | “150 शब्दों में मुख्य निष्कर्षों का सारांश बनाएं।” | + +यदि आपके पास **बड़े PDF** (10 MB से अधिक या कई पृष्ठ) हैं, तो सारांश करने से पहले दस्तावेज़ को छोटे हिस्सों में विभाजित करने पर विचार करें ताकि टोकन‑सीमा त्रुटियों से बचा जा सके। SDK स्वचालित रूप से चंक नहीं करता; आप `Aspose.Pdf` से `PdfDocument` का उपयोग करके पृष्ठ निकाल सकते हैं और उन्हें एक‑एक करके फीड कर सकते हैं। + +## चरण 3: कोड चलाएँ और आउटपुट सत्यापित करें + +1. `SampleDocument.pdf` को उस `Data` फ़ोल्डर में रखें जिसे आपने संदर्भित किया है। +2. `"YOUR_API_KEY"` को अपने वास्तविक OpenAI कुंजी से बदलें। +3. `dotnet run` चलाएँ। + +आपको कंसोल में दो सेक्शन दिखने चाहिए: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +`Summary_out.pdf` को किसी भी PDF व्यूअर से खोलें – इसमें वही सारांश टेक्स्ट होगा, डिफ़ॉल्ट फ़ॉन्ट के साथ फ़ॉर्मेट किया हुआ। PDF पूरी तरह से सर्चेबल है क्योंकि SDK टेक्स्ट को एक मानक PDF पेज के रूप में एम्बेड करता है। + +## चरण 4: सामान्य विविधताएँ और किनारी‑स्थिति संभालना + +### दस्तावेज़ के केवल एक भाग का सारांश बनाएं + +यदि आपको **AI के साथ PDF का सारांश बनाएं** किसी विशिष्ट अध्याय के लिए चाहिए, तो पहले वह रेंज निकालें: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +फिर `WithDocument` को `Chapter5.pdf` की ओर इंगित करें। + +### सारांश की लंबाई समायोजित करना + +आप कस्टम प्रॉम्प्ट जोड़कर लंबाई को प्रभावित कर सकते हैं: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API त्रुटियों को संभालना + +नेटवर्क गड़बड़ी या कोटा सीमा `Aspose.Pdf.AI.Exceptions.AIException` उत्पन्न करती है। कॉल को `try / catch` ब्लॉक में घेरें: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### कस्टम लेआउट में सारांश सहेजना + +`SaveSummaryAsync` साधारण टेक्स्ट लिखता है। PDF को स्टाइल करने (शीर्षक, हेडर, या ब्रांडिंग जोड़ने) के लिए, एक नया `PdfDocument` बनाएं और सारांश को मैन्युअली डालें: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## चरण 5: प्रदर्शन टिप्स और सर्वोत्तम प्रथाएँ + +* **`OpenAIClient` को पुनः उपयोग करें** कई सारांशों के लिए एक ही प्रोसेस में – क्लाइंट बनाना सस्ता है, लेकिन अंतर्निहित `HttpClient` को पुनः उपयोग करने से सॉकेट ख़त्म होने की समस्या कम होती है। +* **सारांश को कैश करें** यदि स्रोत PDF नहीं बदलता; आप टेक्स्ट को डेटाबेस में रख सकते हैं और API कॉल को छोड़ सकते हैं। + +## आगे आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API सुविधाओं में महारत हासिल कर सकें और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण कर सकें। + +- [Aspose.PDF for .NET का उपयोग करके विशिष्ट PDF पृष्ठ निकालें और सहेजें - एक व्यापक गाइड](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Aspose.PDF .NET का उपयोग करके PDF अटैचमेंट निकालें और सहेजें - एक व्यापक गाइड](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Aspose.PDF .NET के साथ HTML को PDF में बदलें - एक पूर्ण गाइड](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/conversion-export/_index.md b/pdf/hongkong/net/conversion-export/_index.md index 1f020fa274..40bfcbbef8 100644 --- a/pdf/hongkong/net/conversion-export/_index.md +++ b/pdf/hongkong/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Aspose.PDF Net 程式碼教學 ### [使用 Aspose.PDF 在 .NET 中將 PDF 轉換為 TIFF:逐步指南](./pdf-to-tiff-conversion-aspose-pdf-net/) 了解如何使用 Aspose.PDF for .NET 將 PDF 文件轉換為 TIFF 影像。掌握自訂色彩深度和先進的影像處理技術。 +### [使用 Aspose.PDF 將 PDF 儲存為 HTML:逐步指南](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +了解如何使用 Aspose.PDF 將 PDF 檔案保存為 HTML 格式,提供完整步驟與程式碼範例。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/hongkong/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..192d3b57d3 --- /dev/null +++ b/pdf/hongkong/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 於 C# 將 PDF 儲存為 HTML。了解如何將 PDF 轉換為 HTML、跳過點陣圖,並處理常見的邊緣情況。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: zh-hant +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 將 PDF 另存為 HTML。本指南將教您如何將 PDF 轉換為 HTML、跳過點陣圖像,並避免常見的陷阱。 +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: 使用 Aspose.PDF 將 PDF 另存為 HTML – 完整 C# 教學 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: 使用 Aspose.PDF 將 PDF 另存為 HTML – 逐步指南 +url: /zh-hant/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose.PDF 將 PDF 儲存為 HTML – 步驟指南 + +如果您需要快速 **將 PDF 儲存為 HTML**,本教學將向您展示如何使用 Aspose.PDF for .NET 完成。無論您是在構建文件檢視器 Web 應用程式,或是匯出報告以利 SEO 友好索引,您都會看到一個完整、可執行的解決方案,將 PDF 轉換為 HTML,並讓您對點陣圖像進行精細控制。 + +除了主要任務外,我們還會說明 **aspose pdf html conversion** 的選項,讓您可以跳過點陣圖像、調整 CSS 處理方式,並有效管理大型文件。完成本指南後,您將擁有一個可直接放入任何 .NET 專案的自包含程式。 + +## 先決條件 + +在開始之前,請確保您已具備: + +* .NET 6.0 SDK 或更新版本(程式碼同樣適用於 .NET Core 與 .NET Framework) +* Visual Studio 2022 或任何支援 C# 的 IDE +* Aspose.PDF for .NET 授權(免費試用版可用於評估) +* 一個名為 `report.pdf` 的 PDF 檔案,放置於程式碼可參照的資料夾中 + +不需要除 `Aspose.Pdf` 之外的其他 NuGet 套件。 + +## 步驟 1:安裝 Aspose.PDF NuGet 套件 + +在專案資料夾的終端機中執行: + +```bash +dotnet add package Aspose.Pdf +``` + +此套件會加入 `Aspose.Pdf` 命名空間,內含 `Document` 類別與用於 **convert pdf to html** 作業的 `HtmlSaveOptions` 型別。 + +## 步驟 2:建立 Console 專案並加入 using 指令 + +如果尚未有專案,請建立新的 Console 應用程式: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +然後開啟 `Program.cs`,加入必要的命名空間: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +這些指令讓您可以存取核心 PDF API 以及控制 **aspose convert pdf html** 流程的 HTML 儲存選項。 + +## 步驟 3:載入 PDF 文件 + +第一行程式碼會將來源 PDF 讀入 `Aspose.Pdf.Document` 物件。此物件在記憶體中代表整個 PDF 檔案,並提供儲存、編輯與擷取內容的方法。 + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*此舉重要原因*:只載入一次文件即可保持記憶體使用量可預測,特別是對於大型 PDF。如果找不到檔案,Aspose 會拋出 `FileNotFoundException`,請確保路徑正確。 + +## 步驟 4:設定 HTML 儲存選項 + +`HtmlSaveOptions` 讓您微調 PDF 的轉換方式。在本教學中,我們會跳過點陣圖像以減輕輸出負擔,但若需要圖像,可將模式改為 `EmbedAll`。 + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**重點**: + +* `RasterImagesSavingMode.Skip` 告訴 Aspose 在轉換過程中忽略位圖圖像(JPEG、PNG)。當來源 PDF 包含您不需要在 HTML 中顯示的掃描頁面時,這個設定非常理想。 +* 若希望圖像另存為獨立檔案,可切換為 `EmbedAll` 或 `External`。 +* `ResourcesFolder` 屬性僅在圖像以外部方式儲存時才會生效。 + +## 步驟 5:將文件儲存為 HTML + +使用先前設定的選項將 HTML 檔寫入磁碟。 + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +此呼叫完成後,`report.html` 會包含原始 PDF 的文字內容、向量圖形與版面配置,但不會有任何點陣圖像。您可以在瀏覽器中開啟檔案以驗證結果。 + +## 預期輸出 + +在 Chrome 或 Edge 中開啟 `report.html` 時,您應該會看到: + +* 所有標題、段落與向量圖形均正確呈現。 +* 沒有 `` 標籤的點陣圖像(因為使用了 `Skip` 模式而被省略)。 +* 乾淨、最小化的 CSS,可能內嵌於 HTML 或放在獨立樣式表中,取決於您選擇的選項。 + +如果需要確認圖像已被省略,可檢查頁面原始碼(`Ctrl+U`),您將找不到 `` 標籤。 + +## 步驟 6:處理常見邊緣案例 + +### 6.1 大型 PDF(> 100 MB) + +對於非常大的檔案,啟用串流以減少記憶體壓力: + +```csharp +htmlOpts.Streaming = true; +``` + +串流會直接將 HTML 區塊寫入磁碟,避免整個文件一次性載入記憶體。 + +### 6.2 密碼保護的 PDF + +若來源 PDF 已加密,請在儲存前提供密碼: + +```csharp +doc.Decrypt("yourPassword"); +``` + +未先解密即嘗試儲存會拋出 `InvalidPasswordException`。 + +### 6.3 Unicode 字元 + +Aspose.PDF 會自動嵌入 Unicode 字型,但您也可以強制使用特定字型以確保渲染一致: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 多頁面自訂檔名 + +若希望每個 PDF 頁面產生獨立的 HTML 檔,請設定: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +這會產生 `report_page_1.html`、`report_page_2.html` 等檔案,對於 Web 應用程式的分頁顯示相當有用。 + +## 完整、可執行範例 + +以下是結合所有步驟的完整程式碼。將其複製到 `Program.cs`,調整路徑後執行 `dotnet run`。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**驗證**:執行後,主控台會印出成功訊息。開啟產生的 HTML 檔案,確認文字與向量圖形正確顯示,且點陣圖像已被省略。 + +## 專業提示與常見陷阱 + +* **專業提示**:若日後需要點陣圖像,將 `RasterImagesSavingMode` 改為 `External` 並設定 `ResourcesFolder`。系統會在 `images` 子資料夾中產生提取出的位圖。 +* **注意事項**:在大量依賴掃描圖像的 PDF 上使用預設的 `Skip` 模式,會導致圖像所在區域變成空白。務必以具代表性的文件樣本進行測試。 +* **效能提示**:在批次轉換時重複使用同一個 `HtmlSaveOptions` 實例,可減少物件建立的開銷。 +* **版本檢查**:此 API 於 Aspose.PDF for .NET 23.9 版及以上可用。較早版本的列舉名稱可能略有不同,例如 `HtmlSaveOptions.RasterImagesSavingMode`。 + +## 結論 + +您現在已掌握如何使用 Aspose.PDF **將 PDF 儲存為 HTML**、如何控制點陣圖像的處理方式,以及如何因應大型檔案、密碼保護與每頁 HTML 輸出等常見挑戰。這套完整解決方案讓您能自信地將 PDF 轉 HTML 功能整合至任何 C# 應用程式。 + +### 接下來該做什麼? + +* 探索 **aspose pdf html conversion** 以嵌入字型與自訂 CSS。 +* 結合此轉換與 Web API,即時提供 HTML 內容。 +* 嘗試相反方向——**convert pdf to html** 後再轉回 PDF,以驗證往返的忠實度。 + +歡迎自行實驗各種選項,並在評論或 Aspose 論壇分享您的發現。祝開發順利! + +## 您接下來應該學習什麼? + +以下教學涵蓋與本指南密切相關的主題,並在此基礎上進一步擴展技巧。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [在 .NET 使用 Aspose.PDF 轉換 PDF 為 HTML(不儲存圖像)](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [使用 Aspose.PDF .NET 進行 PDF 到 HTML 轉換:將圖像儲存為外部 PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [使用 Aspose.PDF .NET 轉換 PDF 為 HTML 並自訂圖像 URL:完整指南](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/hongkong/net/digital-signatures/_index.md index e82f0d6787..b6a2d977c7 100644 --- a/pdf/hongkong/net/digital-signatures/_index.md +++ b/pdf/hongkong/net/digital-signatures/_index.md @@ -53,6 +53,9 @@ Aspose.PDF Net 程式碼教學 ### [在 C# 中驗證 PDF 簽章 – 完整指南驗證 PDF 數位簽名](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) 了解如何在 C# 中使用 Aspose.PDF 驗證 PDF 檔案的數位簽章,提供完整步驟與範例程式碼。 +### [如何使用 Aspose.PDF 驗證 PDF – 在 C# 中檢查 PDF 簽章有效性](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +了解如何在 C# 中使用 Aspose.PDF 檢查 PDF 簽章的有效性,提供步驟與範例程式碼。 + ### [載入 PDF 文件 C# – 轉換為 PDF/X‑4 並列出簽章](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) 了解如何載入 PDF 文件,將其轉換為 PDF/X‑4,並列出其中的簽章。 diff --git a/pdf/hongkong/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/hongkong/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..9fb56d5c90 --- /dev/null +++ b/pdf/hongkong/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-08-08 +description: 如何使用 Aspose.PDF 驗證 PDF 以及驗證 PDF 數位簽章。請跟隨此一步一步的指南快速檢查 PDF 簽章。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: zh-hant +lastmod: 2026-08-08 +og_description: 如何使用 Aspose.PDF 驗證 PDF。學習在幾行 C# 程式碼中驗證 PDF 數位簽章並檢查簽章有效性。 +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: 如何驗證 PDF – 使用 Aspose.PDF 在 C# 中檢查 PDF 簽名有效性 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: 如何使用 Aspose.PDF 驗證 PDF – 在 C# 中檢查 PDF 簽名有效性 +url: /zh-hant/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Aspose.PDF 驗證 PDF – 檢查 PDF 簽章有效性(C#) + +如果您需要 **如何驗證 PDF** 檔案中的數位簽章,本教學將提供完整解決方案。您將學會載入 PDF、建立憑證驗證器,並使用 Aspose.PDF for .NET 檢查 PDF 簽章的有效性。 + +驗證 PDF 數位簽章是合規、發票與安全文件交換的常見需求。閱讀完本指南後,您能自信地驗證簽署的 PDF 是否可信,並了解如何處理常見的例外情況,例如缺少憑證或多重簽章。 + +## 前置條件 + +開始之前,請確保您已具備: + +- 已安裝 .NET 6.0 或更新版本 +- 如 Visual Studio 2022 等 IDE(任何支援 C# 的編輯器皆可) +- 已取得 **Aspose.PDF for .NET** 的授權版(免費試用版可用於評估) +- 一個已簽署的 PDF 檔案(`signed.pdf`),若簽章依賴私有 CA,還需相對應的受信任憑證(`trustedCertificate.pfx`) + +除 `Aspose.PDF` 之外,無需其他 NuGet 套件。 + +## 步驟 1:安裝 Aspose.PDF + +在專案資料夾的終端機中執行: + +```bash +dotnet add package Aspose.PDF +``` + +此指令會加入最新的 Aspose.PDF 函式庫,其中包含稍後會使用的 `Document` 與 `CertificateValidator` 類別。 + +## 步驟 2:載入 PDF 文件 + +載入 PDF 是您 **如何載入 pdf** 程式化的第一步。`Document` 建構子接受檔案路徑、串流或位元組陣列。使用完整路徑可讓範例更清晰。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**為什麼重要:** `Document` 物件在記憶體中代表整個 PDF 檔案。未載入檔案就無法存取其 `Signatures` 集合,而這是 **檢查 pdf 簽章** 資料的前提。 + +## 步驟 3:準備憑證驗證器 + +只有簽署憑證鏈至您信任的根憑證時,數位簽章才被視為可信。`CertificateValidator` 讓您將 Aspose.PDF 指向受信任的憑證儲存區或特定的 PFX 檔案。 + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +如果您的 PDF 使用的是 Windows 已信任的公共 CA,您可以省略 `certPath`,直接以預設建構子建立 `CertificateValidator`。提供自訂 PFX 在內部 PKI 環境中特別有用。 + +## 步驟 4:驗證第一個數位簽章 + +PDF 可能包含多個簽章。為簡化說明,本教學驗證第一個簽章(`Signatures[0]`)。`Validate` 方法在簽章在密碼學上完整 **且** 簽署憑證受信任時回傳 `true`。 + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**內部運作說明:** +- 方法會比對已簽署內容的雜湊值與簽章值。 +- 使用提供的驗證器建構憑證鏈。 +- 若驗證器已設定,亦會評估撤銷狀態(CRL/OCSP)。 + +### 處理多重簽章 + +若您的 PDF 含有超過一個簽章,可遍歷 `Signatures` 集合: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +此模式讓您 **檢查 pdf 簽章** 在每一頁上,並回報個別結果。 + +## 步驟 5:輸出驗證結果 + +最後,將結果寫入主控台。於正式環境中,您可能會記錄結果或在簽章無效時拋出例外。 + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### 預期的主控台輸出 + +``` +Valid +``` + +或 + +``` +Invalid +``` + +訊息會反映 `Validate` 回傳的布林值。若顯示 “Invalid”,可能代表文件被竄改、憑證不受信任,或簽署憑證已過期。 + +## 步驟 6:常見陷阱與最佳實踐提示 + +### 1. 缺少受信任的憑證 +若收到 `Invalid`,且您確定簽章應受信任,請確認已將正確的根憑證提供給 `CertificateValidator`。可使用接受 `X509Certificate2Collection` 的重載,以支援多個根憑證。 + +### 2. 含外部參考的簽章 +某些簽章會涵蓋外部內容(例如附加檔案)。請確保外部資源可被存取,否則雜湊驗證會失敗。 + +### 3. 時間戳記驗證 +簽章可能包含時間戳記 token。若要驗證,請將驗證器設定為檢查時間戳記授權機構(TSA)憑證: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. 大型 PDF 的效能 +載入數百頁的 PDF 可能佔用大量記憶體。若僅需簽章資料,可使用 `PdfFileEditor` 直接抽取簽章字典,而不必渲染頁面。 + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. 執行緒安全性 +`Document` 實例非執行緒安全。於平行驗證多個 PDF 時,請為每個執行緒建立新的 `Document`。 + +## 完整可執行範例 + +以下是完整程式碼,您可直接複製、貼上並在更新檔案路徑後執行。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**執行程式** 後會為每個簽章印出一行,清楚顯示 PDF 是否通過 **驗證 pdf 數位簽章** 檢查。 + +## 結論 + +現在您已了解 **如何驗證 PDF** 檔案中包含的數位簽章,並掌握使用 Aspose.PDF for .NET 的完整流程。教學涵蓋了載入 PDF、設定憑證驗證器、檢查 pdf 簽章有效性、處理多重簽章,以及排除常見問題的技巧。 + +接下來,您可以探索相關主題,例如 **如何簽署 PDF**、**如何加入時間戳記 token**,以及 **如何抽取已簽署內容**。這些延伸功能可協助您在 C# 中建立完整的端對端安全文件工作流程。 + +--- + + +## 接下來該學什麼? + +以下教學與本指南緊密相關,能在此基礎上進一步擴展技巧。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,或在專案中嘗試不同的實作方式。 + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/hongkong/net/document-conversion/_index.md index 2e3b91f7ba..35fe8e244f 100644 --- a/pdf/hongkong/net/document-conversion/_index.md +++ b/pdf/hongkong/net/document-conversion/_index.md @@ -58,6 +58,7 @@ | [XML 轉 PDFSet 影像路徑](./xml-to-pdfset-image-path/) |了解如何使用 Aspose.PDF for .NET 輕鬆地將 XML 轉換為 PDF。本詳細指南將逐步引導您完成整個過程,從設定到完成。 | | [XPS 轉 PDF](./xps-to-pdf/) |透過本逐步教學了解如何使用 Aspose.PDF for .NET 將 XPS 檔案轉換為 PDF。非常適合開發人員和文檔愛好者。 | | [在 C# 中將 PDF 轉換為 PDF/X‑4 – ASP.NET PDF 分步教學](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) |透過本逐步指南了解如何使用 Aspose.PDF for .NET 在 C# 中將 PDF 轉換為 PDF/X‑4 格式。 | +| [PDF/X‑4 轉換教學 – 設定 PDF 標準並使用 Aspose 轉換 PDF](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) |了解如何使用 Aspose.PDF for .NET 在 C# 中設定 PDF/X‑4 標準並將 PDF 轉換為符合該標準的文件。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/hongkong/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..845f5836ec --- /dev/null +++ b/pdf/hongkong/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-08-08 +description: PDF/X‑4 轉換教學,示範如何將 PDF 標準設定為 PDF/X‑4,並使用 Aspose 轉換 PDF,以確保格式轉換的可靠性。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: zh-hant +lastmod: 2026-08-08 +og_description: pdfx4 轉換教學說明如何將 PDF 標準設定為 PDF/X‑4,並使用 Aspose 在 C# 中執行可靠的 PDF 轉換。 +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 轉換教學 – 設定 PDF 標準並使用 Aspose 轉換 PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 轉換教學 – 設定 PDF 標準並使用 Aspose 轉換 PDF +url: /zh-hant/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 轉換教學 – 設定 PDF 標準並使用 Aspose 轉換 PDF + +如果你需要 **pdfx4 轉換教學**,本指南將一步步說明如何將 PDF 標準設定為 PDF/X‑4,並使用 Aspose 進行轉換。無論是要製作列印就緒檔案,或是確保長期保存合規,你都能學會一套可靠的 **aspose pdf format conversion** 工作流程,適用於 .NET 6 及更新版本。 + +本教學涵蓋從專案設定到處理缺少來源檔案或不支援功能等邊緣情況。完成本文後,你將擁有一個完整的 C# 程式,可產生符合 PDF/X‑4 標準的檔案,供後續流程使用。 + +## 前置條件 + +在開始之前,請確保你已具備: + +- .NET 6 SDK 或更新版本([下載請點此處](https://dotnet.microsoft.com/download)) +- 有效的 Aspose.PDF for .NET 授權(免費試用版可用於測試) +- Visual Studio 2022、VS Code,或任何支援 .NET 開發的 IDE +- 一個欲轉換的來源 PDF 檔(請放置於已知資料夾) + +上述條件可確保程式碼在不需額外設定的情況下執行。 + +## 步驟 1:建立新的 .NET 主控台專案 + +開啟終端機,執行以下指令以建立名為 `PdfX4Converter` 的主控台應用程式: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +加入 Aspose.PDF NuGet 套件: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` 套件提供 `Document` 類別與 `PdfFormatConversionOptions`,是執行 **convert pdf pdfx4** 操作所必需的。 + +## 步驟 2:撰寫轉換程式碼 + +開啟 `Program.cs`(若使用新版頂層敘述式則同樣是 `Program.cs`),將內容全部取代為以下完整範例。程式碼示範如何 **set pdf standard** 為 PDF/X‑4、執行轉換,並加入常見問題的錯誤處理。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### 為何每個部分都很重要 + +- **參數驗證** 可防止使用者忘記提供檔案路徑時程式當機。 +- **`Document` 載入** 若來源 PDF 缺失或損毀,會拋出明確例外,這對於穩健的 **convert pdf using aspose** 體驗相當關鍵。 +- **`PdfFormatConversionOptions`** 正是設定 **set pdf standard** 的地方。將 `PdfStandard.PdfX4` 指定給它,Aspose 會自動調整色彩空間、嵌入必要字型,並寫入 PDF/X‑4 所需的中繼資料。 +- **`FontEmbeddingMode.EmbedAll`** 確保來源 PDF 使用的每一種字型皆被嵌入,這是列印就緒 PDF 的常見需求。 +- **`doc.Convert`** 執行實際的 **aspose pdf format conversion**。此方法一次呼叫即可寫入新檔,簡化工作流程。 + +## 步驟 3:執行轉換器 + +建置專案並以來源與目的路徑執行: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +若一切順利,主控台會顯示: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +此時你即可在任何支援 PDF/X‑4 的 PDF 閱讀器(例如 Adobe Acrobat Pro)開啟 `output_pdfx4.pdf`,並透過 *檔案 → 屬性 → 標準* 來驗證合規性。 + +## 步驟 4:驗證 PDF/X‑4 合規性(可選) + +在正式生產流程中,你可能需要以程式方式驗證輸出。Aspose 提供 `PdfComplianceChecker` 類別(位於 `Aspose.Pdf` 套件),使用方式如下: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +在轉換完成後執行此片段,可取得明確的通過/失敗結果,適合自動化 CI/CD 流程使用。 + +## 步驟 5:常見問題與最佳實踐提示 + +| 問題 | 為何會發生 | 如何避免 | +|------|------------|----------| +| 來源 PDF 缺少字型 | 字型被參照但未嵌入,會產生轉換警告 | 如上例使用 `FontEmbeddingMode.EmbedAll` | +| 來源 PDF 含有 PDF/X‑4 不允許的透明物件 | PDF/X‑4 禁止某些透明混合模式 | 於轉換前先呼叫 `doc.ProcessTransparentObjects()` 進行前置處理 | +| 大檔案導致 OutOfMemoryException | 整份文件一次載入記憶體 | 使用 `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` 以串流方式載入 | +| 未套用授權 | 試用版會加上浮水印 | 在任何 Aspose API 使用前呼叫 `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` | + +遵循上述技巧,可確保在生產環境中獲得順暢的 **convert pdf pdfx4** 體驗。 + +## 步驟 6:延伸教學 + +掌握基本的 **pdfx4 conversion tutorial** 後,你可以進一步探索: + +- **批次轉換**:遍歷資料夾中的 PDF,逐一轉換為 PDF/X‑4。 +- **中繼資料注入**:加入特定印刷廠要求的 XMP 中繼資料。 +- **色彩描述檔管理**:在轉換前使用 `doc.ColorSpace = ColorSpace.DeviceRGB;` 連結 ICC 描述檔。 + +所有這些延伸功能皆以本教學示範的 **aspose pdf format conversion** 為基礎。 + +## 結論 + +本 **pdfx4 conversion tutorial** 示範了如何 **set pdf standard** 為 PDF/X‑4、執行可靠的 **convert pdf using Aspose**,並驗證結果。現在你擁有一個完整、可執行的 C# 程式,可整合至更大的文件處理管線,或作為獨立工具使用。可進一步嘗試批次處理、元資料管理,或改用其他 PDF 標準(PDF/A‑2b、PDF/UA)以深化對 **aspose pdf format conversion** 的專業知識。 + +祝開發順利,享受 PDF/X‑4 合規輸出帶來的信心! + +## 接下來該學什麼? + +以下教學與本指南緊密相關,能在此基礎上延伸技術與實作方式,皆提供完整可執行的程式碼範例與逐步說明,協助你掌握更多 API 功能並探索替代實作方案。 + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hongkong/net/document-creation/_index.md b/pdf/hongkong/net/document-creation/_index.md index c416a03f8f..92f64d16eb 100644 --- a/pdf/hongkong/net/document-creation/_index.md +++ b/pdf/hongkong/net/document-creation/_index.md @@ -76,9 +76,13 @@ Aspose.PDF Net 程式碼教學 ### [使用 Aspose.PDF 建立 PDF 文件 – 新增頁面、形狀與儲存](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) 了解如何使用 Aspose.PDF 在 PDF 中新增頁面與形狀,並將文件儲存。 + ### [使用 Aspose.PDF 建立 PDF 文件:逐步指南](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) 了解如何使用 Aspose.PDF 逐步建立 PDF 文件,涵蓋設定、內容加入與儲存等關鍵步驟。 +### [使用 Aspose.PDF for .NET 在 C# 中建立 PDF 文件](./create-pdf-document-in-c-with-aspose-pdf/) +了解如何使用 Aspose.PDF for .NET 在 C# 程式中建立 PDF 文件的步驟與範例。 + ## 其他資源 - [Aspose.PDF 用於網頁文檔](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hongkong/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/hongkong/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..866b39a630 --- /dev/null +++ b/pdf/hongkong/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-08-08 +description: 使用 C# 及 Aspose.Pdf 建立 PDF 文件。學習如何在 PDF 中新增空白頁、加入段落,以及以精確座標定位文字。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: zh-hant +lastmod: 2026-08-08 +og_description: 快速在 C# 中建立 PDF 文件。本教學示範如何使用 Aspose.Pdf 在 PDF 中新增空白頁、加入段落,以及定位文字。 +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: 使用 Aspose.Pdf 在 C# 中建立 PDF 檔 – 完整指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: 使用 Aspose.Pdf 在 C# 中建立 PDF 文件 +url: /zh-hant/net/document-creation/create-pdf-document-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 文件**,本教學將一步步示範。使用 Aspose.Pdf for .NET,您可以新增空白頁面 PDF、在 PDF 中插入段落,並以像素級的精確度定位文字——全部只需幾行 C# 程式碼。 + +完成本教學後,您將得到一個功能完整的 PDF 檔案,裡面包含您指定座標的備註。無需外部工具、無需手動編輯——只要乾淨、可重複使用的程式碼,即可直接放入任何 .NET 專案。 + +## 您將學會 + +* 如何使用 Aspose.Pdf **建立 PDF 文件**。 +* 正確的 **新增空白頁面 PDF** 方式,以及為何必須先有頁面才能加入內容。 +* 如何 **在 PDF 中加入段落** 並附加自訂標籤(方便日後抽取或樣式設定)。 +* 使用 `Position` 類別 **在 PDF 中定位文字** 的技巧。 +* 如何將結果儲存至磁碟並驗證輸出。 + +**先備條件** + +* .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.7+)。 +* 有效的 Aspose.Pdf for .NET 授權或免費評估金鑰。 +* 具備 Visual Studio 2022 或安裝 C# 擴充功能的 VS Code 等開發環境。 + +> **專業提示:** 若使用免費評估版,產生的 PDF 會帶有小水印。註冊授權即可移除。 + +## 如何使用 Aspose.Pdf 建立 PDF 文件 + +第一步是實例化 `Document` 類別。此物件代表整個 PDF 檔案,讓您可以存取頁面、資源與儲存選項。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +建立文件**不會**立即寫入磁碟;它只會在記憶體中建立可供操作的表示。此做法讓 API 保持快速且節省記憶體。 + +## 使用 Aspose.Pdf 新增空白頁面 PDF + +在加入任何內容之前,PDF 必須至少有一個頁面。新增空白頁面只需要一次方法呼叫: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` 方法會以預設尺寸(A4)與方向(直向)建立頁面。若需要其他尺寸,只要將 `PageSize` 例項傳入 `Add()` 即可。 + +## 在 PDF 中加入段落並設定備註 + +現在頁面已存在,您可以建立 `Paragraph` 物件來放置可見文字。段落亦可攜帶自訂標籤,當日後需要程式化定位或樣式時相當方便。 + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### 為什麼要使用標籤? + +標籤是隨 PDF 元素一起傳遞的中繼資料。之後可使用 `Document.FindObject()` 進行查詢,或讓下游 PDF 處理器依賴標籤來實作無障礙或索引功能。 + +## 以精確座標在 PDF 中定位文字 + +段落的預設放置位置是頁面邊距的左上角。若要將文字移至精確位置,只需在段落的標籤上設定 `Position` 屬性: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +座標單位為點(1 point = 1/72 inch)。原點 (0,0) 位於頁面左下角,這與大多數 PDF 渲染引擎的座標系統相同。調整 `X` 與 `Y` 數值即可符合您的版面需求。 + +定位完畢後,將段落加入頁面的集合中: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## 儲存 PDF 文件 + +最後,將記憶體中的 PDF 寫入檔案。您可以指定輸出路徑、格式,甚至加密選項。 + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +程式結束時,`output.pdf` 會包含一個頁面,文字 **Important note** 位於右上方附近 (X = 50, Y = 750)。使用任何 PDF 檢視器開啟檔案,即可驗證位置是否正確。 + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*Image alt text: Generated PDF document created with C# Aspose.Pdf showing positioned note* (includes primary keyword). + +## 完整、可執行的範例 + +將所有片段組合起來,以下是一個完整的主控台應用程式範例,您可以直接複製、建置並執行: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**預期輸出**(執行程式後): + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +開啟 `output.pdf` 後,會看到單一頁面,文字 **Important note** 已依您指定的座標定位。 + +## 常見變化與邊緣情況 + +| 情境 | 需要變更的地方 | 為什麼重要 | +|----------|----------------|----------------| +| **不同的頁面尺寸** | `pdfDocument.Pages.Add(PageSize.A5)` | 較小的頁面可減少檔案大小,且更適合行動裝置螢幕。 | +| **多筆備註** | 迴圈處理字串集合,為每筆建立 `Paragraph`,同時遞增 `Y` 座標。 | 可一次產生多筆類似備註的批次文件。 | +| **Unicode 字元** | 確保原始檔案以 UTF-8 儲存,並設定 `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf 原生支援 Unicode,但檔案編碼必須相符。 | +| **受密碼保護的 PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | 為機密備註加入安全保護。 | +| **高解析度輸出** | 在加入內容前,先設定 `pdfDocument.PageInfo.Width` 與 `Height` 為較大數值。 | 適用於列印大型格式 PDF。 | + +## 產品環境使用小技巧 + +* **重複使用 `Document` 實例**,在單一次請求內產生多份 PDF,可減少 GC 壓力。 +* **釋放物件**(`pdfDocument.Dispose()`),若在迴圈中大量建立文件時特別重要。 +* **驗證座標**:`Y` 值不能超過頁面高度,否則文字會被裁切。 +* **使用 `TextFragmentAbsorber`** 於日後依標籤(`/P`)抽取備註內容,若需要讀回文字時相當便利。 + +## 結論 + +您現在已掌握如何使用 Aspose.Pdf **建立 PDF 文件**、**新增空白頁面 PDF**、**在 PDF 中加入段落**、**加入備註 PDF**,以及 **以精確座標在 PDF 中定位文字**。完整範例示範了一套乾淨、可重複使用的工作流程,您可以將其延伸至發票、報表或任何文件自動化情境。 + +接下來,您可以探索以下相關主題,如 **在 PDF 中加入圖片**、**使用 Aspose.Pdf 建立表格**,或 **套用數位簽章**。這些主題皆基於本篇所介紹的核心概念,讓您能輕鬆應對更進階的 PDF 產生需求。 + +祝開發順利! + +## 接下來您可以學習什麼? + +以下教學與本篇內容緊密相關,能進一步深化您對 API 的運用,並提供更多實作範例與替代方案。 + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/hongkong/net/images-graphics/_index.md index 0fd1aa03ef..6a40b50c47 100644 --- a/pdf/hongkong/net/images-graphics/_index.md +++ b/pdf/hongkong/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Aspose.PDF Net 程式碼教學 ### [使用 Aspose.PDF .NET 在 PDF 中繪製透明形狀](./draw-transparent-shapes-aspose-pdf-net/) Aspose.PDF Net 程式碼教學 +### [使用 Aspose.PDF for .NET 在 C# 中設定 PDF 不透明度:完整指南](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +了解如何使用 Aspose.PDF for .NET 在 PDF 中設定不透明度,以控制圖形和文字的透明效果。 + ### [使用 Aspose.PDF for .NET 實現高效率的 PDF 影像識別](./master-image-identification-aspose-pdf-net/) 了解如何使用 Aspose.PDF for .NET 識別 PDF 中的灰階和 RGB 影像。本教學涵蓋安裝、影像擷取和效能技巧。 @@ -78,7 +81,7 @@ Aspose.PDF Net 程式碼教學 了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至您的 PDF 文件。本逐步指南涵蓋設定、實施和實際應用。 ### [如何使用 Aspose.PDF for .NET 將影像新增至 PDF:逐步指南](./add-images-to-pdfs-aspose-pdf-net/) -了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至您的 PDF。本指南介紹如何為現有 PDF 新增影像以及如何從 DICOM 檔案建立新影像。 +了解如何使用 Aspose.PDF for .NET 將影像無縫地新增至 PDF。本指南介紹如何為現有 PDF 新增影像以及如何從 DICOM 檔案建立新影像。 ### [如何使用 Aspose.PDF for .NET 為 PDF 新增影像頁首:逐步指南](./add-image-header-pdf-aspose-dotnet/) 透過本全面的逐步指南了解如何使用 Aspose.PDF for .NET 將影像標題新增至 PDF 文件。 diff --git a/pdf/hongkong/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hongkong/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..2e6ce45ffd --- /dev/null +++ b/pdf/hongkong/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 在 C# 中設定 PDF 透明度 – 只需幾行程式碼,即可學習如何調整描邊與填充的透明度。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: zh-hant +lastmod: 2026-08-08 +og_description: 快速在 C# 中設定 PDF 不透明度。本指南示範如何使用 Aspose.PDF 的圖形狀態 API 變更描邊與填充的透明度。 +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: 在 C# 中使用 Aspose.PDF 設定 PDF 透明度 – 步驟教學 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: 使用 Aspose.PDF 在 C# 中設定 PDF 透明度 – 完整指南 +url: /zh-hant/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中使用 Aspose.PDF 設定 PDF 不透明度 – 完整指南 + +如果您需要 **設定 PDF 不透明度** 於特定繪圖操作,本教學將示範如何使用 Aspose.PDF for .NET 完成。無論是製作浮水印、半透明覆蓋層,或是自訂圖形,您都能學到簡潔、可直接投入生產環境的做法。 + +在以下章節中,我們將從載入 PDF、編輯其圖形狀態、加入新的不透明度定義,到儲存結果,一步步說明。只需以下程式碼與簡短說明,即可完成,無需額外文件。 + +## 前置條件 + +開始之前,請確保您已具備: + +* .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.7 以上) +* 有效的 Aspose.PDF for .NET 授權(免費試用版可用於評估) +* 位於可讀寫資料夾中的輸入 PDF 檔案(`input.pdf`) +* Visual Studio 2022 或您慣用的 C# IDE + +## 第一步 – 載入 PDF 文件(Aspose.PDF for .NET) + +首要任務是開啟既有的 PDF。Aspose.PDF 以 `Document` 類別代表 PDF 檔案,讓您完整存取頁面、資源與低階物件。 + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*為什麼這很重要*:載入文件會建立一個記憶體模型,您可以安全地進行修改。`using` 陳述式會在完成後自動釋放檔案句柄。 + +## 第二步 – 取得要編輯的第一頁 + +不透明度是依頁面於資源字典中定義的。此處以第一頁為目標,若需批次處理,可遍歷 `doc.Pages`。 + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*為什麼這很重要*:每一頁都有自己的 `Resources` 集合,儲存圖形狀態、字型、影像等。編輯正確的頁面才能讓不透明度效果出現在預期位置。 + +## 第三步 – 開啟頁面資源字典以供編輯 + +Aspose.PDF 提供 `DictionaryEditor` 輔助工具,讓您在不破壞檔案結構的前提下操作低階 PDF 字典。 + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*為什麼這很重要*:直接編輯 PDF 的 COS(Content Object System)字典是注入自訂圖形狀態的唯一途徑。編輯器抽象化低階語法,同時保持 PDF 的有效性。 + +## 第四步 – 取得現有的 ExtGState 字典 + +**ExtGState**(外部圖形狀態)字典保存不透明度、混合模式、線寬等資訊。若不存在,當您新增條目時,Aspose.PDF 會自動建立。 + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*為什麼這很重要*:若沒有 `ExtGState` 條目,稍後在頁面內容串流中無法引用自訂不透明度。此步驟確保容器已存在。 + +## 第五步 – 建立具有目標不透明度的圖形狀態 + +圖形狀態是一組參數。對於不透明度,我們設定 `CA`(描邊不透明度)與 `ca`(填充不透明度)。同時設定 `BM`(混合模式)以控制透明像素與底層內容的互動方式。 + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*為什麼這很重要*:`CA` 與 `ca` 的取值範圍為 0(完全透明)至 1(完全不透明)。依需求調整這些數值即可得到所需的視覺效果。混合模式 `"Normal"` 為最常用,亦可嘗試 `"Multiply"` 或 `"Screen"` 以獲得藝術效果。 + +## 第六步 – 在 ExtGState 集合中註冊新的圖形狀態 + +每個圖形狀態必須有唯一名稱(例如 `GS0`)。我們將字典加入 `ExtGState` 集合,然後更新頁面的資源。 + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*為什麼這很重要*:透過命名(`GS0`),您可以在頁面內容串流中使用 `gs` 運算子引用它。若需多種不透明度層級,只要再建立額外條目(`GS1`、`GS2` …)即可。 + +## 第七步 – 將圖形狀態套用至繪圖指令(可選) + +若想立即對現有內容套用不透明度,必須編輯頁面的內容串流。以下示範使用新建的狀態繪製半透明矩形。 + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*為什麼這很重要*:`gs` 運算子(`SetGraphicsState`)告訴 PDF 渲染器在後續的繪圖指令中使用 `GS0` 定義的透明度值。`grestore`/`gsave` 配對確保其他頁面元素不受影響。 + +## 第八步 – 儲存已修改的 PDF + +最後,將更新後的文件寫回磁碟。 + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*為什麼這很重要*:儲存會完成所有變更、嵌入新的圖形狀態,產生任何檢視器(Adobe Acrobat、Chrome 等)皆能正確顯示設定透明度的 PDF。 + +### 預期結果 + +在 PDF 檢視器中開啟 `output.pdf`。您應該會看到一個紅色矩形,其邊框不透明度為 80%,填充不透明度為 40%,與背景內容平滑混合。其餘頁面保持不變。 + +## 常見變化與邊緣情況 + +| 情況 | 需要變更的地方 | 原因 | +|-----------|----------------|--------| +| **多層不透明度** | 建立額外的圖形狀態(`GS1`、`GS2` …)並設定不同的 `CA`/`ca` 值,於需要處使用 | 允許對不同元素進行細緻的控制 | +| **不同混合模式** | 在 `BM` 條目中使用 `"Multiply"`、`"Screen"`、`"Overlay"` 等取代 `"Normal"` | 產生藝術性的混合效果 | +| **套用於既有內容串流** | 在欲影響的繪圖運算子前插入 `SetGraphicsState` | 防止不相關物件被意外套用透明度 | +| **大型 PDF** | 使用 `foreach (Page p in doc.Pages)` 迴圈逐頁處理,避免一次載入整個檔案 | 提升效能並降低記憶體壓力 | +| **不存在 ExtGState** | 第 4 步的程式碼已會在缺少時自動建立,無需額外處理 | 確保字典已存在 | + +### 專業小技巧 + +當您加入大量自訂圖形狀態時,請保持命名一致(`GS0`、`GS1` …),並在註解區塊說明每個狀態的用途。這樣在協作專案中維護會更容易。 + +## 完整可執行範例 + +以下提供完整程式,您可以直接複製、貼上並執行。內容包含所有步驟、必要的 `using` 指示詞與說明註解。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +執行程式後, + +## 接下來該學什麼? + +以下教學與本指南緊密相關,能進一步擴展您對 API 的運用,並提供其他實作方式的範例。 + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..248a8fee0b 100644 --- a/pdf/hongkong/net/programming-with-forms/_index.md +++ b/pdf/hongkong/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,並新增表單欄位與頁面。 | +| [使用 Aspose.PDF 保存 PDF 文件 – 完整指南](./save-pdf-document-with-aspose-pdf-complete-guide/) |本完整指南說明如何使用 Aspose.PDF for .NET 將 PDF 文件儲存至檔案或串流。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/hongkong/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a64c8d4c48 --- /dev/null +++ b/pdf/hongkong/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 儲存 PDF 文件,學習如何新增 PDF 頁面、填寫 PDF 表單欄位,並在同一篇教學中建立帶表單欄位的 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: zh-hant +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 儲存 PDF 文件,了解如何新增 PDF 頁面、填寫 PDF 表單欄位,以及快速且可靠地建立含表單欄位的 + PDF。 +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: 使用 Aspose.PDF 保存 PDF 文件 – 逐步指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: 使用 Aspose.PDF 儲存 PDF 文件 – 完整指南 +url: /zh-hant/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose.PDF 保存 PDF 文件 – 完整指南 + +如果您需要 **保存包含互動式表單欄位的 PDF 文件**,本教學將一步步示範如何操作。您將會看到如何新增 PDF 頁面、建立 PDF 表單,以及填入 PDF 表單欄位——全部使用 Aspose.PDF for .NET。 + +在以下章節中,您將學會: + +* 向新 PDF 中加入多個頁面, +* 在第一頁建立文字方塊表單欄位, +* 在第二頁為同一欄位放置 widget 註解, +* 設定欄位的值(填入 PDF 表單欄位), +* 最後 **保存 PDF 文件** 到磁碟。 + +不需要任何外部工具;完整、可執行的程式碼已隨文提供。 + +## 前置條件 + +* .NET 6.0 或更新版本(程式碼同樣適用於 .NET Framework 4.7.2 以上)。 +* 有效的 Aspose.PDF for .NET 授權或免費評估金鑰。 +* Visual Studio 2022(或任何 C# IDE)。 + +加入 NuGet 套件: + +```bash +dotnet add package Aspose.PDF +``` + +## 如何新增 PDF 頁面 + +第一步是建立一個空的 PDF,並加入所需的頁面。先加入頁面再定義表單欄位,可確保座標布局正確。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*為什麼這很重要:* 每個 `Page` 物件代表一個可列印的畫布。提前加入頁面後,稍後定位表單元素時就能直接參照它們。 + +## 如何使用 Aspose.PDF 建立 PDF 表單 + +PDF 表單由 **欄位定義**(邏輯容器)與一或多個 **widget 註解**(視覺呈現)組成。範例在第一頁建立一個名為 **Comments** 的 `TextBoxField`。 + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*為什麼這很重要:* `Rectangle` 座標以點為單位(1 pt = 1/72 in)。請依設計需求調整數值。 + +## 填入 PDF 表單欄位 + +您可以在文件儲存前以程式方式設定欄位值,這就是 **填入 PDF 表單欄位** 的核心。 + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +如果您想稍後再填寫欄位(例如來自使用者輸入),只要在呼叫 `Save` 前將新字串指派給 `commentsField.Value` 即可。 + +## 為同一欄位在第二頁加入 widget 註解 + +widget 註解讓表單欄位在頁面上可見。加入第二個 widget 後,同一邏輯欄位會同時出現在兩個頁面,示範 **建立含表單欄位的 PDF** 跨頁顯示的做法。 + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*為什麼這很重要:* `Widgets` 集合可以容納任意數量的視覺呈現。使用者可以在任一頁面與欄位互動,輸入的值會保持同步。 + +## 將欄位附加至第一頁的註解集合 + +表單欄位必須加入頁面的註解集合,才能讓 PDF 閱讀器正確渲染。 + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## 保存 PDF 文件 + +現在表單已完整定義,您可以 **保存 PDF 文件** 到任意位置。 + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +當您在 Adobe Acrobat Reader 或其他 PDF 閱讀器中開啟 `output.pdf` 時,會看到第 1 頁有一個文字方塊,第 2 頁則有相同的方塊。無論在任一方塊輸入文字,都會更新同一個底層欄位。 + +## 完整、可執行範例 + +以下程式碼可直接貼到 Console 應用程式中執行。編譯後會產生本文所描述的 PDF,且不需要任何修改。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**預期結果:** 產生名為 `output.pdf` 的檔案,內含兩頁。第 1 頁顯示座標 (100, 600) 處的「Comments」文字方塊;第 2 頁則在 (100, 400) 顯示相同欄位,且預先填入「Enter your feedback here」。在任一頁面修改文字,重新儲存文件後,兩頁的內容會保持一致。 + +## 常見問題與邊緣案例處理 + +| 問題 | 解答 | +|----------|--------| +| *我可以為同一欄位加入多個 widget 嗎?* | 可以。將額外的 `WidgetAnnotation` 物件加入 `commentsField.Widgets` 即可。每個 widget 可放置於任意頁面。 | +| *如果我要設定欄位的外觀(字型、邊框、背景)該怎麼做?* | 使用 `commentsField.DefaultAppearance` 指定字型與顏色,並透過 `commentsField.Border` 屬性設定線條樣式。 | +| *如何讓欄位變成唯讀?* | 設定 `commentsField.ReadOnly = true;`。欄位仍會顯示值,但使用者無法編輯。 | +| *可以在 PDF 建立之後再填入欄位嗎?* | 可以。使用 `new Document("output.pdf")` 讀取已儲存的 PDF,透過 `pdfDocument.Form["Comments"]` 取得欄位,指派新 `Value`,再呼叫 `Save`。 | +| *如果 PDF 必須符合 PDF/A 以供保存呢?* | 在建構文件完成後,呼叫 `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` 再儲存。 | + +## 現場小技巧 + +* **專業提示:** 讓邏輯欄位名稱保持簡短且唯一;之後以程式填寫表單時會用到這個識別碼。 +* **注意事項:** 避免 widget 矩形重疊,重疊會在部分閱讀器產生渲染異常。 +* **效能說明:** 若在緊密迴圈中大量新增頁面或 widget,建議重複使用同一個 `Rectangle` 例項,僅改變其座標,以提升效能。 + +## 結論 + +現在您已掌握如何 **保存包含完整功能表單的 PDF 文件**、如何 **填入 PDF 表單欄位**,以及如何 **新增 PDF 頁面** 與 **建立含表單欄位的 PDF**,全部透過 Aspose.PDF for .NET 完成。完整範例示範了從文件建立到最終儲存的端對端工作流程。 + +接下來,您可以探索 **加入核取方塊**、**建立下拉清單**,或 **將表單平面化** 以供唯讀發佈等相關主題。這些功能皆建立在本指南所闡述的原理之上,能進一步擴充您的 PDF 自動化能力。 + +祝開發順利! + + +## 接下來該學什麼? + +以下教學與本指南的技巧緊密相關,能幫助您進一步深化應用。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,並在專案中探索不同實作方式。 + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/hongkong/net/programming-with-pdf-pages/_index.md index a0bb184ffa..c629063ac8 100644 --- a/pdf/hongkong/net/programming-with-pdf-pages/_index.md +++ b/pdf/hongkong/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Aspose.PDF for .NET 的「使用 PDF 頁面進行編程」文件提供了逐步 | [拆分至頁面](./split-to-pages/) |透過本綜合教程,使用 Aspose.PDF for .NET 輕鬆將 PDF 分割為單獨的頁面。包含逐步指南。 | | [更新 PDF 頁面尺寸](./update-dimensions/) |透過本全面的逐步指南,了解如何使用 Aspose.PDF for .NET 輕鬆更新 PDF 頁面尺寸。 | | [縮放至 PDF 文件中的頁面內容](./zoom-to-page-contents/) |在本綜合指南中了解如何使用 Aspose.PDF for .NET 縮放 PDF 文件中的頁面內容。根據您的特定需求增強您的 PDF 文件。 | +| [使用 Aspose 為 PDF 添加 Bates 編號 – 完整逐步指南](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) |使用 Aspose.PDF for .NET 為 PDF 添加 Bates 編號的完整逐步指南,簡單易於實作。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/hongkong/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..0c51fba8ff --- /dev/null +++ b/pdf/hongkong/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.Pdf 在 C# 中為 PDF 添加 Bates 編號。本教程亦示範如何新增空白頁 PDF 以及以程式方式產生 PDF。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: zh-hant +lastmod: 2026-08-08 +og_description: 使用 Aspose.Pdf 在 C# 中為 PDF 添加 Bates 編號。學習如何添加空白頁 PDF、以程式方式生成 PDF,並在幾分鐘內儲存最終文件。 +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: 使用 Aspose 為 PDF 添加 Bates 編號 – 完整 C# 教學 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: 使用 Aspose 為 PDF 添加 Bates 編號 – 步驟教學 +url: /zh-hant/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 使用 Aspose 為 PDF 添加 bates 編號 – 步驟指南 + +使用 Aspose.Pdf 為 PDF 添加 bates 編號一旦了解核心步驟就相當簡單。如果您還需要添加空白頁 PDF 或以程式方式產生 PDF,本指南將涵蓋所有需求。 + +在本教學中,您將會: + +* 從頭建立新的 PDF 文件。 +* 新增一個將容納 Bates 編號的空白頁 PDF。 +* 使用自訂前綴設定 Bates 編號工件。 +* 儲存 PDF,使編號顯示在產生的檔案上。 + +完成後,您將擁有一個完整的 C# 主控台應用程式,能產生包含 Bates 編號(如 **CASE‑1000**、**CASE‑1001** …)的 PDF——這是法律與電子發現工作流程的常見需求。 + +## 前置條件 + +* .NET 6.0 SDK 或更新版本(程式碼亦可於 .NET Framework 4.8 上執行)。 +* Visual Studio 2022 或任何相容 C# 的 IDE。 +* 有效的 Aspose.Pdf for .NET 授權(或免費評估金鑰)。 +* 具備基本的 C# 語法知識。 + +> **專業提示:** 若在未授權的情況下執行程式碼,Aspose 會在輸出 PDF 上加上小型浮水印。 + +## 步驟 1:設定專案並匯入 Aspose.Pdf + +建立新的主控台專案,並加入 Aspose.Pdf NuGet 套件: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +範例所需的 `using` 指示如下: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +這些命名空間讓您能存取稍後會使用的 `Document`、`Page` 與 `BatesNumberingArtifact` 類別。 + +## 步驟 2:新增空白頁 PDF + +Bates 編號必須附加於頁面上,因此我們先建立一個將接收編號工件的空白頁。 + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` 類別代表整個 PDF 檔案,而 `Pages.Add()` 會在文件的頁面集合末端插入一個新的空白頁。由於文件起始為空,此呼叫同時會建立第一頁。 + +## 步驟 3:設定 Bates 編號工件 + +現在我們定義 Bates 編號的外觀。`BatesNumberingArtifact` 允許您設定起始編號、前綴、後綴以及格式化選項。 + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**為何這很重要:** +將 `StartNumber` 設為 **1000** 符合一般法律案件檔案的慣例。`Prefix` 確保每個編號顯示為 **CASE‑1000**、**CASE‑1001** …,便於搜尋與排序。 + +## 步驟 4:將工件附加至頁面 + +必須將工件加入頁面的 `Artifacts` 集合,讓 Aspose 在儲存時於每一頁渲染它。 + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +當文件儲存時,Aspose 會自動在所有頁面重複此工件,並為每一後續頁面遞增編號。 + +## 步驟 5:(可選)新增其他頁面 + +若需要更多頁面,只需重複呼叫 `pdfDocument.Pages.Add()`。先前步驟中附加的 Bates 編號工件會自動出現在每個新頁面上。 + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## 步驟 6:儲存 PDF – 以程式方式產生 PDF + +最後,將文件寫入磁碟。此時 Bates 編號會被渲染至各頁面上。 + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**預期結果:** +開啟 *BatesNumberedDocument.pdf*,您會看到一個三頁的 PDF。每頁在右下角顯示 Bates 編號: + +* 第 1 頁 → **CASE‑1000** +* 第 2 頁 → **CASE‑1001** +* 第 3 頁 → **CASE‑1002** + +由於工件已附加於頁面集合,編號會自動遞增。 + +## 完整、可執行範例 + +將上述所有步驟整合起來,以下是一個完整的主控台程式,您可以直接複製、貼上並執行: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +使用 `dotnet run` 執行程式。執行完畢後,於桌面找到檔案並驗證 Bates 編號。 + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## 常見問題與邊緣案例 + +### 如果需要不同的字型或位置該怎麼辦? + +`BatesNumberingArtifact` 提供 `FontSize`、`FontColor`、`HorizontalAlignment`、`VerticalAlignment` 等屬性。例如: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### 如何排除特定頁面不編號? + +為您想編號的頁面建立單獨的 `BatesNumberingArtifact`,僅將其加入那些頁面。未附加工件的頁面將保持不編號。 + +### 這能套用於已有的 PDF 嗎? + +可以。將 `new Document()` 改為載入現有檔案: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +然後將工件附加至目標頁面並儲存。 + +## 結論 + +您現在已了解如何使用 Aspose.Pdf **為 PDF 添加 bates 編號**、如何 **新增空白頁 PDF**,以及如何在乾淨、可重用的 C# 解決方案中 **以程式方式產生 PDF**。此方法支援任意頁數、自訂前綴與樣式選項,讓您完整掌控最終文件。 + +接下來您可以探索以下步驟: + +* Use **create pdf as + +## 接下來該學什麼? + +以下教學涵蓋與本指南緊密相關的主題,並在此基礎上延伸。每個資源皆提供完整可執行的程式碼範例與步驟說明,協助您精通其他 API 功能,並在專案中探索替代實作方式。 + +- [如何使用 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-empty-page-end-pdf-aspose-pdf-net/) +- [使用 Aspose.PDF 建立 PDF 文件 – 添加頁面、圖形與儲存](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 413f8cc4cf..2c4061f206 100644 --- a/pdf/hongkong/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hongkong/net/programming-with-security-and-signatures/_index.md @@ -36,6 +36,8 @@ | [在 C# 中檢查 PDF 簽章 – 如何讀取已簽署的 PDF 檔案](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) |了解如何使用 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 檔案。逐步指南協助您恢復文件完整性。 | +| [在 C# 中驗證 PDF 簽章 – 完整指南(使用 Aspose.PDF)](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) |了解如何使用 Aspose.PDF for .NET 在 C# 中完整驗證 PDF 簽章的步驟與技巧。 | +| [使用 Aspose.PDF 驗證 PDF 數位簽章的教學](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hongkong/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/hongkong/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..b10bd71101 --- /dev/null +++ b/pdf/hongkong/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-08-08 +description: PDF 簽署教學:示範如何使用簽署驗證選項與 C# 程式碼驗證 PDF 數位簽章 – 快速一步步指南 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: zh-hant +lastmod: 2026-08-08 +og_description: PDF 簽名教學將指引您使用 Aspose.PDF 驗證 PDF 數位簽名。了解如何設定簽名驗證選項並檢查結果。 +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF 簽署教學 – 在 C# 中驗證 PDF 數位簽章 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: PDF 簽名教學:使用 Aspose.PDF 驗證 PDF 數位簽名 +url: /zh-hant/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf 簽名教學 – 在 C# 中驗證 PDF 數位簽章 + +如果您需要一個 **pdf signature tutorial**,能完整示範如何驗證 PDF 數位簽章,本指南將為您提供所需資訊。您將看到如何載入已簽署的 PDF、設定 **signature validation options**、執行驗證,並顯示結果——全部以清晰、可執行的 C# 程式碼示範。 + +在處理合約、發票或任何具法律效力的文件時,驗證 PDF 簽章是必不可少的。本教學會逐步說明完整工作流程,讓您能將簽章檢查整合到自己的應用程式中,而不必猜測需要呼叫哪些 API。 + +## 您將完成的工作 + +完成本教學後,您將能: + +* 使用 Aspose.PDF 載入已簽署的 PDF 檔案。 +* 設定 **signature validation options**(例如雜湊演算法)。 +* 呼叫 `Validate` 方法以 **validate pdf digital signature**。 +* 在主控台輸出清晰的「Signature valid」訊息。 + +**先決條件** + +* 已安裝 .NET 6.0(或更新版本)。 +* Visual Studio 2022(或任何 C# IDE)。 +* Aspose.PDF for .NET NuGet 套件(`Aspose.Pdf`)。 + +> **專業提示:** 使用最新的 Aspose.PDF 版本,可取得對 SHA‑3 演算法的支援以及更佳的驗證效能。 + +## 步驟 1:安裝 Aspose.PDF NuGet 套件 + +在 Visual Studio 中開啟您的專案,於 Package Manager Console 執行以下指令: + +```bash +Install-Package Aspose.Pdf +``` + +此套件會加入 `Aspose.Pdf` 命名空間,內含 `Document` 類別與您將使用的簽章相關 API。 + +## 步驟 2:載入已簽署的 PDF 文件 + +以下第一行程式碼會建立一個代表磁碟上 PDF 檔案的 `Document` 物件。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*為什麼重要:* `Document` 類別會解析 PDF 結構,並公開 `Signatures` 集合,該集合保存所有嵌入的數位簽章。若檔案路徑不正確,會拋出例外,因此請先確認路徑正確後再執行程式。 + +## 步驟 3:設定簽章驗證選項 + +您可以使用 `SignatureValidationOptions` 類別自訂驗證流程。本教學示範設定雜湊演算法,您亦可設定憑證撤銷檢查、時間戳驗證等。 + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*為什麼重要:* 雜湊演算法必須與簽章建立時使用的演算法相同。若演算法不匹配,即使簽章本身正確,驗證也會失敗。 + +## 步驟 4:驗證第一個簽章 + +大多數 PDF 只包含單一簽章,但 `Signatures` 集合可以容納多個。本範例驗證第一筆 (`[0]`)。`Validate` 方法會回傳布林值,表示驗證是否成功。 + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*邊緣情況:* 若 PDF 沒有任何簽章,`document.Signatures.Count` 會是 `0`,存取 `[0]` 會拋出 `IndexOutOfRangeException`。可使用以下簡易檢查避免此問題: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## 步驟 5:顯示驗證結果 + +最後,將結果寫入主控台。此步驟示範 **check pdf signature** 的結果,以人類可讀的格式呈現。 + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +執行程式後,您應該會看到: + +``` +Signature valid: True +``` + +若簽章受損、使用不支援的演算法,或憑證已撤銷,輸出將為 `False`。 + +## 完整、可執行的範例 + +將下列程式碼複製到新的主控台專案(`dotnet new console`),並將 `YOUR_DIRECTORY/signed.pdf` 替換為您已簽署 PDF 的實際路徑。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### 預期輸出 + +``` +Signature valid: True +``` + +若簽章驗證失敗,主控台會顯示 `Signature valid: False`。 + +## 常見問題與疑難排解 + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## 後續步驟 + +* 探索 **validate pdf signature** 多簽章的寫法,透過遍歷 `document.Signatures` 進行驗證。 +* 結合本教學與 **check pdf signature**,於 Web API 中即時驗證上傳的合約。 +* 深入了解 **signature validation options**,如 CRL/OCSP 檢查、時間戳驗證與自訂信任儲存庫。 + +現在您已掌握完整的 **pdf signature tutorial**,了解如何使用 Aspose.PDF 在 C# 中 **validate pdf digital signature**。歡迎依需求自行調整程式碼、加入日誌,或整合至更大型的文件處理流程。祝開發順利! + +## 接下來您可以學習什麼? + +以下教學與本指南緊密相關,能進一步擴充您對 API 的運用與實作方式。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助您在專案中快速上手。 + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hongkong/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a9afa8b8bf --- /dev/null +++ b/pdf/hongkong/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,259 @@ +--- +category: general +date: 2026-08-08 +description: 使用 Aspose.PDF 在 C# 中驗證 PDF 簽名。了解如何驗證 PDF 數位簽章,並僅用幾行程式碼列出 PDF 簽名。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: zh-hant +lastmod: 2026-08-08 +og_description: 使用 Aspose.PDF 在 C# 中驗證 PDF 簽名。本指南將教您如何驗證 PDF 數位簽名、列出 PDF 簽名,並有效處理受損的簽名。 +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: 驗證 PDF 簽名於 C# – 快速 Aspose.PDF 教學 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: 使用 Aspose.PDF 在 C# 中驗證 PDF 簽名 – 完整指南 +url: /zh-hant/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中使用 Aspose.PDF 驗證 PDF 簽名 – 完整指南 + +如果您需要在 .NET 應用程式中 **驗證 PDF 簽名**,本指南將向您展示使用 Aspose.PDF 的簡潔方法。您將學會如何 **驗證數位簽名 PDF**、**列出 PDF 簽名**,以及僅用幾行程式碼偵測受損的簽名。 + +本教學涵蓋從安裝函式庫到處理未簽名文件或加密 PDF 等邊緣案例的所有內容。完成後,您將能將簽名驗證整合至任何 C# 專案,確保收到的 PDF 檔案的真實性。 + +**先決條件** + +- .NET 6.0 或更新版本(此程式碼亦可在 .NET Framework 4.6+ 上執行)。 +- 具備 C# 與 Visual Studio(或您偏好的任何 IDE)的基本知識。 +- 擁有 Aspose.PDF for .NET 授權(免費試用版可用於評估)。 + +如果您符合以上條件,即可開始驗證 PDF 簽名。 + +## 驗證 PDF 簽名 – 設定專案 + +1. **新增 Aspose.PDF NuGet 套件** + 開啟套件管理員主控台並執行: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **匯入所需的命名空間** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## 載入 PDF 文件 + +第一個功能步驟是開啟您想要檢查的 PDF。Aspose.PDF 會將檔案讀入記憶體,讓您能查詢其簽名。 + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **為什麼這很重要** – 在 `using` 區塊中載入文件可確保檔案句柄及時釋放,避免長時間執行的服務出現檔案鎖定問題。 + +## 列出 PDF 簽名 + +在驗證簽名之前,您可能想知道文件中有多少簽名。此步驟示範 **列出 PDF 簽名** 的功能。 + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**說明** + +- `document.Signatures` 會回傳 `Signature` 物件的集合。 +- `Count` 告訴您有多少個簽名。 +- 每個 `Signature` 會公開如 `Id`、`SignatureType`、`Reason` 等中繼資料,這對稽核日誌很有幫助。 + +**邊緣情況** – 若 PDF 沒有簽名,`Count` 會是 `0`,迴圈不會執行。您可以優雅地處理此情況: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## 驗證數位簽名 PDF – 偵測受損簽名 + +既然您已能列舉簽名,核心任務是 **驗證 PDF 簽名** 的完整性。Aspose.PDF 提供 `IsCompromised` 屬性,當簽名的加密雜湊不再與文件內容匹配時,會回傳 `true`。 + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**為什麼這會有效** + +- `Signature.IsCompromised` 會使用內嵌的憑證鏈執行完整的加密驗證。 +- `Any` LINQ 運算子會在第一個受損簽名處停止,使檢查即使在簽名眾多的文件中也保持高效。 + +### 個別處理多個簽名 + +若您需要知道是哪一個特定簽名失敗,請改為使用迴圈而非 `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**小技巧**:將驗證結果與 `sig.Id` 一同儲存至資料庫,以供日後鑑識分析。 + +## 輸出結果並考慮邊緣案例 + +以下是一個完整、可執行的程式範例,結合上述步驟。它會載入 PDF、列出所有簽名、驗證它們,並印出清晰的結果。 + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**預期輸出(有效簽名)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**預期輸出(受損簽名)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### 常見陷阱與避免方法 + +| 陷阱 | 解決方案 | +|------|----------| +| PDF 受密碼保護。 | 在存取 `Signatures` 前,使用 `document.Encrypt.Decrypt(password)` 傳入密碼。 | +| 未設定 Aspose.PDF 授權。 | 使用 `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` 以避免評估水印。 | +| 大型 PDF 造成高記憶體使用。 | 改以串流模式處理檔案(`Document.Load(stream)`),而非一次載入整個檔案。 | + +## 結論 + +您現在已了解如何在 C# 中使用 Aspose.PDF **驗證 PDF 簽名**、**驗證數位簽名 PDF**,以及如何 **列出 PDF 簽名** 以供報告或稽核使用。完整範例示範了載入文件、列舉其簽名、檢查每個簽名是否受損,並處理常見的邊緣案例。 + +您可以進一步探索以下步驟: + +- **驗證時間戳記 token**,以確保簽名在憑證過期前建立。 +- **擷取簽署者憑證**(`sig.Certificate`)以進行自訂信任儲存區驗證。 +- **與 ASP.NET Core 整合**,自動拒絕未通過驗證的上傳 PDF。 + +歡迎嘗試多簽名、客製化驗證邏輯或其他 PDF 函式庫。若您覺得本指南有幫助,請與同事分享或在留言中加入您的技巧。 + +## 接下來該學什麼? + +以下教學涵蓋與本指南緊密相關的主題,建立在此處示範的技術之上。每個資源皆提供完整可執行的程式碼範例與逐步說明,協助您精通更多 API 功能,並在專案中探索替代實作方式。 + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/hongkong/net/text-operations/_index.md index 6baab3e37a..ee78675d56 100644 --- a/pdf/hongkong/net/text-operations/_index.md +++ b/pdf/hongkong/net/text-operations/_index.md @@ -162,7 +162,8 @@ Aspose.PDF Net 程式碼教學 Aspose.PDF Net 程式碼教學 ### [使用 Aspose.PDF for .NET 設定標籤的 PDF 中的文字樣式 |無障礙美觀 PDF 建立指南](./style-text-tagged-pdfs-aspose-pdf-net/) -了解如何使用 Aspose.PDF for .NET 設定標記 PDF 文件中的文字樣式。本指南涵蓋安裝、技術和實際應用,以增強可訪問性。 + +### [使用 Aspose.Pdf.AI 摘要 PDF 的指南](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) ## 其他資源 diff --git a/pdf/hongkong/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/hongkong/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..b0e376c018 --- /dev/null +++ b/pdf/hongkong/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: 如何使用 Aspose.Pdf.AI 摘要 PDF – 學習如何利用 AI 摘要 PDF、生成 PDF 摘要,並將摘要另存為 PDF。完整程式碼與最佳實踐。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: zh-hant +lastmod: 2026-08-08 +og_description: 如何使用 Aspose.Pdf.AI 摘要 PDF。本教學示範如何以 AI 摘要 PDF、產生 PDF 摘要,並以幾行 C# 程式碼將摘要儲存為 + PDF。 +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: 如何使用 Aspose.Pdf.AI 摘要 PDF – 逐步指南 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: 如何使用 Aspose.Pdf.AI 摘要 PDF – 指南 +url: /zh-hant/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Aspose.Pdf.AI 摘要 PDF – 教學指南 + +如果您需要快速且可靠地 **如何摘要 PDF**,可以讓 AI 模型來處理繁重的工作。本教學會完整示範如何使用 AI 摘要 PDF、產生 PDF 摘要,並使用 Aspose.Pdf.AI SDK for .NET 將摘要儲存為 PDF。您將獲得一個完整、可執行的範例,並說明每一行程式碼,讓您能將此解決方案套用到自己的專案。 + +本指南涵蓋: + +* 準備來源資料夾與 API 金鑰 +* 建立與模型溝通的 `OpenAIClient` +* 設定摘要選項,如 temperature 與文件路徑 +* 建構 `SummaryCopilot` 並非同步取得摘要文字 +* 將產生的摘要儲存回 PDF 檔案 + +不需要除 OpenAI 端點之外的其他外部服務,且程式碼相容於 .NET 6+ 與 Aspose.Pdf.AI 23.7(或更新版本)。 + +## 前置條件 + +* **.NET 6 SDK**(或任何更新的 .NET 版本) +* **Aspose.Pdf.AI for .NET** – 透過 NuGet 安裝:`dotnet add package Aspose.Pdf.AI` +* 具備存取欲使用模型之權限的 **OpenAI API 金鑰**(例如 `gpt‑4o`) +* 一個您想要摘要的 PDF 檔案(範例使用 `SampleDocument.pdf`) + +請確保您在 `dataDirectory` 中指定的資料夾已存在,且應用程式具備讀寫權限。 + +## 第 1 步:設定專案結構 + +建立一個 console 專案(或將程式碼整合至任何現有的 .NET 應用程式)。最小的 `Program.cs` 如下: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### 為何此結構很重要 + +* **`await using`** 會自動釋放 `OpenAIClient`,關閉 HTTP 連線。 +* **`Path.Combine`** 產生與作業系統無關的路徑,避免在 Windows 與 Linux 上出現錯誤。 +* **Temperature** 控制創意程度;`0.5` 會產生平衡且具事實性的摘要。 +* **`GetSummaryAsync`** 回傳純文字,而 **`SaveSummaryAsync`** 會建立保留字型與版面配置的正式 PDF。 + +## 第 2 步:瞭解摘要選項 + +`OpenAISummaryCopilotOptions` 類別讓您微調摘要流程: + +| 選項 | 目的 | 典型值 | +|--------|---------|----------------| +| `WithTemperature(double)` | 控制隨機性。`0.0` = 確定性,`1.0` = 高度創意。 | `0.3‑0.7`(適用於商業文件) | +| `WithDocument(string)` | 來源 PDF 的路徑。必須是可讀取的檔案。 | 任何絕對或相對路徑 | +| `WithPrompt(string)` *(optional)* | 自訂提示詞以指導模型。 | 「以 150 個字總結關鍵發現。」 | + +如果您有 **大型 PDF**(超過 10 MB 或頁數眾多),建議先將文件切成較小的區塊再進行摘要,以避免 token 限制錯誤。SDK 不會自動切塊;您可以使用 `Aspose.Pdf` 的 `PdfDocument` 來抽取頁面,逐一餵入。 + +## 第 3 步:執行程式碼並驗證輸出 + +1. 將 `SampleDocument.pdf` 放入先前設定的 `Data` 資料夾。 +2. 將 `"YOUR_API_KEY"` 替換為您的實際 OpenAI 金鑰。 +3. 執行 `dotnet run`。 + +您應該會在主控台看到兩個區段: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +使用任何 PDF 檢視器開啟 `Summary_out.pdf`——裡面會包含相同的摘要文字,且使用預設字型排版。此 PDF 完全可搜尋,因為 SDK 會將文字嵌入為標準 PDF 頁面。 + +## 第 4 步:常見變化與邊緣案例處理 + +### 僅摘要文件的特定部分 + +如果您需要 **使用 AI 摘要 PDF** 的特定章節,請先抽取該範圍: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +然後將 `WithDocument` 指向 `Chapter5.pdf`。 + +### 調整摘要長度 + +您可以透過加入自訂提示詞來影響長度: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### 處理 API 錯誤 + +網路波動或配額限制會拋出 `Aspose.Pdf.AI.Exceptions.AIException`。請將呼叫包在 `try / catch` 區塊中: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### 以自訂版面儲存摘要 + +`SaveSummaryAsync` 只寫入純文字。若要為 PDF 加上樣式(如標題、頁首或品牌標誌),請建立新的 `PdfDocument` 並手動插入摘要: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## 第 5 步:效能建議與最佳實踐 + +* **重複使用 `OpenAIClient`** 於同一個程序中執行多次摘要——建立客戶端成本低,但重用底層的 `HttpClient` 可減少 socket 耗盡。 +* **快取摘要** 若來源 PDF 未變更;您可以將文字存入資料庫,省去再次呼叫 API。 + +## 接下來該學什麼? + +以下教學與本指南所示技術緊密相關,並提供完整可執行的程式碼範例與逐步說明,協助您精通更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [如何使用 Aspose.PDF for .NET 提取與儲存特定 PDF 頁面 - 完整指南](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [如何使用 Aspose.PDF .NET 提取與儲存 PDF 附件 - 完整指南](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [如何使用 Aspose.PDF .NET 將 HTML 轉換為 PDF - 完整指南](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/conversion-export/_index.md b/pdf/hungarian/net/conversion-export/_index.md index c01e9b2439..02e0814321 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-be az Aspose.PDF használatával – lépésről lépésre útmutató](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Ismerje meg, hogyan menthet PDF fájlokat HTML formátumba az Aspose.PDF .NET segítségével lépésről lépésre útmutatóval. + ### [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-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/hungarian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..4853fc6bf6 --- /dev/null +++ b/pdf/hungarian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-08 +description: PDF mentése HTML-ként az Aspose.PDF használatával C#-ban. Tanulja meg, + hogyan konvertálja a PDF-et HTML-re, hagyja ki a raszteres képeket, és kezelje a + gyakori szélhelyzeteket. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: hu +lastmod: 2026-08-08 +og_description: Mentse a PDF-et HTML-ként az Aspose.PDF segítségével. Ez az útmutató + megmutatja, hogyan konvertálhatja a PDF-et HTML-re, hogyan hagyhatja ki a raszteres + képeket, és hogyan kerülheti el a gyakori hibákat. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: PDF mentése HTML-ként az Aspose.PDF segítségével – teljes C# útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: PDF mentése HTML-ként az Aspose.PDF segítségével – lépésről‑lépésre útmutató +url: /hu/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF mentése HTML-ként az Aspose.PDF segítségével – lépésről‑lépésre útmutató + +Ha gyorsan **PDF-et HTML-ként szeretne menteni**, ez az útmutató pontosan megmutatja, hogyan teheti ezt meg az Aspose.PDF for .NET segítségével. Akár dokumentum‑megjelenítő webalkalmazást épít, akár jelentéseket exportál SEO‑barát indexeléshez, egy teljes, futtatható megoldást fog látni, amely a PDF-et HTML-re konvertálja, miközben finomhangolt vezérlést biztosít a raszteres képek felett. + +Az alapfeladat mellett bemutatjuk az **aspose pdf html conversion** beállításokat is, amelyek lehetővé teszik a raszteres képek kihagyását, a CSS kezelésének módosítását, és a nagy dokumentumok hatékony kezelését. A útmutató végére egy önálló programot kap, amelyet bármely .NET projektbe beilleszthet. + +## Előfeltételek + +* .NET 6.0 SDK vagy újabb (a kód működik .NET Core és .NET Framework esetén is) +* Visual Studio 2022 vagy bármely C#‑ot támogató IDE +* Aspose.PDF for .NET licenc (az ingyenes próba a kiértékeléshez elegendő) +* Egy `report.pdf` nevű PDF fájl, amelyet a kódból elérhető mappában helyezzen el + +A `Aspose.Pdf`-n kívül nincs szükség további NuGet csomagokra. + +## 1. lépés: Az Aspose.PDF NuGet csomag telepítése + +Nyissa meg a terminált a projekt mappájában, és futtassa: + +```bash +dotnet add package Aspose.Pdf +``` + +A csomag hozzáadja az `Aspose.Pdf` névteret, amely tartalmazza a `Document` osztályt és a `HtmlSaveOptions` típust, amelyet a **convert pdf to html** műveletekhez használnak. + +## 2. lépés: Konzolos projekt létrehozása és using direktívák hozzáadása + +Hozzon létre egy új konzolos alkalmazást, ha még nincs: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Ezután nyissa meg a `Program.cs`-t, és adja hozzá a szükséges névtereket: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Ezek a direktívák hozzáférést biztosítanak a core PDF API-hoz és a HTML mentési beállításokhoz, amelyek szabályozzák az **aspose convert pdf html** folyamatot. + +## 3. lépés: A PDF dokumentum betöltése + +Az első műveleti sor beolvassa a forrás PDF-et egy `Aspose.Pdf.Document` objektumba. Ez az objektum a teljes PDF fájlt memóriában reprezentálja, és metódusokat biztosít a mentéshez, szerkesztéshez és a tartalom kinyeréséhez. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Miért fontos*: A dokumentum egyszeri betöltése előre látható memóriakezelést biztosít, különösen nagy PDF-ek esetén. Ha a fájl nem található, az Aspose `FileNotFoundException`-t dob, ezért ellenőrizze, hogy az útvonal helyes. + +## 4. lépés: HTML mentési beállítások konfigurálása + +A `HtmlSaveOptions` lehetővé teszi a PDF konvertálásának finomhangolását. Ebben az útmutatóban kihagyjuk a raszteres képeket, hogy a kimenet könnyű legyen, de szükség esetén módosíthatja a módot `EmbedAll`-ra. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Fontos pontok**: + +* `RasterImagesSavingMode.Skip` azt mondja az Aspose-nak, hogy hagyja figyelmen kívül a bitmap képeket (JPEG, PNG) a konvertálás során. Ideális, ha a forrás PDF szkennelt oldalakat tartalmaz, amelyeket nem szükséges megjeleníteni a HTML nézetben. +* Átválthat `EmbedAll` vagy `External` módra, ha a képeket külön fájlokként szeretné menteni. +* A `ResourcesFolder` tulajdonság csak akkor releváns, ha a képek külsőleg vannak mentve. + +## 5. lépés: Dokumentum mentése HTML-ként + +Most a konfigurált beállításokkal írja a HTML fájlt a lemezre. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +A hívás befejezése után a `report.html` tartalmazza a szöveges tartalmat, a vektorgrafikákat és az eredeti PDF elrendezését, de raszteres képek nélkül. Megnyithatja a fájlt egy böngészőben az eredmény ellenőrzéséhez. + +## Várt kimenet + +Amikor megnyitja a `report.html`-t Chrome-ban vagy Edge-ben, a következőket kell látnia: + +* Minden címsor, bekezdés és vektorgrafika helyesen jelenik meg. +* Nincsenek `` tagek raszteres képekhez (kihagyásra kerülnek a `Skip` mód miatt). +* Tiszta, minimális CSS, akár beágyazott, akár külön stíluslapban, a választott beállítástól függően. + +Ha meg szeretné erősíteni, hogy a képek kihagyásra kerültek, ellenőrizze az oldal forrását (`Ctrl+U`). Nem talál `` bejegyzéseket. + +## 6. lépés: Gyakori szélhelyzetek kezelése + +### 6.1 Nagy PDF-ek (> 100 MB) + +Nagyon nagy fájlok esetén engedélyezze a streaminget a memória terhelés csökkentése érdekében: + +```csharp +htmlOpts.Streaming = true; +``` + +A streaming közvetlenül a lemezre írja a HTML darabokat, megakadályozva, hogy a teljes dokumentum a memóriában legyen. + +### 6.2 Jelszóval védett PDF-ek + +Ha a forrás PDF titkosított, adja meg a jelszót a mentés előtt: + +```csharp +doc.Decrypt("yourPassword"); +``` + +A mentés megkísérlése feloldás nélkül `InvalidPasswordException`-t dob. + +### 6.3 Unicode karakterek + +Az Aspose.PDF automatikusan beágyazza a Unicode betűtípusokat, de kényszeríthet egy konkrét betűtípust a konzisztens megjelenítéshez: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Egyedi fájlnevezés több oldalhoz + +Ha minden PDF oldalt külön HTML fájlként szeretne, állítsa be: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Ez létrehozza a `report_page_1.html`, `report_page_2.html`, stb. fájlokat, amelyek hasznosak lehetnek a webalkalmazások lapozásához. + +## Teljes, futtatható példa + +Az alábbiakban a teljes program látható, amely tartalmazza a megbeszélt összes lépést. Másolja be a `Program.cs`-be, állítsa be az útvonalakat, és futtassa a `dotnet run` parancsot. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Ellenőrzés**: A futtatás után a konzol kiírja a sikerüzenetet. Nyissa meg a generált HTML fájlt egy böngészőben, hogy megerősítse, a szöveg és a vektorgrafikák helyesen jelennek meg, és a raszteres képek kihagyásra kerülnek. + +## Profi tippek és buktatók + +* **Pro tip**: Ha később szüksége van a raszteres képekre, változtassa a `RasterImagesSavingMode`-ot `External`-ra, és állítsa be a `ResourcesFolder`-t. Ez egy `images` almappát hoz létre a kinyert bitmapekkel. +* **Figyeljen**: Az alapértelmezett `Skip` mód használata olyan PDF-eken, amelyek nagymértékben szkennelt képekre támaszkodnak, üres területeket eredményez, ahol a képeknek lennie kell. Mindig teszteljen egy reprezentatív mintával. +* **Teljesítmény tip**: Egy `HtmlSaveOptions` példány többszöri újrahasználata több dokumentum esetén csökkenti az objektum‑létrehozási költséget kötegelt konverziók során. +* **Verzió ellenőrzés**: A bemutatott API az Aspose.PDF for .NET 23.9-es és újabb verzióval működik. Korábbi verziók esetén a `HtmlSaveOptions.RasterImagesSavingMode` kicsit más enum névvel rendelkezhet. + +## Következtetés + +Most már tudja, hogyan **PDF-et HTML-ként menthet** az Aspose.PDF segítségével, hogyan szabályozhatja a raszteres képek kezelését, és hogyan kezelheti a tipikus kihívásokat, mint a nagy fájlok, a jelszóvédelem és az oldalankénti HTML kimenet. Ez a teljes megoldás lehetővé teszi, hogy magabiztosan integrálja a PDF‑HTML konverziót bármely C# alkalmazásba. + +### Mi a következő? + +* Fedezze fel az **aspose pdf html conversion** lehetőségeit betűtípusok beágyazásához és a CSS testreszabásához. +* Kombinálja ezt a konverziót egy web API-val, hogy igény szerint szolgáltassa a HTML-t. +* Próbálja ki a fordított irányt – **convert pdf to html**, majd vissza PDF-re – a körkörös konverzió pontosságának ellenőrzéséhez. + +Nyugodtan kísérletezzen a beállításokkal, és ossza meg eredményeit a megjegyzésekben vagy az Aspose fórumokon. Boldog kódolást! + +## Mit érdemes legközelebb 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ítsen elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeiben. + +- [PDF konvertálása HTML-re .NET-ben az Aspose.PDF használatával képek mentése nélkül](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [PDF‑HTML konverzió Aspose.PDF .NET‑vel: képek mentése külső PNG‑ként](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [PDF konvertálása HTML-re egyedi kép‑URL‑ekkel az Aspose.PDF .NET‑vel: átfogó útmutató](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/hungarian/net/digital-signatures/_index.md index 7f9a258004..955661744f 100644 --- a/pdf/hungarian/net/digital-signatures/_index.md +++ b/pdf/hungarian/net/digital-signatures/_index.md @@ -53,6 +53,9 @@ Ismerje meg, hogyan ellenőrizheti a digitális aláírásokat PDF fájlokban az ### [PDF aláírás ellenőrzése C#-ban – Teljes útmutató a digitális aláírás ellenőrzéséhez PDF-ben](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) Ismerje meg, hogyan ellenőrizheti a PDF digitális aláírását C#-ban az Aspose.PDF for .NET segítségével, lépésről lépésre útmutatóval. +### [Hogyan validáljuk a PDF-et az Aspose.PDF segítségével – ellenőrizze a PDF aláírás érvényességét C#-ban](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Ismerje meg, hogyan ellenőrizheti egy PDF aláírásának érvényességét C#-ban az Aspose.PDF használatával. + ### [PDF dokumentum betöltése C# – Konvertálás PDF/X‑4 formátumba és aláírások listázása](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Ismerje meg, hogyan tölthet be PDF-et C#-ban, konvertálhatja PDF/X‑4-re, és listázhatja a benne lévő aláírásokat az Aspose.PDF for .NET használatával. diff --git a/pdf/hungarian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/hungarian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..37769bcebd --- /dev/null +++ b/pdf/hungarian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Hogyan validáljuk a PDF-et az Aspose.PDF segítségével, és ellenőrizzük + a PDF digitális aláírását. Kövesse ezt a lépésről‑lépésre útmutatót a PDF aláírás + gyors ellenőrzéséhez. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: hu +lastmod: 2026-08-08 +og_description: Hogyan validáljuk a PDF-et az Aspose.PDF segítségével. Tanulja meg, + hogyan ellenőrizze a PDF digitális aláírását és az aláírás érvényességét néhány + C# sorban. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Hogyan validáljuk a PDF-et – PDF-aláírás érvényességének ellenőrzése Aspose.PDF + segítségével C#-ban +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Hogyan validáljuk a PDF-et az Aspose.PDF segítségével – PDF-aláírás érvényességének + ellenőrzése C#‑ban +url: /hu/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan ellenőrizhetünk PDF-et az Aspose.PDF segítségével – PDF aláírás érvényességének ellenőrzése C#-ban + +Ha **hogyan ellenőrizhetünk PDF** fájlokat, amelyek digitális aláírásokat tartalmaznak, ez a bemutató egy teljes megoldást mutat be. Megtanulod, hogyan tölts be egy PDF-et, hogyan hozd létre a tanúsítvány‑validátort, és hogyan ellenőrizd a pdf aláírás érvényességét az Aspose.PDF for .NET segítségével. + +A PDF digitális aláírásának ellenőrzése gyakori követelmény a megfelelőség, a számlázás és a biztonságos dokumentumcsere esetén. A útmutató végére magabiztosan meg tudod erősíteni, hogy egy aláírt PDF megbízható-e, és megérted, hogyan kezeld a tipikus széljegyeket, például a hiányzó tanúsítványokat vagy a több aláírást. + +## Előfeltételek + +Mielőtt elkezdenéd, győződj meg róla, hogy a következők rendelkezésre állnak: + +- .NET 6.0 vagy újabb telepítve +- Visual Studio 2022 vagy bármilyen C#‑ot támogató szerkesztő +- **Aspose.PDF for .NET** licencelt példány (az ingyenes próbaverzió elegendő a kiértékeléshez) +- Egy aláírt PDF fájl (`signed.pdf`) és, ha az aláírás egy privát CA‑ra támaszkodik, a megfelelő megbízható tanúsítvány (`trustedCertificate.pfx`) + +A `Aspose.PDF`‑n kívül nincs szükség további NuGet csomagokra. + +## 1. lépés: Az Aspose.PDF telepítése + +Nyiss egy terminált a projekt mappájában, és futtasd: + +```bash +dotnet add package Aspose.PDF +``` + +A parancs hozzáadja a legújabb Aspose.PDF könyvtárat, amely tartalmazza a később használt `Document` és `CertificateValidator` osztályokat. + +## 2. lépés: PDF dokumentum betöltése + +A PDF betöltése az első művelet, amelyet **hogyan töltsük be a pdf‑t** programozottan. A `Document` konstruktor elfogad fájlútvonalat, streamet vagy byte‑tömböt. A teljes útvonal használata átláthatóbbá teszi a példát. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Miért fontos:** A `Document` objektum a teljes PDF fájlt reprezentálja a memóriában. A fájl betöltése nélkül nem férhetsz hozzá a `Signatures` gyűjteményhez, amely a **pdf aláírás ellenőrzéséhez** szükséges. + +## 3. lépés: A tanúsítvány‑validátor előkészítése + +Egy digitális aláírás csak akkor megbízható, ha az aláíró tanúsítványa egy olyan gyökérhez láncolódik, amelyet te megbízol. A `CertificateValidator` lehetővé teszi, hogy az Aspose.PDF‑t egy megbízható tanúsítványtárra vagy egy konkrét PFX fájlra irányítsd. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Ha a PDF egy nyilvános CA‑t használ, amelyet a Windows már megbízik, kihagyhatod a `certPath`‑t, és a `CertificateValidator`‑t az alapértelmezett konstruktorral hozhatod létre. Egyedi PFX megadása hasznos belső PKI környezetekben. + +## 4. lépés: Az első digitális aláírás ellenőrzése + +Egy PDF több aláírást is tartalmazhat. Egyszerűség kedvéért ez a bemutató az első aláírást (`Signatures[0]`) ellenőrzi. A `Validate` metódus `true`‑t ad vissza, ha az aláírás kriptográfiailag épségben van **és** az aláíró tanúsítványa megbízható. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Mi történik a háttérben:** +- A metódus ellenőrzi a aláírt tartalom hash‑ét a tényleges aláírási értékkel. +- A megadott validátor segítségével felépíti a tanúsítványláncot. +- A visszavonási állapot (CRL/OCSP) kiértékelésre kerül, ha a validátor erre konfigurálva van. + +### Több aláírás kezelése + +Ha a PDF több aláírást tartalmaz, iterálj a `Signatures` gyűjteményen: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Ez a minta lehetővé teszi, hogy **pdf aláírás ellenőrzést** végezz minden aláírásra, és egyedi eredményeket jelentj. + +## 5. lépés: Az ellenőrzés eredményének kiírása + +Végül írd ki az eredményt a konzolra. Éles környezetben valószínűleg naplóznád az eredményt, vagy kivételt dobálnál egy érvénytelen aláírás esetén. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Várt konzolkimenet + +``` +Valid +``` + +vagy + +``` +Invalid +``` + +Az üzenet a `Validate` által visszaadott logikai értéket tükrözi. Egy „Invalid” eredmény azt jelezheti, hogy a dokumentumot módosították, a tanúsítvány nem megbízható, vagy az aláíró tanúsítvány lejárt. + +## 6. lépés: Gyakori buktatók és legjobb gyakorlatok + +### 1. Hiányzó megbízható tanúsítvány +Ha `Invalid` üzenetet kapsz, és tudod, hogy az aláírásnak megbízhatónak kellene lennie, ellenőrizd, hogy a megfelelő gyökértanúsítványt adtad‑e meg a `CertificateValidator`‑nek. Több gyökérhez használd a `X509Certificate2Collection`‑t elfogadó overload‑t. + +### 2. Külső hivatkozású aláírás +Néhány aláírás külső tartalmat (pl. csatolt fájlt) fed le. Győződj meg róla, hogy a külső erőforrások elérhetők; ellenkező esetben a hash‑ellenőrzés hibát jelez. + +### 3. Időbélyeg ellenőrzése +Az aláírás tartalmazhat időbélyeg‑tokent. Ennek ellenőrzéséhez konfiguráld a validátort, hogy a time‑stamp authority (TSA) tanúsítványait is ellenőrizze: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Teljesítmény nagy PDF‑eknél +Egy több száz oldalas PDF betöltése sok memóriát igényelhet. Ha csak az aláírási adatokat kell lekérned, használd a `PdfFileEditor`‑t a signature dictionary kinyeréséhez anélkül, hogy oldalakat renderelnél. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Szálbiztonság +A `Document` példányok nem szálbiztosak. Párhuzamosan sok PDF-et ellenőrzve minden szálnak hozz létre egy új `Document`‑et. + +## Teljes, futtatható példa + +Az alábbi programot másold, illeszd be, és futtasd a fájlútvonalak frissítése után. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**A program futtatása** minden aláírásra egy sort ír ki, egyértelműen jelezve, hogy a PDF átment‑e a **pdf digitális aláírás ellenőrzésen**. + +## Összegzés + +Most már tudod, **hogyan ellenőrizhetünk PDF** fájlokat, amelyek digitális aláírásokat tartalmaznak az Aspose.PDF for .NET segítségével. A bemutató lefedte a PDF betöltését, a tanúsítvány‑validátor konfigurálását, a pdf aláírás érvényességének ellenőrzését, a több aláírás kezelését és a gyakori problémák hibaelhárítását. + +Ezután fedezd fel a kapcsolódó témákat, például **hogyan aláírjunk PDF‑et**, **hogyan adjunk hozzá időbélyeg‑tokeneket**, és **hogyan nyerjünk ki aláírt tartalmat**. Ezek a kiegészítések lehetővé teszik egy teljes, vég‑től‑végig tartó biztonságos dokumentumfolyamat felépítését C#‑ban. + +--- + + +## Mit tanulj meg legközelebb? + + +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ódrészletet és lépésről‑lépésre magyarázatot tartalmaz, hogy könnyedén elsajátíthasd az API további funkcióit, és alternatív megvalósítási megközelítéseket is kipróbálhass a saját projektjeidben. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/hungarian/net/document-conversion/_index.md index 32b41d9e11..1542974a2b 100644 --- a/pdf/hungarian/net/document-conversion/_index.md +++ b/pdf/hungarian/net/document-conversion/_index.md @@ -58,6 +58,7 @@ Megtanulod, hogyan adhatsz meg konvertálási beállításokat, hogyan kinyerhet | [XPS-ből PDF-be](./xps-to-pdf/) Tanulja meg, hogyan konvertálhat XPS fájlokat PDF-be az Aspose.PDF for .NET segítségével ezzel a lépésről lépésre szóló útmutatóval. Tökéletes fejlesztők és dokumentumrajongók számára. | | [PDF konvertálása PDF/X‑4-re C#‑ban – Lépésről‑lépésre ASP.NET PDF oktatóanyag](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Tanulja meg, hogyan konvertálhat PDF-fájlokat PDF/X‑4 formátumba C#‑ban az Aspose.PDF for .NET segítségével lépésről‑lépésre. | | [PDF PNG oktatóanyag – PDF oldalak PNG-be konvertálása C#-ban](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Tanulja meg, hogyan konvertálhat PDF oldalakat PNG képekké C#-ban az Aspose.PDF for .NET használatával. | +| [pdfx4 konverziós oktatóanyag – PDF szabvány beállítása és PDF konvertálása Aspose használatával](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Ismerje meg, hogyan állíthat be PDF szabványt és konvertálhat PDF-et pdfx4 formátumba az Aspose.PDF for .NET segítségével. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/hungarian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..49e03dd4ad --- /dev/null +++ b/pdf/hungarian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4 átalakítási útmutató, amely bemutatja, hogyan állítható be a PDF + szabvány PDF/X‑4-re, és hogyan konvertálható a PDF az Aspose segítségével a megbízható + formátumkonverzió érdekében. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: hu +lastmod: 2026-08-08 +og_description: A pdfx4 konverziós útmutató bemutatja, hogyan állítható be a PDF szabvány + PDF/X‑4-re, és hogyan hajtható végre megbízható PDF konvertálás az Aspose segítségével + C#-ban. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 átalakítási útmutató – PDF szabvány beállítása és PDF konvertálása + az Aspose segítségével +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 konverziós útmutató – PDF szabvány beállítása és PDF konvertálása az + Aspose segítségével +url: /hu/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 konverziós útmutató – PDF szabvány beállítása és PDF konvertálása az Aspose segítségével + +Ha szükséged van egy **pdfx4 conversion tutorial**-ra, ez az útmutató végigvezet a PDF szabvány PDF/X‑4-re állításának és egy PDF konvertálásának teljes folyamatán az Aspose használatával. Akár nyomtatásra kész fájlokat készítesz, akár a hosszú távú archiválási megfelelőséget biztosítod, egy megbízható **aspose pdf format conversion** munkafolyamatot tanulhatsz, amely .NET 6 és újabb verziókkal működik. + +Az útmutató mindent lefed a projekt beállításától a hiányzó forrásfájlok vagy nem támogatott funkciók kezeléséig. A cikk végére egy önálló C# programod lesz, amely PDF/X‑4 kompatibilis fájlt állít elő, készen állva a további munkafolyamatokra. + +## Előfeltételek + +- .NET 6 SDK vagy újabb telepítve ([download here](https://dotnet.microsoft.com/download)) +- Érvényes Aspose.PDF for .NET licenc (az ingyenes próba verzió teszteléshez használható) +- Visual Studio 2022, VS Code, vagy bármely .NET fejlesztést támogató IDE +- Egy forrás PDF fájl, amelyet konvertálni szeretnél (helyezd egy ismert mappába) + +Ezek a követelmények biztosítják, hogy a kód további konfiguráció nélkül fusson. + +## 1. lépés: Új .NET konzolos projekt létrehozása + +Nyiss egy terminált, és futtasd a következő parancsokat egy `PdfX4Converter` nevű konzolos alkalmazás létrehozásához: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Add hozzá az Aspose.PDF NuGet csomagot: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` csomag biztosítja a `Document` osztályt és a `PdfFormatConversionOptions`-t, amelyek a **convert pdf pdfx4** műveletekhez szükségesek. + +## 2. lépés: Írd meg a konverziós kódot + +`Program.cs` (vagy `Program.cs`, ha az új felső‑szintű utasításokat használod) megnyitása, és a tartalmát cseréld le az alábbi teljes példára. A kód bemutatja a **set pdf standard** PDF/X‑4-re állítását, végrehajtja a konverziót, és tartalmaz hibakezelést a gyakori buktatókhoz. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Miért fontos minden rész + +- **Argument validation** megakadályozza, hogy a program összeomoljon, ha a felhasználó elfelejti megadni a fájl útvonalát. +- **`Document` loading** világos kivételt dob, ha a forrás PDF hiányzik vagy sérült, ami elengedhetetlen egy robusztus **convert pdf using aspose** élményhez. +- **`PdfFormatConversionOptions`** az a hely, ahol **set pdf standard**. A `PdfStandard.PdfX4` hozzárendelésével az Aspose automatikusan beállítja a színtereket, beágyazza a szükséges betűtípusokat, és írja a szükséges PDF/X‑4 metaadatokat. +- **`FontEmbeddingMode.EmbedAll`** biztosítja, hogy a forrás PDF-ben használt minden betűtípus be legyen ágyazva, ami gyakori követelmény a nyomtatásra kész PDF-eknél. +- **`doc.Convert`** végrehajtja a tényleges **aspose pdf format conversion**-t. A metódus egy hívással írja ki az új fájlt, egyszerűsítve a munkafolyamatot. + +## 3. lépés: Futtasd a konvertert + +Építsd fel a projektet, és futtasd a forrás- és célútvonalakkal: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Ha minden rendben van, a konzol a következőt írja ki: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Most már megnyithatod az `output_pdfx4.pdf`-t bármely PDF nézőben, amely támogatja a PDF/X‑4-et (pl. Adobe Acrobat Pro), és ellenőrizheted a megfelelőséget a *File → Properties → Standards* menüpontban. + +## 4. lépés: PDF/X‑4 megfelelőség ellenőrzése (opcionális) + +Gyártási folyamatokhoz érdemes programozottan validálni a kimenetet. Az Aspose egy `PdfComplianceChecker` osztályt biztosít (az `Aspose.Pdf` csomagban elérhető), amelyet a következőképpen használhatsz: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +A konverzió után ezt a kódrészletet futtatva egyértelmű siker/hiba eredményt kapsz, ami hasznos az automatizált CI/CD folyamatokhoz. + +## 5. lépés: Gyakori buktatók és legjobb gyakorlatok + +| Probléma | Miért fordul elő | Hogyan kerülhető el | +|----------|------------------|---------------------| +| Hiányzó betűtípusok a forrás PDF-ben | A betűtípusok hivatkozottak, de nincsenek beágyazva, ami konverziós figyelmeztetéseket okoz | Használd a `FontEmbeddingMode.EmbedAll`-t, ahogy fentebb látható | +| A forrás PDF átlátszó objektumokat tartalmaz, amelyek nem megengedettek a PDF/X‑4-ben | A PDF/X‑4 bizonyos átlátszósági keveréseket tilt | A konverzió előtt előfeldolgozd a PDF-et a `doc.ProcessTransparentObjects()` metódussal | +| Nagy fájlok OutOfMemoryException-t okoznak | Az egész dokumentum memóriába töltődik | Streameld a forrást a `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` használatával | +| Licenc nincs alkalmazva | A próba verzió vízjeleket ad hozzá | Hívd meg a `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` kódot minden Aspose API használata előtt | + +Ezeknek a tippeknek a alkalmazása biztosítja a zökkenőmentes **convert pdf pdfx4** élményt a gyártási környezetekben. + +## 6. lépés: Az útmutató kiterjesztése + +Miután elsajátítottad az alap **pdfx4 conversion tutorial**-t, felfedezheted: + +- **Batch conversion**: egy mappában lévő PDF-eket ciklusba véve konvertálj mindegyiket PDF/X‑4-re. +- **Metadata injection**: adj hozzá XMP metaadatokat, amelyeket bizonyos nyomdák igényelnek. +- **Color profile management**: csatolj ICC profilokat a `doc.ColorSpace = ColorSpace.DeviceRGB;` használatával a konverzió előtt. + +Ezek a kiterjesztések mind ugyanarra a **aspose pdf format conversion** alapra épülnek, amelyet itt bemutattunk. + +## Következtetés + +Ez a **pdfx4 conversion tutorial** megmutatta, hogyan **set pdf standard** PDF/X‑4-re, hogyan hajts végre egy megbízható **convert pdf using Aspose** konverziót, és hogyan ellenőrizd az eredményt. Most már van egy teljes, futtatható C# programod, amely beépíthető nagyobb dokumentum‑feldolgozó csővezetékekbe vagy önálló segédeszközként használható. Kísérletezz kötegelt feldolgozással, metaadat-kezeléssel vagy alternatív PDF szabványokkal (PDF/A‑2b, PDF/UA), hogy mélyítsd a **aspose pdf format conversion** terén szerzett tudásodat. + +Boldog kódolást, és élvezd a PDF/X‑4 kompatibilis kimenet nyújtotta biztonságot! + +## Mit érdemes legközelebb 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ódpéldákat 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. + +- [PDF/A konvertálása szabványos PDF-re az Aspose.PDF .NET segítségével: Átfogó útmutató](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Hogyan állíts be lejárati dátumot a PDF-eken az Aspose.PDF for .NET (C#) útmutatóval](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Átfogó útmutató: PDF konvertálása TIFF-re az Aspose.PDF .NET segítségével a zökkenőmentes dokumentumkonverzióért](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/hungarian/net/document-creation/_index.md b/pdf/hungarian/net/document-creation/_index.md index f51b925318..9b3d7c6c51 100644 --- a/pdf/hungarian/net/document-creation/_index.md +++ b/pdf/hungarian/net/document-creation/_index.md @@ -76,9 +76,13 @@ Kód oktatóanyag az Aspose.PDF Nethez ### [PDF dokumentum létrehozása Aspose.PDF segítségével – Oldal, alakzat hozzáadása és mentés](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Tanulja meg, hogyan hozhat létre PDF dokumentumot, adhat hozzá oldalt, alakzatot, majd mentheti azt az Aspose.PDF .NET használatával. + ### [PDF dokumentum létrehozása Aspose.PDF‑vel – Lépésről‑lépésre útmutató](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Tanulja meg, hogyan hozhat létre PDF dokumentumot az Aspose.PDF segítségével lépésről‑lépésre. +### [PDF dokumentum létrehozása C#-ban az Aspose.Pdf segítségével](./create-pdf-document-in-c-with-aspose-pdf/) +Tanulja meg, hogyan hozhat létre PDF dokumentumot C#-ban az Aspose.Pdf használatával. + ## További források - [Aspose.PDF a hálózati dokumentációhoz](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hungarian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/hungarian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..7f2690ac87 --- /dev/null +++ b/pdf/hungarian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: PDF dokumentum létrehozása C#-ban az Aspose.Pdf segítségével. Tanulja + meg, hogyan adjon hozzá üres oldalt a PDF-hez, hogyan szúrjon be bekezdést a PDF-be, + és hogyan helyezze el a szöveget a PDF-ben pontos koordinátákkal. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: hu +lastmod: 2026-08-08 +og_description: PDF dokumentum gyors létrehozása C#-ban. Ez az útmutató bemutatja, + hogyan adhatunk üres oldalt a PDF-hez, hogyan illeszthetünk bekezdést a PDF-be, + és hogyan helyezhetünk el szöveget a PDF-ben az Aspose.Pdf használatával. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: PDF dokumentum létrehozása C#‑ban az Aspose.Pdf‑vel – teljes útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: PDF dokumentum létrehozása C#‑ban az Aspose.Pdf segítségével +url: /hu/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF dokumentum létrehozása C#-ban az Aspose.Pdf segítségével + +Ha programozott módon **pdf dokumentumot** kell létrehoznod, ez az útmutató pontosan megmutatja, hogyan. Az Aspose.Pdf for .NET segítségével hozzáadhatsz egy üres oldalt pdf-hez, beilleszthetsz egy bekezdést pdf-be, és pixel‑pontos pontossággal pozicionálhatod a szöveget pdf-ben – mindezt néhány C# sorban. + +A tutorial végére egy teljesen működő PDF fájlt kapsz, amely tartalmaz egy megjegyzést a megadott koordinátákon. Nincs külső eszköz, nincs manuális szerkesztés – csak tiszta, újrahasználható kód, amelyet bármely .NET projektbe beilleszthetsz. + +## Mit fogsz megtanulni + +* Hogyan **hozz létre pdf dokumentumot** az Aspose.Pdf segítségével. +* A helyes módja a **blank page pdf hozzáadásának**, és hogy miért kell léteznie egy oldalnak a tartalom hozzáadása előtt. +* Hogyan **bekezdés hozzáadása pdf-hez**, és egy egyedi címke csatolása (hasznos későbbi kinyeréshez vagy stílusozáshoz). +* A technika a **szöveg pozicionálásához pdf-ben** a `Position` osztály használatával. +* Hogyan mentheted az eredményt lemezre, és ellenőrizheted a kimenetet. + +**Előfeltételek** + +* .NET 6.0 vagy újabb (a kód .NET Framework 4.7+‑vel is működik). +* Érvényes Aspose.Pdf for .NET licenc vagy egy ingyenes értékelő kulcs. +* Egy IDE, például a Visual Studio 2022 vagy a VS Code a C# kiegészítővel. + +> **Pro tipp:** Ha ingyenes értékelést használsz, a generált PDF kis vízjelet tartalmazni fog. Regisztrálj licencet a eltávolításához. + +## PDF dokumentum létrehozása Aspose.Pdf segítségével + +Az első lépés a `Document` osztály példányosítása. Ez az objektum a teljes PDF fájlt képviseli, és hozzáférést biztosít az oldalakhoz, erőforrásokhoz és a mentési beállításokhoz. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +A dokumentum létrehozása **nem** ír még semmit a lemezre; csak egy memóriában lévő reprezentációt készít, amelyet manipulálhatsz. Ez a megközelítés gyors és memóriahatékony API-t biztosít. + +## Üres oldal hozzáadása pdf-hez az Aspose.Pdf használatával + +A PDF-nek legalább egy oldalt kell tartalmaznia, mielőtt bármilyen tartalmat elhelyeznél. Egy üres oldal hozzáadása egyetlen metódushívás: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Az `Add()` metódus egy alapértelmezett méretű (A4) és orientációjú (álló) oldalt hoz létre. Ha más méretre van szükséged, adj át egy `PageSize` példányt az `Add()`-nek. + +## Bekezdés hozzáadása pdf-hez és megjegyzés beállítása + +Miután az oldal létezik, létrehozhatsz egy `Paragraph` objektumot, amely a látható szöveget tartalmazza. A bekezdés egy egyedi címkét is hordozhat, ami hasznos, ha később programozottan kell megtalálni vagy stílusozni az elemet. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Miért használj címkét? + +A címkék metaadatok, amelyek a PDF elemmel együtt utaznak. Később lekérdezhetők a `Document.FindObject()` segítségével, vagy felhasználhatók olyan PDF feldolgozók által, amelyek a címkékre támaszkodnak a hozzáférhetőség vagy indexelés érdekében. + +## Szöveg pozicionálása pdf-ben pontos koordinátákkal + +A bekezdés alapértelmezett elhelyezése az oldal margójának bal‑felső sarka. A szöveg pontos helyre mozgatásához állítsd be a `Position` tulajdonságot a bekezdés címkéjén: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +A koordinátákat pontokban mérik (1 point = 1/72 inch). A kiindulópont (0,0) az oldal bal‑alsó sarkában van, ami a legtöbb PDF renderelő motorhoz illeszkedik. Állítsd be az `X` és `Y` értékeket a kívánt elrendezéshez. + +Pozicionálás után add hozzá a bekezdést az oldal gyűjteményéhez: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## PDF dokumentum mentése + +Végül írd a memóriában lévő PDF-et egy fájlba. Megadhatod a kimeneti útvonalat, formátumot és akár titkosítási beállításokat is. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Amikor a program befejeződik, az `output.pdf` egyetlen oldalt tartalmaz, amelyen a **Important note** szöveg a jobb‑felső sarok közelében helyezkedik el (X = 50, Y = 750). Nyisd meg a fájlt bármely PDF megjelenítőben a pozíció ellenőrzéséhez. + +![Generált PDF dokumentum C# Aspose.Pdf segítségével, amely a pozicionált megjegyzést mutatja](https://example.com/images/generated-pdf.png) + +*Kép alt szöveg: Generált PDF dokumentum C# Aspose.Pdf segítségével, amely a pozicionált megjegyzést mutatja* (tartalmazza az elsődleges kulcsszót). + +## Teljes, futtatható példa + +Az összes részt összeállítva, itt egy teljes konzolalkalmazás, amelyet másolhatsz, lefordíthatsz és futtathatsz: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Várható kimenet** a program futtatásakor: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +`output.pdf` megnyitása egyetlen oldalt mutat, amelyen a **Important note** szöveg a megadott koordinátákon helyezkedik el. + +## Gyakori variációk és szélsőséges esetek + +| Forgatókönyv | Mit kell módosítani | Miért fontos | +|--------------|----------------------|--------------| +| **Különböző oldalméret** | `pdfDocument.Pages.Add(PageSize.A5)` | A kisebb oldalak csökkentik a fájlméretet és mobil képernyőkhöz illeszkednek. | +| **Több megjegyzés** | Loop over a collection of strings and create a `Paragraph` for each, incrementing the `Y` coordinate. | Lehetővé teszi a felsorolás‑stílusú megjegyzések tömeges generálását. | +| **Unicode karakterek** | Ensure the source file is saved as UTF-8 and set `noteParagraph.Text = "重要なメモ"` | Az Aspose.Pdf alapból támogatja a Unicode-ot, de a fájl kódolásának meg kell egyeznie. | +| **Jelszóval védett PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Biztonságot ad a bizalmas megjegyzéseknek. | +| **Nagy felbontású kimenet** | Set `pdfDocument.PageInfo.Width` and `Height` to larger values before adding content. | Hasznos nagy formátumú PDF-ek nyomtatásához. | + +## Tippek a termelésben való használathoz + +* **Használd újra a `Document` példányt** sok PDF generálásakor egyetlen kérésben a GC terhelés csökkentése érdekében. +* **Felszabadítsd az objektumokat** (`pdfDocument.Dispose()`), ha egy ciklusban sok dokumentumot hozol létre. +* **Érvényesítsd a koordinátákat**: az `Y` érték nem haladhatja meg az oldal magasságát; különben a szöveg levágásra kerül. +* **Használd a `TextFragmentAbsorber`-t** a megjegyzés későbbi kinyeréséhez a címkéje (`/P`) alapján, ha vissza kell olvasni a tartalmat. + +## Következtetés + +Most már tudod, hogyan **hozz létre pdf dokumentumot** az Aspose.Pdf segítségével, **adj hozzá üres oldalt pdf-hez**, **adj bekezdést pdf-hez**, **hogyan adj megjegyzést pdf-hez**, és **pozicionáld a szöveget pdf-ben** pontosan. A teljes példa egy tiszta, újrahasználható munkafolyamatot mutat be, amelyet számlák, jelentések vagy bármilyen dokumentum‑automatizálási forgatókönyv kiterjesztésére használhatsz. + +Ezután fedezd fel a kapcsolódó témákat, például **képek hozzáadása pdf-hez**, **táblázatok építése az Aspose.Pdf segítségével**, vagy **digitális aláírások alkalmazása**. Mindegyik az itt lefedett alapvető koncepciókra épül, így készen állsz a bonyolultabb PDF generálási feladatok megoldására. + +Boldog kódolást! + +## Mit érdemes következőként megtanulni? + +Az alábbi oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek az ebben az ú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. + +- [PDF dokumentum létrehozása Aspose.PDF – oldal hozzáadása, alakzat és mentés](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Üres oldal hozzáadása a PDF végéhez az Aspose.PDF for .NET használatával | Lépésről‑lépésre útmutató](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Szövegbélyeg hozzáadása PDF-hez az Aspose.PDF .NET: Á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/images-graphics/_index.md b/pdf/hungarian/net/images-graphics/_index.md index 7ba2ab708e..a820da4369 100644 --- a/pdf/hungarian/net/images-graphics/_index.md +++ b/pdf/hungarian/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Ismerje meg, hogyan hozhat létre akadálymentesített, címkézett PDF-eket ké ### [Átlátszó téglalapok létrehozása PDF fájlokban az Aspose.PDF for .NET használatával](./create-transparent-rectangles-aspose-pdf-dotnet/) Ismerje meg, hogyan javíthatja PDF-dokumentumait alfa átlátszóságú téglalapok létrehozásával az Aspose.PDF for .NET segítségével. Kövesse ezt a lépésről lépésre szóló útmutatót. +### [PDF átlátszóság beállítása C#-ban az Aspose.PDF segítségével – teljes útmutató](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Tanulja meg, hogyan állíthatja be a PDF átlátszóságát C#-ban az Aspose.PDF segítségével, lépésről lépésre útmutatóval. + ### [Képek törlése PDF fájlokból az Aspose.PDF for .NET használatával - Teljes útmutató](./delete-images-aspose-pdf-net/) Ismerje meg, hogyan törölhet hatékonyan képeket PDF fájlokból az Aspose.PDF for .NET segítségével. Ez az útmutató bemutatja a beállítást, a kódpéldákat és a bevált gyakorlatokat. diff --git a/pdf/hungarian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hungarian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..d6080290dd --- /dev/null +++ b/pdf/hungarian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: PDF átlátszóság beállítása C#-ban az Aspose.PDF használatával – tanulja + meg, hogyan állíthatja be a vonal és a kitöltés átlátszóságát néhány kódsorral. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: hu +lastmod: 2026-08-08 +og_description: Állítsa be gyorsan a PDF átlátszóságát C#-ban. Ez az útmutató megmutatja, + hogyan módosíthatja a vonal- és kitöltési átlátszóságot az Aspose.PDF grafikai állapot + API-jával. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: PDF átlátszóság beállítása C#‑ban az Aspose.PDF‑vel – lépésről‑lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: PDF átlátszóság beállítása C#-ban az Aspose.PDF segítségével – teljes útmutató +url: /hu/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF átlátszóság beállítása C#-ban az Aspose.PDF segítségével – teljes útmutató + +Ha **PDF átlátszóságot** kell beállítania bizonyos rajzolási műveletekhez, ez a bemutató pontosan megmutatja, hogyan teheti meg az Aspose.PDF for .NET használatával. Legyen szó vízjelekről, félig átlátszó átfedésekről vagy egyedi grafikákról, egy tömör, termelésre kész megközelítést tanul meg. + +Az alábbi szakaszokban mindent lefedünk a PDF betöltésétől a grafikai állapot szerkesztéséig, egy új átlátszósági definíció hozzáadásáig és az eredmény mentéséig. Nem szükséges külső dokumentáció – csak az alábbi kód és egy rövid magyarázat minden lépéshez. + +## 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) +* Érvényes Aspose.PDF for .NET licenc (az ingyenes próba verzió értékelésre használható) +* Egy bemeneti PDF fájl (`input.pdf`) egy olyan mappában, amelyhez olvasási/írási jogosultsága van +* Visual Studio 2022 vagy bármelyik kedvenc C# IDE + +## 1. lépés – PDF dokumentum betöltése (Aspose.PDF for .NET) + +Az első feladat a meglévő PDF megnyitása. Az Aspose.PDF a PDF fájlt a `Document` osztállyal reprezentálja, amely teljes hozzáférést biztosít az oldalakhoz, erőforrásokhoz és alacsony szintű objektumokhoz. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Miért fontos*: A dokumentum betöltése egy memóriában lévő modellt hoz létre, amelyet biztonságosan módosíthat. A `using` utasítás automatikusan felszabadítja a fájlkezelőt, miután befejeztük a munkát. + +## 2. lépés – Az első szerkeszteni kívánt oldal lekérése + +Az átlátszóság oldalanként van definiálva az oldal erőforrás-szótárán keresztül. Itt az első oldalt célozzuk meg, de egy `foreach` ciklussal a `doc.Pages` gyűjteményen végig is járhat. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Miért fontos*: Minden oldal saját `Resources` gyűjteménnyel rendelkezik, amely grafikai állapotokat, betűtípusokat, képeket stb. tárol. A megfelelő oldal módosítása biztosítja, hogy az átlátszósági hatás a várt helyen jelenjen meg. + +## 3. lépés – Az oldal erőforrás-szótárának megnyitása szerkesztésre + +Az Aspose.PDF egy `DictionaryEditor` segédeszközt biztosít az alacsony szintű PDF szótárak manipulálásához anélkül, hogy megsértené a fájl szerkezetét. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Miért fontos*: A PDF COS (Content Object System) szótárainak közvetlen szerkesztése az egyetlen módja annak, hogy egy egyedi grafikai állapotot injektáljunk. A szerkesztő elrejti az alacsony szintű szintaxist, miközben a PDF érvényes marad. + +## 4. lépés – A meglévő ExtGState szótár lekérése + +Az **ExtGState** (external graphics state) szótár tartalmazza az átlátszóságot, keverési módot, vonalvastagságot stb. Ha nem létezik, az Aspose.PDF automatikusan létrehozza, amikor új bejegyzést adunk hozzá. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Miért fontos*: ExtGState bejegyzés nélkül később nem hivatkozhat egy egyedi átlátszóságra az oldal tartalmi adatfolyamában. Ez a lépés garantálja, hogy a tároló jelen legyen. + +## 5. lépés – Új grafikai állapot létrehozása a kívánt átlátszósággal + +A grafikai állapot egy paramétergyűjtemény. Az átlátszósághoz beállítjuk a `CA` (stroke opacity) és `ca` (fill opacity) értékeket. Emellett egy keverési módot (`BM`) is megadunk, amely szabályozza, hogyan lépnek kölcsönhatásba az átlátszó pixelek a mögöttes tartalommal. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Miért fontos*: A `CA` és `ca` 0‑tól (teljesen átlátszó) 1‑ig (teljesen átlátszatlan) terjedő értékeket fogad. Ezeknek a számoknak a módosításával érheti el a kívánt vizuális hatást. A `"Normal"` keverési mód a leggyakoribb, de kísérletezhet a `"Multiply"` vagy `"Screen"` módokkal is művészi hatások eléréséhez. + +## 6. lépés – Az új grafikai állapot regisztrálása az ExtGState gyűjteményben + +Minden grafikai állapotnak egyedi névvel kell rendelkeznie (pl. `GS0`). A szótárunkat hozzáadjuk az `ExtGState` gyűjteményhez, majd frissítjük az oldal erőforrásait. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Miért fontos*: A `GS0` névvel később a `gs` operátor segítségével hivatkozhat rá az oldal tartalmi adatfolyamában. Ha több átlátszósági szintre van szükség, hozzon létre további bejegyzéseket (`GS1`, `GS2`, …). + +## 7. lépés – Grafikai állapot alkalmazása a rajzolási parancsokra (opcionális) + +Ha az átlátszóságot azonnal alkalmazni szeretné a meglévő tartalomra, szerkesztenie kell az oldal tartalmi adatfolyamát. Az alábbi egyszerű példa egy félig átlátszó téglalapot rajzol az újonnan létrehozott állapottal. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Miért fontos*: A `gs` operátor (`SetGraphicsState`) azt mondja a PDF renderelőnek, hogy a `GS0`‑ban definiált átlátszósági értékeket használja minden későbbi rajzolási parancshoz. A `grestore`/`gsave` pár biztosítja, hogy a többi oldal elem érintetlen maradjon. + +## 8. lépés – A módosított PDF mentése + +Végül írja vissza a frissített dokumentumot a lemezre. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Miért fontos*: A mentés véglegesíti a változtatásokat, beágyazza az új grafikai állapotot, és olyan PDF-et hoz létre, amelyet bármely megjelenítő (Adobe Acrobat, Chrome stb.) a kívánt átlátszósággal tud megjeleníteni. + +### Várt eredmény + +Nyissa meg az `output.pdf` fájlt egy PDF‑megtekintőben. Egy piros téglalapot kell látnia, amelynek körvonala 80 %-ban átlátszó, a kitöltése pedig 40 %-ban átlátszó, és simán keveredik a háttérrel. Az oldal többi része változatlan marad. + +## Gyakori variációk és szélhelyzetek + +| Helyzet | Mit kell módosítani | Ok | +|-----------|----------------|--------| +| **Több átlátszósági szint** | Hozzon létre további grafikai állapotokat (`GS1`, `GS2`, …) különböző `CA`/`ca` értékekkel, és hivatkozzon rájuk ahol szükséges | Finomhangolt vezérlés különböző elemekhez | +| **Eltérő keverési módok** | Használja a `"Multiply"`, `"Screen"`, `"Overlay"` stb. értékeket a `BM` bejegyzésben a `"Normal"` helyett | Művészi keverési hatások létrehozása | +| **Alkalmazás meglévő tartalmi adatfolyamon** | Illessze be a `SetGraphicsState` parancsot a módosítani kívánt rajzolási operátorok elé | Megakadályozza a nem kívánt átlátszóságot más objektumokon | +| **Nagy PDF‑ek** | Használjon `foreach (Page p in doc.Pages)` ciklust az oldalak feldolgozásához, hogy ne kelljen az egész fájlt egyszerre betölteni | Javítja a teljesítményt és csökkenti a memóriaigényt | +| **Nincs meglévő ExtGState** | A 4. lépésben lévő kód már létrehozza, ha hiányzik, így nincs szükség extra kezelésre | Biztosítja, hogy a szótár jelen legyen | + +### Profi tipp + +Ha sok egyedi grafikai állapotot ad hozzá, tartsa a névadást konzisztensen (`GS0`, `GS1`, …) és dokumentálja minden állapot célját egy megjegyzésblokkban. Ez megkönnyíti a jövőbeni karbantartást, különösen együttműködés esetén. + +## Teljes, futtatható példa + +Az alábbi program a teljes megoldást tartalmazza, amelyet egyszerűen másolhat, beilleszthet és futtathat. Minden lépés, a szükséges `using` direktívák és a megjegyzések benne vannak. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Futtassa a programot, + +## 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ódrészleteket tartalmaz lépés‑rő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. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..5c694d839d 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 dokumentum mentése az Aspose.PDF segítségével – teljes útmutató](./save-pdf-document-with-aspose-pdf-complete-guide/) | Ismerje meg, hogyan menthet PDF dokumentumot az Aspose.PDF használatával ebben a teljes útmutatóban. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/hungarian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..9426b97267 --- /dev/null +++ b/pdf/hungarian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: PDF dokumentum mentése az Aspose.PDF használatával, tanulja meg, hogyan + adjon hozzá oldalakat a PDF-hez, hogyan töltsön ki PDF űrlapmezőket, és hogyan hozzon + létre PDF-et űrlapmezőkkel egyetlen oktatóanyagon. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: hu +lastmod: 2026-08-08 +og_description: Mentse el a PDF dokumentumot az Aspose.PDF segítségével, és ismerje + meg, hogyan adhat hozzá oldalakat a PDF-hez, tölthet ki PDF űrlapmezőket, valamint + hozhat létre PDF-et űrlapmezőkkel gyorsan és megbízhatóan. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: PDF-dokumentum mentése az Aspose.PDF segítségével – lépésről lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: PDF-dokumentum mentése az Aspose.PDF segítségével – teljes útmutató +url: /hu/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF dokumentum mentése az Aspose.PDF‑vel – teljes útmutató + +Ha **PDF dokumentumot** kell mentened, amely interaktív űrlapmezőket tartalmaz, ez a bemutató pontosan megmutatja, hogyan. Megtanulod, hogyan adj hozzá PDF oldalakat, hogyan hozz létre PDF űrlapot, és hogyan töltsd fel egy PDF űrlapmezőt – mindezt az Aspose.PDF for .NET segítségével. + +A következő szakaszokban megtanulod, hogyan: + +* több oldalt hozzáadj egy új PDF‑hez, +* szövegdoboz űrlapmezőt hozz létre az első oldalon, +* widget annotációt helyezz el ugyanarra a mezőre a második oldalon, +* beállítsd a mező értékét (PDF űrlapmező kitöltése), +* és végül **PDF dokumentumot mentesz** a lemezre. + +Nem szükséges külső eszköz, a teljes, futtatható kód be van ágyazva. + +## Előfeltételek + +* .NET 6.0 vagy újabb (a kód .NET Framework 4.7.2+‑vel is működik). +* Érvényes Aspose.PDF for .NET licenc vagy egy ingyenes értékelő kulcs. +* Visual Studio 2022 (vagy bármely C# IDE). + +Add the NuGet package: + +```bash +dotnet add package Aspose.PDF +``` + +## PDF oldalak hozzáadása + +Az első lépés egy üres PDF létrehozása és a szükséges oldalak hozzáadása. Az oldalak hozzáadása az űrlapmezők definiálása előtt biztosítja, hogy a elrendezési koordináták pontosak legyenek. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Miért fontos:* Minden `Page` objektum egy nyomtatható vásznat képvisel. Az oldalak korai hozzáadásával később hivatkozhatsz rájuk az űrlapelemek elhelyezésekor. + +## PDF űrlap létrehozása az Aspose.PDF‑vel + +Egy PDF űrlap egy **meződefinícióból** (a logikai tároló) és egy vagy több **widget annotációból** (a vizuális megjelenítés) áll. A példa egy `TextBoxField` mezőt hoz létre **Comments** néven az első oldalon. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Miért fontos:* A `Rectangle` koordináták pontban vannak megadva (1 pt = 1/72 in). Állítsd be az értékeket a tervezésednek megfelelően. + +## PDF űrlapmező kitöltése + +Programozottan beállíthatod a mező értékét a dokumentum mentése előtt. Ez a **populate PDF form field** (PDF űrlapmező kitöltése) lényege. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Ha később kell kitölteni a mezőt (pl. felhasználói bemenetből), egyszerűen rendelj egy új karakterláncot a `commentsField.Value`‑hez a `Save` hívása előtt. + +## Widget annotáció hozzáadása ugyanarra a mezőre a második oldalon + +A widget annotáció teszi láthatóvá az űrlapmezőt egy oldalon. Egy második widget hozzáadásával ugyanaz a logikai mező mindkét oldalon megjelenik, bemutatva a **create PDF with form fields** (PDF létrehozása űrlapmezőkkel) többoldalas kiterjesztését. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Miért fontos:* A `Widgets` gyűjtemény tetszőleges számú vizuális reprezentációt tárolhat. A felhasználók bármelyik oldalon interakcióba léphetnek a mezővel, és a beírt érték szinkronban marad. + +## A mező csatolása az első oldal annotációihoz + +Az űrlapmezőket egy oldal annotációgyűjteményéhez kell hozzáadni, hogy a PDF‑megtekintő meg tudja jeleníteni őket. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDF dokumentum mentése + +Miután az űrlap teljesen definiálva van, **PDF dokumentumot menthetsz** a kívánt helyre. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Amikor megnyitod a `output.pdf`‑et az Adobe Acrobat Readerben vagy bármely PDF‑megtekintőben, láthatod az 1. oldalon egy szövegdobozt és a 2. oldalon egy megfelelő dobozt. Bármelyik dobozba gépelt szöveg frissíti ugyanazt a mögöttes mezőt. + +## Teljes, futtatható példa + +Az alábbiakban a teljes program látható, amelyet beilleszthetsz egy konzolalkalmazásba. Fordítható, és a leírt PDF‑et hozza létre módosítások nélkül. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Várt kimenet:** Egy `output.pdf` nevű fájl, amely két oldalt tartalmaz. Az 1. oldal egy “Comments” felirattal ellátott szövegdobozt mutat a (100, 600) koordinátákon. A 2. oldal ugyanazt a mezőt mutat a (100, 400) koordinátákon. A mező előre ki van töltve a “Enter your feedback here” szöveggel. A szöveg módosítása bármelyik oldalon frissíti ugyanazt az értéket, amikor a dokumentumot újra mentik. + +## Gyakori kérdések és szél‑eset kezelése + +| Kérdés | Válasz | +|----------|--------| +| *Hozzáadhatok több widgetet ugyanahhoz a mezőhöz?* | Igen. További `WidgetAnnotation` objektumokat fűzhetsz a `commentsField.Widgets`‑hez. Minden widget elhelyezhető bármely oldalon. | +| *Mi van, ha be kell állítanom a mező megjelenését (betűtípus, keret, háttér)?* | Használd a `commentsField.DefaultAppearance`‑t a betűtípus és szín megadásához, és állítsd be a `commentsField.Border` tulajdonságait a vonalstílushoz. | +| *Hogyan tehetem a mezőt csak‑olvasásra?* | Állítsd be a `commentsField.ReadOnly = true;` értéket. A mező továbbra is megjeleníti az értékét, de a felhasználó nem szerkesztheti. | +| *Lehetőség van a mező kitöltésére a PDF létrehozása után?* | Igen. Töltsd be a mentett PDF‑et a `new Document("output.pdf")`‑vel, keresd meg a mezőt a `pdfDocument.Form["Comments"]`‑en keresztül, rendelj hozzá egy új `Value`‑t, és hívd meg újra a `Save`‑t. | +| *Mi van, ha a PDF‑nek PDF/A‑nak kell megfelelnie archiválás céljából?* | A dokumentum felépítése után hívd meg a `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });`‑t a mentés előtt. | + +## Tippek a gyakorlatból + +* **Pro tip:** Tartsd a logikai mezőnevet röviden és egyedileg; ez lesz az azonosító, amelyet a későbbi programozott űrlapkitöltéshez használsz. +* **Watch out for:** Átfedő widget téglalapok. Az átfedések megjelenítési hibákat okozhatnak egyes megjelenítőkben. +* **Performance note:** Sok oldal vagy widget szoros ciklusban történő hozzáadása optimalizálható egyetlen `Rectangle` példány újrafelhasználásával, csak a koordinátákat módosítva. + +## Következtetés + +Most már tudod, hogyan **PDF dokumentumot menthetsz**, amely teljesen működő űrlapot tartalmaz, hogyan **PDF űrlapmezőt tölthetsz ki**, és hogyan **PDF oldalakat adsz hozzá** valamint **PDF-et hozol létre űrlapmezőkkel** az Aspose.PDF for .NET használatával. A teljes példa bemutatja a vég‑től‑végig munkafolyamatot a dokumentum létrehozásától a végső mentésig. + +Ezután fedezd fel a kapcsolódó témákat, mint a **jelölőnégyzetek hozzáadása**, **legördülő listák létrehozása**, vagy a **űrlap laposítása** csak‑olvasású terjesztéshez. Mindegyik ugyanazokra az elvekre épül, amelyeket itt bemutattunk, és bővíti a PDF‑automatizálási képességeidet. + +Jó kódolást! + +## Mit érdemes következőként megtanulni? + +Az alábbi bemutató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ódpéldákat 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 hozzunk létre PDF-et az Aspose‑val – Űrlapmező és oldalak hozzáadása](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [PDF dokumentum létrehozása az Aspose‑val – 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 adjunk hozzá és nyerjünk ki PDF űrlapmezőket az Aspose.PDF for .NET használatával: Átfogó útmutató](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/hungarian/net/programming-with-pdf-pages/_index.md index 2563199997..31b9400953 100644 --- a/pdf/hungarian/net/programming-with-pdf-pages/_index.md +++ b/pdf/hungarian/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Az oktatóanyagok lépésről lépésre bemutatják az utasításokat, részlete | [PDF oldalméretek frissítése](./update-dimensions/) | Fedezze fel, hogyan frissítheti könnyedén a PDF oldalak méreteit az Aspose.PDF for .NET segítségével ebben az átfogó, lépésről lépésre szóló útmutatóban. | | [PDF fájl tartalmának nagyítása](./zoom-to-page-contents/) | Ebben az átfogó útmutatóban megtudhatja, hogyan nagyíthatja az oldalak tartalmát PDF fájlokban az Aspose.PDF for .NET segítségével. Javítsa PDF dokumentumait az Ön igényei szerint. | | [Oldalszámok hozzáadása PDF-hez C#‑vel – Teljes lépésről‑lépésre útmutató](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Lépésről lépésre útmutató a PDF oldalszámok hozzáadásához C#‑ben az Aspose.PDF for .NET használatával. | +| [Bates számozás hozzáadása PDF-hez Aspose‑val – lépésről‑lépésre útmutató](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Ismerje meg, hogyan adhat hozzá Bates‑számozást PDF dokumentumokhoz az Aspose.PDF for .NET segítségével. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/hungarian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2231071fa4 --- /dev/null +++ b/pdf/hungarian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Bates-számozás hozzáadása PDF-hez az Aspose.Pdf használatával C#-ban. + Ez a bemutató azt is bemutatja, hogyan lehet üres oldalas PDF-et hozzáadni és programozottan + PDF-et generálni. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: hu +lastmod: 2026-08-08 +og_description: Bates-számozás hozzáadása PDF-hez az Aspose.Pdf segítségével C#-ban. + Tanulja meg, hogyan adjon hozzá üres oldalt a PDF-hez, generáljon PDF-et programozottan, + és mentse el a végső dokumentumot percek alatt. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Bates-számozás hozzáadása PDF-hez az Aspose segítségével – teljes C# útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Bates-számozás hozzáadása PDF-hez az Aspose segítségével – lépésről lépésre + útmutató +url: /hu/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Bates számolás hozzáadása PDF-hez az Aspose segítségével – lépésről‑lépésre útmutató + +A Bates számolás hozzáadása PDF-hez az Aspose.Pdf segítségével egyszerű, ha megérted az alapvető lépéseket. Ha emellett üres oldal PDF-et is hozzá kell adnod, vagy programozottan kell PDF-et generálnod, ez az útmutató mindent lefed, amire szükséged van. + +Ebben a tutorialban a következőket fogod megtenni: +* Új PDF dokumentum létrehozása a semmiből. +* Üres oldal PDF hozzáadása, amely a Bates számokat tartalmazza. +* A Bates számolási artefakt konfigurálása egy egyedi előtaggal. +* A PDF mentése, hogy a számok megjelenjenek a generált fájlban. + +A végére egy teljesen működő C# konzolalkalmazást kapsz, amely PDF-et állít elő Bates számokkal, például **CASE‑1000**, **CASE‑1001**, … – ami gyakori követelmény a jogi és e‑discovery munkafolyamatokban. + +## Előkövetelmények + +* .NET 6.0 SDK vagy újabb (a kód .NET Framework 4.8‑al is működik). +* Visual Studio 2022 vagy bármely C#‑kompatibilis IDE. +* Érvényes Aspose.Pdf for .NET licenc (vagy egy ingyenes értékelő kulcs). +* Alapvető ismeretek a C# szintaxisában. + +> **Pro tipp:** Ha licenc nélkül futtatod a kódot, az Aspose egy kis vízjelet ad a kimeneti PDF-hez. + +## 1. lépés: A projekt beállítása és az Aspose.Pdf importálása + +Hozz létre egy új konzolprojektet, és add hozzá az Aspose.Pdf NuGet csomagot: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +A példához szükséges `using` direktívák a következők: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Ezek a névtér hozzáférést biztosít a később használt `Document`, `Page` és `BatesNumberingArtifact` osztályokhoz. + +## 2. lépés: Üres oldal PDF hozzáadása + +A Bates számot egy oldalhoz kell csatolni, ezért először létrehozunk egy üres oldalt, amely fogadja a számozási artefaktot. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +A `Document` osztály a teljes PDF fájlt képviseli, míg a `Pages.Add()` egy új, üres oldalt szúr be a dokumentum oldalgyűjteményének végére. Mivel a dokumentum eleve üres, ez a hívás létrehozza az első oldalt is. + +## 3. lépés: A Bates számozási artefakt konfigurálása + +Most meghatározzuk, hogyan nézzenek ki a Bates számok. A `BatesNumberingArtifact` lehetővé teszi a kezdő szám, előtag, utótag és formázási beállítások megadását. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Miért fontos:** +A `StartNumber` **1000**‑ra állítása megfelel a tipikus jogi ügyfájl konvencióknak. A `Prefix` biztosítja, hogy minden szám **CASE‑1000**, **CASE‑1001**, … formában jelenjen meg, ami könnyebbé teszi a keresést és a rendezést. + +## 4. lépés: Artefakt csatolása az oldalhoz + +Az artefaktot hozzá kell adni az oldal `Artifacts` gyűjteményéhez, hogy az Aspose minden mentéskor megjelenítse az oldalon. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Amikor a dokumentumot mentjük, az Aspose automatikusan minden oldalon megismétli az artefaktot, és minden következő oldalnál növeli a számot. + +## 5. lépés: (Opcionális) További oldalak hozzáadása + +Ha több oldalra van szükséged, egyszerűen ismételd meg a `pdfDocument.Pages.Add()` hívást. A korábban csatolt Bates számozási artefakt automatikusan megjelenik minden új oldalon. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## 6. lépés: PDF mentése – PDF programozott generálása + +Végül mentsd a dokumentumot a lemezre. Itt kerülnek a Bates számok az oldalakra. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Várható eredmény:** +Nyisd meg a *BatesNumberedDocument.pdf* fájlt, és egy háromoldalas PDF-et látsz. Minden oldal a jobb alsó sarokban jeleníti meg a Bates számot: + +* 1. oldal → **CASE‑1000** +* 2. oldal → **CASE‑1001** +* 3. oldal → **CASE‑1002** + +A számok automatikusan növekednek, mivel az artefakt az oldalgyűjteményhez van csatolva. + +## Teljes, futtatható példa + +Az összes lépés összevonásával itt egy teljes konzolprogram, amelyet másolhatsz, beilleszthetsz és futtathatsz: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Futtasd a programot a `dotnet run` paranccsal. A végrehajtás után keresd meg a fájlt az asztalon, és ellenőrizd a Bates számokat. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Gyakori kérdések és speciális esetek + +### Mi van, ha más betűtípust vagy pozíciót szeretnék? + +A `BatesNumberingArtifact` olyan tulajdonságokat tesz elérhetővé, mint a `FontSize`, `FontColor`, `HorizontalAlignment` és `VerticalAlignment`. Például: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Hogyan zárhatok ki egy adott oldalt a számozásból? + +Hozz létre egy külön `BatesNumberingArtifact`-et azokhoz az oldalakhoz, amelyeket számozni szeretnél, és csak azokra az oldalakra add hozzá. A csatolás nélküli oldalak számozatlanok maradnak. + +### Működik ez meglévő PDF-ekkel is? + +Igen. A `new Document()` helyett tölts be egy meglévő fájlt: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Ezután csatold az artefaktot a kívánt oldalakhoz, és mentsd el. + +## Következtetés + +Most már tudod, hogyan **adj hozzá Bates számolást PDF-hez** az Aspose.Pdf segítségével, hogyan **adj hozzá üres oldal PDF-et**, és hogyan **generálj PDF-et programozott módon** egy tiszta, újrahasználható C# megoldásban. A megközelítés bármennyi oldal, egyedi előtag és stílusbeállítás esetén működik, teljes irányítást biztosítva a végső dokumentum felett. + +Next steps you might explore: + +* Use **create pdf as + +## Mit érdemes még megtanulni? + +A következő tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljesen működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsenek elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan 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á egy üres oldalt egy PDF végéhez az Aspose.PDF for .NET használatával | Lépésről‑lépésre útmutató](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [PDF dokumentum létrehozása az Aspose.PDF‑vel – oldal, alakzat hozzáadása és mentés](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 8893ecd14c..a1872f347e 100644 --- a/pdf/hungarian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/hungarian/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ Az oktatóanyag részletes áttekintést nyújt a PDF-fájlok titkosságának é | [Aláírás intelligens kártyával PDF fájl aláírásával](./sign-with-smart-card-using-pdf-file-signature/) | Ismerje meg, hogyan írhat alá PDF-fájlokat intelligens kártyával az Aspose.PDF for .NET segítségével. Kövesse ezt a lépésről lépésre szóló útmutatót a biztonságos digitális aláírásokhoz. | | [Aláírás intelligens kártyával az aláírásmező használatával](./sign-with-smart-card-using-signature-field/) | Ismerje meg, hogyan írhat alá biztonságosan PDF-fájlokat intelligens kártya használatával az Aspose.PDF for .NET segítségével. Kövesse lépésről lépésre szóló útmutatónkat az egyszerű megvalósítás érdekében. | | [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 útmutató](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Ismerje meg, hogyan ellenőrizheti a PDF aláírásokat C#-ban az Aspose.PDF használatával, részletes lépésről-lépésre útmutató. | +| [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 oktatóanyag: PDF digitális aláírás ellenőrzése az Aspose.PDF segítségével](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/hungarian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/hungarian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..45aff2ca7f --- /dev/null +++ b/pdf/hungarian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-08-08 +description: PDF aláírási útmutató, amely bemutatja, hogyan lehet érvényesíteni a + PDF digitális aláírást aláírás-ellenőrzési lehetőségek és C# kód használatával – + gyors lépésről‑lépésre útmutató. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: hu +lastmod: 2026-08-08 +og_description: A PDF aláírási útmutató végigvezet a PDF digitális aláírás validálásán + az Aspose.PDF segítségével. Tanulja meg a aláírás-ellenőrzési beállítások konfigurálását + és az eredmény ellenőrzését. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF aláírási útmutató – PDF digitális aláírások ellenőrzése C#‑ban +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'PDF aláírás útmutató: PDF digitális aláírás ellenőrzése az Aspose.PDF segítségével' +url: /hu/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf aláírás oktató – PDF digitális aláírás ellenőrzése C#-ban + +Ha **pdf aláírás oktatót** keres, amely pontosan megmutatja, hogyan kell ellenőrizni egy PDF digitális aláírást, ez az útmutató mindent lefed. Látni fogja, hogyan töltsön be egy aláírt PDF‑et, hogyan konfigurálja a **signature validation options**‑t, hogyan futtassa az ellenőrzést, és hogyan jelenítse meg az eredményt – mindezt tiszta, futtatható C# kóddal. + +A PDF aláírás ellenőrzése elengedhetetlen, amikor szerződéseket, számlákat vagy bármilyen jogilag kötelező dokumentumot dolgoz fel. Ez az oktató végigvezeti a teljes munkafolyamatot, így aláírás‑ellenőrzést integrálhat saját alkalmazásaiba anélkül, hogy találgatnia kellene, mely API‑hívások szükségesek. + +## Mit fog elérni + +A tutorial végére képes lesz: + +* Betölteni egy aláírt PDF fájlt az Aspose.PDF‑vel. +* Beállítani a **signature validation options**‑t, például a hash algoritmust. +* Meghívni a `Validate` metódust a **validate pdf digital signature** ellenőrzéséhez. +* Kiírni egy egyértelmű „Signature valid” üzenetet a konzolra. + +**Előfeltételek** + +* .NET 6.0 (vagy újabb) telepítve. +* Visual Studio 2022 (vagy bármely C# IDE). +* Aspose.PDF for .NET NuGet csomag (`Aspose.Pdf`). + +> **Pro tipp:** Használja a legújabb Aspose.PDF verziót, hogy támogatott legyen a SHA‑3 algoritmus és javuljon az ellenőrzés teljesítménye. + +## 1. lépés: Az Aspose.PDF NuGet csomag telepítése + +Nyissa meg a projektet a Visual Studio‑ban, és futtassa a következő parancsot a Package Manager Console‑ban: + +```bash +Install-Package Aspose.Pdf +``` + +A csomag hozzáadja az `Aspose.Pdf` névteret, amely tartalmazza a `Document` osztályt és az aláírás‑kezelő API‑kat. + +## 2. lépés: Az aláírt PDF dokumentum betöltése + +Az első kódsor létrehozza a `Document` objektumot, amely a lemezen lévő PDF fájlt képviseli. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Miért fontos:* A `Document` osztály beolvassa a PDF struktúráját, és elérhetővé teszi a `Signatures` gyűjteményt, amely az összes beágyazott digitális aláírást tartalmazza. Ha a fájl útvonala hibás, kivétel keletkezik, ezért ellenőrizze az útvonalat a program futtatása előtt. + +## 3. lépés: Aláírás‑ellenőrzési beállítások konfigurálása + +A `SignatureValidationOptions` osztállyal testreszabhatja az ellenőrzési folyamatot. Ebben az oktatóban a hash algoritmust állítjuk be, de beállíthatja a tanúsítvány visszavonási ellenőrzést, az időbélyeg ellenőrzést és egyebeket is. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Miért fontos:* A hash algoritmusnak meg kell egyeznie azzal, amelyet az aláírás létrehozásakor használtak. Ha nem egyezik, az ellenőrzés hibát jelez, még ha az aláírás egyébként helyes is. + +## 4. lépés: Az első aláírás ellenőrzése + +A legtöbb PDF egyetlen aláírást tartalmaz, de a `Signatures` gyűjtemény több elemet is tárolhat. Ez a példa az első bejegyzést (`[0]`) ellenőrzi. A `Validate` metódus egy Boolean értékkel jelzi a sikerességet. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Szélsőséges eset:* Ha a PDF nem tartalmaz aláírást, a `document.Signatures.Count` értéke `0` lesz, és a `[0]` elérése `IndexOutOfRangeException`‑t vált ki. Védekezzen egyszerű ellenőrzéssel: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## 5. lépés: Az ellenőrzés eredményének megjelenítése + +Végül írja ki az eredményt a konzolra. Ez a lépés bemutatja a **check pdf signature** eredményt emberi olvasásra alkalmas formában. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +A program futtatásakor a következőt kell látnia: + +``` +Signature valid: True +``` + +Ha az aláírás sérült, nem támogatott algoritmust használ, vagy a tanúsítvány visszavont, a kimenet `False` lesz. + +## Teljes, futtatható példa + +Másolja az alábbi kódot egy új konzolos projektbe (`dotnet new console`), és cserélje le a `YOUR_DIRECTORY/signed.pdf` részt a saját aláírt PDF‑fájlja útvonalára. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Várható kimenet + +``` +Signature valid: True +``` + +Ha az aláírás nem sikerül az ellenőrzésen, a konzol a következőt jeleníti meg: `Signature valid: False`. + +## Gyakori kérdések és hibaelhárítás + +| Kérdés | Válasz | +|----------|--------| +| **Mi a teendő, ha a PDF más hash algoritmust használ?** | Módosítsa a `HashAlgorithm` értékét a `SignatureValidationOptions`‑ben, pl. `HashAlgorithm.SHA256`. | +| **Hogyan ellenőrzöm az összes aláírást egy több‑aláírásos PDF‑ben?** | Iteráljon a `document.Signatures` gyűjteményen, és hívja meg a `Validate` metódust minden elemre. | +| **Meg tudom vizsgálni a aláíró tanúsítvány láncának megbízhatóságát?** | Állítsa be a `validationOptions.CheckCertificateRevocation = true` értéket, és opcionálisan adjon meg egy egyedi `CertificateStore`‑t a megbízható gyökértanúsítványokkal. | +| **Ha időbélyeg ellenőrzést is szeretnék támogatni?** | Engedélyezze a `validationOptions.CheckTimestamp = true` beállítást. Az Aspose.PDF ekkor ellenőrzi a beágyazott időbélyeg token‑t. | +| **Létezik mód a részletes ellenőrzési hibák lekérésére?** | Használja a `ValidateEx(validationOptions, out ValidationResult result)` metódust; a `result` tartalmazza az `ErrorMessage` és `ErrorCode` mezőket minden hibához. | + +## Következő lépések + +* Fedezze fel a **validate pdf signature** lehetőséget több aláírás esetén a `document.Signatures` iterálásával. +* Kombinálja ezt az oktatót a **check pdf signature**‑rel egy web API‑ban, hogy valós‑időben ellenőrizze a feltöltött szerződéseket. +* Mélyedjen el a **signature validation options** részleteiben, például CRL/OCSP ellenőrzések, időbélyeg ellenőrzés és egyedi megbízhatósági tárolók. + +Most már rendelkezik egy teljes **pdf aláírás oktatóval**, amely megmutatja, hogyan **validate pdf digital signature** használatával az Aspose.PDF‑t C#‑ban. Szabadon alakítsa a kódot saját munkafolyamataihoz, adjon hozzá naplózást, vagy integrálja nagyobb dokumentum‑feldolgozó csővezetékekbe. Boldog kódolást! + +## Mi következik most? + +Az alábbi oktatók 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ódpéldákat 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. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/hungarian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..1822056a25 --- /dev/null +++ b/pdf/hungarian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: PDF-aláírás ellenőrzése C#-ban az Aspose.PDF használatával. Tanulja meg, + hogyan validálja a digitális PDF-aláírást, és hogyan listázza a PDF-aláírásokat + néhány sor kóddal. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: hu +lastmod: 2026-08-08 +og_description: PDF-aláírás ellenőrzése C#-ban az Aspose.PDF segítségével. Ez az útmutató + megmutatja, hogyan lehet érvényesíteni a digitális PDF-aláírást, listázni a PDF-aláírásokat, + és hatékonyan kezelni a kompromittált aláírásokat. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: PDF-aláírás ellenőrzése C#-ban – gyors Aspose.PDF útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: PDF-aláírás ellenőrzése C#-ban az Aspose.PDF használatával – teljes útmutató +url: /hu/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF aláírás ellenőrzése C#-ban az Aspose.PDF segítségével – teljes útmutató + +Ha .NET alkalmazásban **PDF aláírást kell ellenőrizni**, ez az útmutató egy tömör módszert mutat be az Aspose.PDF használatával. Megtanulod, hogyan **validáld a digitális aláírást PDF-ben**, **listázd a PDF aláírásokat**, és hogyan észleld a kompromittált aláírásokat néhány kódsorral. + +A tutorial minden lépést lefed a könyvtár telepítésétől a széljegyek kezeléséig, mint például az aláíratlan dokumentumok vagy titkosított PDF-ek. A végére képes leszel aláírás-ellenőrzést integrálni bármely C# projektbe, biztosítva a bejövő PDF fájlok hitelességét. + +**Előfeltételek** + +- .NET 6.0 vagy újabb (a kód .NET Framework 4.6+ esetén is működik). +- Alapvető ismeretek C#-ban és Visual Studio-ban (vagy bármely általad preferált IDE-ben). +- Aspose.PDF for .NET licenc (az ingyenes próba verzió értékelésre használható). + +Ha megfelelsz ezeknek a követelményeknek, készen állsz a PDF aláírások ellenőrzésének megkezdésére. + +## PDF aláírás ellenőrzése – a projekt beállítása + +1. **Add the Aspose.PDF csomag** + Nyisd meg a Package Manager Console-t és futtasd: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importáld a szükséges névtereket** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## PDF dokumentum betöltése + +Az első funkcionális lépés a kívánt PDF megnyitása ellenőrzéshez. Az Aspose.PDF a fájlt memóriába olvassa, lehetővé téve az aláírások lekérdezését. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Miért fontos** – A dokumentum `using` blokkban történő betöltése garantálja, hogy a fájlkezelő gyorsan felszabadul, megelőzve a fájl‑zárolási problémákat hosszú futású szolgáltatásokban. + +## PDF aláírások listázása + +Mielőtt egy aláírást validálnál, szeretnéd tudni, hány aláírás van jelen. Ez a lépés bemutatja a **list PDF signatures** képességet. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Magyarázat** + +- `document.Signatures` egy `Signature` objektumok gyűjteményét adja vissza. +- `Count` megmutatja, hány aláírás létezik. +- Minden `Signature` metaadatokat (például `Id`, `SignatureType` és `Reason`) tesz elérhetővé, amelyek hasznosak lehetnek audit naplózáshoz. + +**Széljegy** – Ha a PDF-nek nincs aláírása, a `Count` `0` lesz, és a ciklus nem fut le. Ezt a helyzetet elegánsan kezelheted: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Digitális aláírás PDF validálása – kompromittált aláírások észlelése + +Most, hogy felsorolhatod az aláírásokat, a fő feladat a **verify PDF signature** integritás ellenőrzése. Az Aspose.PDF biztosítja az `IsCompromised` tulajdonságot, amely `true` értéket ad, ha az aláírás kriptográfiai hash-e már nem egyezik a dokumentum tartalmával. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Miért működik** + +- `Signature.IsCompromised` teljes kriptográfiai validációt végez a beágyazott tanúsítványlánc használatával. +- Az `Any` LINQ operátor az első kompromittált aláírásnál leáll, így a ellenőrzés hatékony marad még sok aláírást tartalmazó dokumentumok esetén is. + +### Több aláírás egyedi kezelése + +Ha tudni szeretnéd, melyik konkrét aláírás hibás, iterálj az `Any` helyett: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tipp:** Tárold a validációs eredményt a `sig.Id`-vel együtt egy adatbázisban a későbbi forenzikus elemzéshez. + +## Eredmények kiírása és széljegyek kezelése + +Az alábbiakban egy teljes, futtatható program látható, amely egyesíti a fenti lépéseket. Betölti a PDF-et, listázza az összes aláírást, validálja őket, és egyértelmű eredményt ír ki. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Várható kimenet (érvényes aláírások)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Várható kimenet (kompromittált aláírás)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Gyakori buktatók és hogyan kerüld el őket + +| Pitfall | Solution | +|---------|----------| +| A PDF jelszóval védett. | Add meg a jelszót a `document.Encrypt.Decrypt(password)` hívással a `Signatures` elérése előtt. | +| Nincs beállítva Aspose.PDF licenc. | `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` használata az értékelő vízjelek elkerüléséhez. | +| Nagy PDF-ek magas memóriahasználatot okoznak. | A fájlt streaming módban dolgozd fel (`Document.Load(stream)`) a teljes fájl egyszerre történő betöltése helyett. | + +## Következtetés + +Most már tudod, hogyan **verify PDF signature** C#-ban az Aspose.PDF használatával, hogyan **validate digital signature PDF**, és hogyan **list PDF signatures** jelentéshez vagy audit célokra. A teljes példa bemutatja a dokumentum betöltését, aláírásainak felsorolását, minden egyes aláírás ellenőrzését a kompromittáltságra, és a tipikus széljegyek kezelését. + +A következő lépések, amelyeket érdemes felfedezni: + +- **Validate timestamp tokens** annak biztosítására, hogy az aláírás a tanúsítvány lejárta előtt készült. +- **Extract signer certificates** (`sig.Certificate`) egyedi bizalmi tároló validáláshoz. +- **Integrate with ASP.NET Core** a feltöltött, ellenőrzésen nem átesett PDF-ek automatikus elutasításához. + +Nyugodtan kísérletezz több aláírással, egyedi validációs logikával vagy alternatív PDF könyvtárakkal. Ha hasznosnak találtad ezt az útmutatót, oszd meg a csapattagokkal vagy adj hozzá saját tippeket a megjegyzésekben. + +## Mit legyen a következő tanulnivalód? + +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 teljes működő kódpéldákat tartalmaz lépésről‑lépésre magyarázatokkal, hogy elsajátíthasd a további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan ellenőrizzük a PDF-et – PDF aláírás validálása Aspose-szal](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [PDF aláírás ellenőrzése C#-ban – Teljes útmutató a digitális aláírás PDF validálásához](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Digitális aláírás ellenőrzése](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/hungarian/net/text-operations/_index.md index 6b3c42fdef..ffd119d10a 100644 --- a/pdf/hungarian/net/text-operations/_index.md +++ b/pdf/hungarian/net/text-operations/_index.md @@ -164,6 +164,9 @@ Kód oktatóanyag az Aspose.PDF Nethez ### [Szöveg formázása címkézett PDF-ekben az Aspose.PDF for .NET használatával | Útmutató a hozzáférhető és esztétikus PDF-készítéshez](./style-text-tagged-pdfs-aspose-pdf-net/) Tanulja meg, hogyan formázhatja a címkézett PDF dokumentumok szövegét az Aspose.PDF for .NET segítségével. Ez az útmutató a telepítést, a technikákat és a gyakorlati alkalmazásokat ismerteti az akadálymentesítés javítása érdekében. +### [Hogyan összefoglaljunk PDF-et az Aspose.Pdf.AI-val – útmutató](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Ismerje meg, hogyan lehet összefoglalni PDF dokumentumokat az Aspose.Pdf.AI segítségével. + ## További források - [Aspose.PDF a hálózati dokumentációhoz](https://docs.aspose.com/pdf/net/) diff --git a/pdf/hungarian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/hungarian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..cbdf280587 --- /dev/null +++ b/pdf/hungarian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-08 +description: PDF összefoglalása az Aspose.Pdf.AI segítségével – tanulja meg, hogyan + lehet AI-val PDF-et összefoglalni, PDF-összefoglalót generálni, és az összefoglalót + PDF-ként menteni. Teljes kód és legjobb gyakorlatok. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: hu +lastmod: 2026-08-08 +og_description: Hogyan lehet összefoglalni a PDF-et az Aspose.Pdf.AI segítségével. + Ez az útmutató megmutatja, hogyan lehet AI-val összefoglalni a PDF-et, PDF-összefoglalót + generálni, és néhány C# sorral PDF-ként menteni az összefoglalót. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Hogyan lehet összefoglalni a PDF-et az Aspose.Pdf.AI segítségével – lépésről + lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Hogyan lehet összefoglalni a PDF-et az Aspose.Pdf.AI-val – útmutató +url: /hu/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan összefoglaljunk PDF-et az Aspose.Pdf.AI‑val – útmutató + +Ha gyorsan és megbízhatóan szeretne **PDF-et összefoglalni**, hagyhatja, hogy egy AI modell végezze a nehéz munkát. Ez az útmutató pontosan megmutatja, hogyan lehet PDF-et összefoglalni AI‑val, PDF‑összefoglalót generálni, és az összefoglalót PDF‑ként menteni az Aspose.Pdf.AI SDK for .NET használatával. Teljes, futtatható példát és minden sor magyarázatát kapja, hogy a megoldást saját projektjeihez igazíthassa. + +Az útmutató a következőket fedi le: + +* A forrásmappa és az API‑kulcs előkészítése +* Egy `OpenAIClient` létrehozása, amely a modellel kommunikál +* Összefoglalási beállítások konfigurálása, például temperature és dokumentum útvonal +* Egy `SummaryCopilot` felépítése és az összefoglaló szöveg aszinkron lekérése +* A generált összefoglaló visszaírása PDF‑fájlba + +Nem szükséges külső szolgáltatás az OpenAI végponton kívül, a kód .NET 6+ és Aspose.Pdf.AI 23.7 (vagy újabb) verzióval működik. + +## Előkövetelmények + +* **.NET 6 SDK** (vagy bármely újabb .NET verzió) +* **Aspose.Pdf.AI for .NET** – telepítés NuGet‑en: `dotnet add package Aspose.Pdf.AI` +* Egy **OpenAI API kulcs** a kívánt modellhez való hozzáféréssel (pl. `gpt‑4o`) +* Egy PDF‑fájl, amelyet össze szeretne foglalni (a példában `SampleDocument.pdf` van használva) + +Győződjön meg róla, hogy a `dataDirectory`‑ben megadott mappa létezik, és az alkalmazásnak van olvasási/írási jogosultsága. + +## 1. lépés: A projekt struktúrájának beállítása + +Hozzon létre egy konzolos projektet (vagy integrálja a kódot bármely meglévő .NET alkalmazásba). A minimális `Program.cs` így néz ki: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Miért fontos ez a struktúra + +* **`await using`** automatikusan felszabadítja az `OpenAIClient`‑et, ezáltal lezárja a HTTP‑kapcsolatokat. +* **`Path.Combine`** operációs rendszer‑független útvonalakat épít, elkerülve a Windows és Linux közti hibákat. +* **Temperature** a kreativitást szabályozza; a `0.5` kiegyensúlyozott, tényszerű összefoglalót ad. +* **`GetSummaryAsync`** egyszerű szöveget ad vissza, míg a **`SaveSummaryAsync`** megfelelő PDF‑et hoz létre, amely megőrzi a betűtípusokat és a layoutot. + +## 2. lépés: A összefoglalási beállítások megértése + +Az `OpenAISummaryCopilotOptions` osztály lehetővé teszi a összefoglalási folyamat finomhangolását: + +| Beállítás | Cél | Tipikus értékek | +|-----------|-----|-----------------| +| `WithTemperature(double)` | A véletlenszerűséget szabályozza. `0.0` = determinisztikus, `1.0` = nagyon kreatív. | `0.3‑0.7` üzleti dokumentumokhoz | +| `WithDocument(string)` | Az eredeti PDF elérési útja. Olvasható fájlnak kell lennie. | Bármely abszolút vagy relatív útvonal | +| `WithPrompt(string)` *(optional)* | Egyedi prompt a modell irányításához. | “Összefoglalja a legfontosabb megállapításokat 150 szóban.” | + +Ha **nagy PDF‑ekkel** (10 MB felett vagy sok oldallal) dolgozik, érdemes a dokumentumot kisebb darabokra bontani az összefoglalás előtt, hogy elkerülje a token‑korlát hibákat. Az SDK nem darabol automatikusan; használhatja az `PdfDocument`‑et az `Aspose.Pdf`‑ból az oldalak kinyeréséhez és egyesével történő feldolgozásához. + +## 3. lépés: A kód futtatása és a kimenet ellenőrzése + +1. Helyezze a `SampleDocument.pdf`‑et a hivatkozott `Data` mappába. +2. Cserélje le a `"YOUR_API_KEY"`‑t a saját OpenAI kulcsára. +3. Futtassa a `dotnet run` parancsot. + +A konzolon két szekciót kell látnia: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Nyissa meg a `Summary_out.pdf`‑et bármely PDF‑olvasóval – ugyanazt az összefoglaló szöveget tartalmazza, alapértelmezett betűtípussal. A PDF teljesen kereshető, mivel az SDK a szöveget szabványos PDF‑oldalként ágyazza be. + +## 4. lépés: Gyakori változatok és szélsőséges esetek kezelése + +### Csak a dokumentum egy részének összefoglalása + +Ha egy adott fejezetet szeretne **PDF‑et összefoglalni AI‑val**, először vonja ki azt a tartományt: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Ezután állítsa a `WithDocument`‑et a `Chapter5.pdf`‑re. + +### Az összefoglaló hosszának beállítása + +A hossz befolyásolható egy egyedi prompt hozzáadásával: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API hibák kezelése + +Hálózati hibák vagy kvóta‑korlátok `Aspose.Pdf.AI.Exceptions.AIException`‑t váltanak ki. Tegye a hívást egy `try / catch` blokkba: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Az összefoglaló mentése egyedi elrendezésben + +A `SaveSummaryAsync` egyszerű szöveget ír. Ha egyedi stílusú PDF‑et (cím, fejléc vagy márka) szeretne, hozzon létre egy új `PdfDocument`‑et, és szúrja be manuálisan az összefoglalót: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## 5. lépés: Teljesítmény tippek és legjobb gyakorlatok + +* **Használja újra az `OpenAIClient`‑et** több összefoglaláshoz ugyanabban a folyamatban – a kliens létrehozása olcsó, de a mögöttes `HttpClient` újrafelhasználása csökkenti a socket‑kimerülést. +* **Cache‑elje az összefoglalót**, ha a forrás‑PDF nem változik; a szöveget tárolhatja adatbázisban, és kihagyhatja az API‑hívást. + +## Mihez érdemes tovább tanulni? + +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 teljes, működő kódrészleteket tartalmaz lépésről‑lépésre magyarázatokkal, 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. + +- [Hogyan vonjunk ki és mentsünk el specifikus PDF oldalakat az Aspose.PDF for .NET használatával – átfogó útmutató](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Hogyan vonjunk ki és mentsünk PDF mellékleteket az Aspose.PDF .NET használatával – átfogó útmutató](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Hogyan konvertáljunk HTML-t PDF-re az Aspose.PDF .NET használatával – teljes útmutató](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/conversion-export/_index.md b/pdf/indonesian/net/conversion-export/_index.md index 44fb8199f4..317c699b38 100644 --- a/pdf/indonesian/net/conversion-export/_index.md +++ b/pdf/indonesian/net/conversion-export/_index.md @@ -219,11 +219,14 @@ Pelajari cara mengoptimalkan konversi PDF ke HTML menggunakan Aspose.PDF untuk . Pelajari cara mengonversi dokumen PDF ke HTML dengan gambar PNG eksternal menggunakan Aspose.PDF untuk .NET. Panduan ini memastikan pelestarian tata letak dan pengoptimalan kinerja web. ### [Konversi PDF ke HTML dengan Aspose.PDF .NET: Panduan Lengkap](./aspose-pdf-net-pdf-to-html-conversion/) -Kuasai konversi PDF ke HTML menggunakan Aspose.PDF untuk .NET. Tingkatkan aksesibilitas dan keterlibatan dokumen dengan opsi yang dapat disesuaikan. +Kuasai konversi PDF ke HTML menggunakan Aspose.PDF .NET. Tingkatkan aksesibilitas dan keterlibatan dokumen dengan opsi yang dapat disesuaikan. ### [Konversi PDF ke HTML dengan Aspose.PDF untuk .NET](./pdf-to-html-conversion-aspose-dot-net/) Tutorial kode untuk Aspose.PDF Net +### [Simpan PDF sebagai HTML dengan Aspose.PDF – panduan langkah demi langkah](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Pelajari cara menyimpan file PDF menjadi HTML menggunakan Aspose.PDF dengan panduan langkah demi langkah. + ### [Konversi PDF ke TIFF dalam .NET Menggunakan Aspose.PDF: Panduan Langkah demi Langkah](./pdf-to-tiff-conversion-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. diff --git a/pdf/indonesian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/indonesian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..cb4d626120 --- /dev/null +++ b/pdf/indonesian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-08-08 +description: Simpan PDF sebagai HTML menggunakan Aspose.PDF di C#. Pelajari cara mengonversi + PDF ke HTML, melewati gambar raster, dan menangani kasus tepi umum. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: id +lastmod: 2026-08-08 +og_description: Simpan PDF sebagai HTML menggunakan Aspose.PDF. Panduan ini menunjukkan + cara mengonversi PDF ke HTML, melewatkan gambar raster, dan menghindari jebakan + umum. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Simpan PDF sebagai HTML dengan Aspose.PDF – tutorial lengkap C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Simpan PDF sebagai HTML dengan Aspose.PDF – panduan langkah demi langkah +url: /id/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Simpan PDF sebagai HTML dengan Aspose.PDF – panduan langkah demi langkah + +Jika Anda perlu **menyimpan PDF sebagai HTML** dengan cepat, tutorial ini menunjukkan secara tepat cara melakukannya dengan Aspose.PDF untuk .NET. Baik Anda sedang membangun aplikasi web penampil dokumen atau mengekspor laporan untuk pengindeksan yang ramah SEO, Anda akan melihat solusi lengkap yang dapat dijalankan yang mengonversi PDF ke HTML sambil memberi Anda kontrol detail atas gambar raster. + +Selain tugas utama, kami juga akan membahas opsi **aspose pdf html conversion** yang memungkinkan Anda melewatkan gambar raster, menyesuaikan penanganan CSS, dan mengelola dokumen besar secara efisien. Pada akhir panduan ini Anda akan memiliki program mandiri yang dapat Anda masukkan ke dalam proyek .NET apa pun. + +## Prasyarat + +* .NET 6.0 SDK atau yang lebih baru (kode ini juga bekerja dengan .NET Core dan .NET Framework) +* Visual Studio 2022 atau IDE apa pun yang mendukung C# +* Lisensi Aspose.PDF untuk .NET (versi percobaan gratis dapat digunakan untuk evaluasi) +* File PDF bernama `report.pdf` yang ditempatkan di folder yang dapat Anda referensikan dari kode + +Tidak ada paket NuGet tambahan yang diperlukan selain `Aspose.Pdf`. + +## Langkah 1: Instal paket NuGet Aspose.PDF + +Buka terminal di folder proyek Anda dan jalankan: + +```bash +dotnet add package Aspose.Pdf +``` + +Paket ini menambahkan namespace `Aspose.Pdf`, yang berisi kelas `Document` dan tipe `HtmlSaveOptions` yang digunakan untuk operasi **convert pdf to html**. + +## Langkah 2: Buat proyek console dan tambahkan direktif using + +Buat aplikasi console baru jika Anda belum memilikinya: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Kemudian buka `Program.cs` dan tambahkan namespace yang diperlukan: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Direktif ini memberi Anda akses ke API PDF inti dan opsi penyimpanan HTML yang mengontrol proses **aspose convert pdf html**. + +## Langkah 3: Muat dokumen PDF + +Baris operasional pertama membaca PDF sumber ke dalam objek `Aspose.Pdf.Document`. Objek ini mewakili seluruh file PDF dalam memori dan menyediakan metode untuk menyimpan, mengedit, dan mengekstrak konten. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Mengapa ini penting*: Memuat dokumen sekali menjaga penggunaan memori tetap dapat diprediksi, terutama untuk PDF besar. Jika file tidak ditemukan, Aspose akan melempar `FileNotFoundException`, jadi pastikan jalurnya benar. + +## Langkah 4: Konfigurasikan opsi penyimpanan HTML + +`HtmlSaveOptions` memungkinkan Anda menyesuaikan secara detail bagaimana PDF dikonversi. Dalam tutorial ini kami melewatkan gambar raster untuk menjaga output tetap ringan, tetapi Anda dapat mengubah mode menjadi `EmbedAll` jika membutuhkannya. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Poin penting**: + +* `RasterImagesSavingMode.Skip` memberi tahu Aspose untuk mengabaikan gambar bitmap (JPEG, PNG) selama konversi. Ini ideal ketika PDF sumber berisi halaman yang dipindai yang tidak Anda perlukan dalam tampilan HTML. +* Anda dapat beralih ke `EmbedAll` atau `External` jika Anda ingin gambar disimpan sebagai file terpisah. +* Properti `ResourcesFolder` menjadi relevan hanya ketika gambar disimpan secara eksternal. + +## Langkah 5: Simpan dokumen sebagai HTML + +Sekarang Anda menulis file HTML ke disk menggunakan opsi yang telah dikonfigurasi. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Setelah pemanggilan ini selesai, `report.html` berisi konten teks, grafik vektor, dan tata letak yang dipertahankan dari PDF asli, tetapi tanpa gambar raster apa pun. Anda dapat membuka file tersebut di browser untuk memverifikasi hasilnya. + +## Output yang diharapkan + +Saat Anda membuka `report.html` di Chrome atau Edge, Anda akan melihat: + +* Semua judul, paragraf, dan bentuk vektor ditampilkan dengan benar. +* Tidak ada tag `` untuk gambar raster (dihilangkan karena mode `Skip`). +* CSS yang bersih dan minimal, baik inline maupun dalam stylesheet terpisah, tergantung pada opsi yang Anda pilih. + +Jika Anda perlu memastikan bahwa gambar dihilangkan, periksa sumber halaman (`Ctrl+U`). Anda tidak akan menemukan entri ``. + +## Langkah 6: Tangani kasus tepi umum + +### 6.1 PDF Besar (> 100 MB) + +Untuk file yang sangat besar, aktifkan streaming untuk mengurangi tekanan memori: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming menulis potongan HTML langsung ke disk, mencegah seluruh dokumen disimpan dalam memori. + +### 6.2 PDF yang dilindungi kata sandi + +Jika PDF sumber dienkripsi, berikan kata sandi sebelum menyimpan: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Mencoba menyimpan tanpa mendekripsi akan melempar `InvalidPasswordException`. + +### 6.3 Karakter Unicode + +Aspose.PDF secara otomatis menyematkan font Unicode, tetapi Anda dapat memaksa font tertentu untuk rendering yang konsisten: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Penamaan file khusus untuk banyak halaman + +Jika Anda menginginkan setiap halaman PDF sebagai file HTML terpisah, atur: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Ini akan membuat `report_page_1.html`, `report_page_2.html`, dll., yang dapat berguna untuk paginasi dalam aplikasi web. + +## Contoh lengkap yang dapat dijalankan + +Berikut adalah program lengkap yang menggabungkan semua langkah yang dibahas. Salin ke `Program.cs`, sesuaikan jalur, dan jalankan `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verifikasi**: Setelah dijalankan, konsol mencetak pesan keberhasilan. Buka file HTML yang dihasilkan di browser untuk memastikan bahwa teks dan grafik vektor muncul dengan benar dan gambar raster dihilangkan. + +## Tips profesional dan jebakan + +* **Tip pro**: Jika Anda kemudian membutuhkan gambar raster, ubah `RasterImagesSavingMode` menjadi `External` dan atur `ResourcesFolder`. Ini akan membuat sub‑folder `images` dengan bitmap yang diekstrak. +* **Waspada**: Menggunakan mode default `Skip` pada PDF yang sangat bergantung pada gambar yang dipindai akan menghasilkan area kosong di tempat gambar tersebut seharusnya. Selalu uji dengan sampel representatif dokumen Anda. +* **Tip kinerja**: Menggunakan kembali satu instance `HtmlSaveOptions` untuk beberapa dokumen mengurangi overhead pembuatan objek dalam konversi batch. +* **Pemeriksaan versi**: API yang ditampilkan bekerja dengan Aspose.PDF untuk .NET versi 23.9 dan yang lebih baru. Versi sebelumnya mungkin menggunakan `HtmlSaveOptions.RasterImagesSavingMode` dengan nama enum yang sedikit berbeda. + +## Kesimpulan + +Anda sekarang tahu cara **menyimpan PDF sebagai HTML** menggunakan Aspose.PDF, cara mengontrol penanganan gambar raster, dan cara mengatasi tantangan umum seperti file besar, perlindungan kata sandi, serta output HTML per halaman. Solusi lengkap ini memungkinkan Anda mengintegrasikan konversi PDF‑ke‑HTML ke dalam aplikasi C# apa pun dengan percaya diri. + +### Apa selanjutnya? + +* Jelajahi **aspose pdf html conversion** untuk menyematkan font dan menyesuaikan CSS. +* Gabungkan konversi ini dengan API web untuk menyajikan HTML sesuai permintaan. +* Coba arah sebaliknya—**convert pdf to html** dan kemudian kembali ke PDF—untuk memvalidasi kesetiaan putar‑balik. + +Silakan bereksperimen dengan opsi-opsi tersebut, dan bagikan temuan Anda di komentar atau di forum Aspose. Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang terkait erat yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber mencakup contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan menjelajahi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Konversi PDF ke HTML di .NET Menggunakan Aspose.PDF Tanpa Menyimpan Gambar](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [Konversi 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/indonesian/net/digital-signatures/_index.md index 9de5e0f7f7..58bd3f7de3 100644 --- a/pdf/indonesian/net/digital-signatures/_index.md +++ b/pdf/indonesian/net/digital-signatures/_index.md @@ -47,6 +47,8 @@ Pelajari cara memverifikasi tanda tangan digital dalam file PDF menggunakan Aspo ### [Verifikasi Tanda Tangan PDF di C# – Panduan Lengkap untuk Memvalidasi Tanda Tangan Digital PDF](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) Panduan langkah demi langkah untuk memverifikasi tanda tangan digital pada file PDF menggunakan C# dan Aspose.PDF. +### [Cara Memvalidasi PDF dengan Aspose.PDF – memeriksa keabsahan tanda tangan PDF di C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Panduan langkah demi langkah untuk memvalidasi tanda tangan PDF menggunakan Aspose.PDF di C#. ### [Kuasai Penandatanganan & Verifikasi PDF dengan Aspose.PDF .NET](./mastering-aspose-pdf-net-sign-verify-smart-card-certificates/) Tutorial kode untuk Aspose.PDF Net @@ -56,6 +58,7 @@ Pelajari cara memverifikasi tanda tangan digital dalam file PDF menggunakan Aspo ### [Cara Memverifikasi PDF – Validasi Tanda Tangan PDF dengan Aspose](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) Panduan langkah demi langkah untuk memverifikasi dan memvalidasi tanda tangan PDF menggunakan Aspose. + ### [Muat Dokumen PDF C# – Konversi ke PDF/X‑4 & Daftar Tanda Tangan](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Pelajari cara memuat dokumen PDF, mengonversinya ke format PDF/X‑4, dan menampilkan daftar tanda tangan menggunakan C# dan Aspose.PDF. diff --git a/pdf/indonesian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/indonesian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..27b69cc8bb --- /dev/null +++ b/pdf/indonesian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Cara memvalidasi PDF menggunakan Aspose.PDF dan memvalidasi tanda tangan + digital PDF. Ikuti panduan langkah demi langkah ini untuk memeriksa tanda tangan + PDF dengan cepat. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: id +lastmod: 2026-08-08 +og_description: Cara memvalidasi PDF menggunakan Aspose.PDF. Pelajari cara memvalidasi + tanda tangan digital PDF dan memeriksa keabsahan tanda tangan PDF dalam beberapa + baris kode C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Cara memvalidasi PDF – periksa keabsahan tanda tangan PDF dengan Aspose.PDF + di C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Cara memvalidasi PDF dengan Aspose.PDF – memeriksa keabsahan tanda tangan PDF + di C# +url: /id/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara memvalidasi PDF dengan Aspose.PDF – memeriksa keabsahan tanda tangan pdf di C# + +Jika Anda perlu **how to validate PDF** file yang berisi tanda tangan digital, tutorial ini menunjukkan solusi lengkap. Anda akan belajar memuat PDF, membuat validator sertifikat, dan memeriksa keabsahan tanda tangan pdf dengan Aspose.PDF untuk .NET. + +Memvalidasi tanda tangan digital PDF adalah kebutuhan umum untuk kepatuhan, penagihan, dan pertukaran dokumen yang aman. Pada akhir panduan ini Anda dapat dengan yakin memverifikasi apakah PDF yang ditandatangani dapat dipercaya, dan Anda akan memahami cara menangani kasus tepi umum seperti sertifikat yang hilang atau beberapa tanda tangan. + +## Prerequisites + +Sebelum Anda memulai, pastikan Anda memiliki: + +- .NET 6.0 atau yang lebih baru terpasang +- IDE seperti Visual Studio 2022 (editor apa pun yang mendukung C# dapat digunakan) +- Salinan berlisensi **Aspose.PDF for .NET** (versi percobaan gratis dapat digunakan untuk evaluasi) +- File PDF yang ditandatangani (`signed.pdf`) dan, jika tanda tangan bergantung pada CA pribadi, sertifikat tepercaya yang bersangkutan (`trustedCertificate.pfx`) + +Tidak ada paket NuGet tambahan yang diperlukan selain `Aspose.PDF`. + +## Step 1: Install Aspose.PDF + +Buka terminal di folder proyek Anda dan jalankan: + +```bash +dotnet add package Aspose.PDF +``` + +Perintah ini menambahkan pustaka Aspose.PDF terbaru, yang berisi kelas `Document` dan `CertificateValidator` yang akan digunakan nanti. + +## Step 2: Load the PDF document + +Memuat PDF adalah operasi pertama yang Anda lakukan ketika **how to load pdf** secara programatis. Konstruktor `Document` menerima jalur file, aliran, atau array byte. Menggunakan jalur lengkap membuat contoh menjadi jelas. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Mengapa ini penting:** Objek `Document` mewakili seluruh file PDF dalam memori. Tanpa memuat file, Anda tidak dapat mengakses koleksi `Signatures`, yang diperlukan untuk **check pdf signature** data. + +## Step 3: Prepare the certificate validator + +Tanda tangan digital hanya dipercaya jika sertifikat penandatangan berantai ke akar yang Anda percayai. `CertificateValidator` memungkinkan Anda menunjuk Aspose.PDF ke penyimpanan sertifikat tepercaya atau file PFX tertentu. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Jika PDF Anda menggunakan CA publik yang sudah dipercaya Windows, Anda dapat menghilangkan `certPath` dan menginstansiasi `CertificateValidator` dengan konstruktor defaultnya. Menyediakan PFX khusus berguna untuk lingkungan PKI internal. + +## Step 4: Validate the first digital signature + +Sebuah PDF dapat berisi beberapa tanda tangan. Untuk kesederhanaan, tutorial ini memvalidasi tanda tangan pertama (`Signatures[0]`). Metode `Validate` mengembalikan `true` ketika tanda tangan secara kriptografis utuh **dan** sertifikat penandatangan dipercaya. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Apa yang terjadi di balik layar:** +- Metode memeriksa hash konten yang ditandatangani terhadap nilai tanda tangan. +- Membuat rantai sertifikat menggunakan validator yang disediakan. +- Status pencabutan (CRL/OCSP) dievaluasi jika validator dikonfigurasi untuk itu. + +### Handling multiple signatures + +Jika PDF Anda berisi lebih dari satu tanda tangan, iterasikan koleksi `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Pola ini memungkinkan Anda **check pdf signature** pada setiap halaman dan melaporkan hasil masing‑masing. + +## Step 5: Output the validation result + +Akhirnya, tuliskan hasilnya ke konsol. Pada kode produksi Anda mungkin akan mencatat hasil atau melempar pengecualian untuk tanda tangan yang tidak valid. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +atau + +``` +Invalid +``` + +Pesan mencerminkan nilai boolean yang dikembalikan oleh `Validate`. Hasil “Invalid” dapat menunjukkan dokumen yang telah diubah, sertifikat yang tidak dipercaya, atau sertifikat penandatangan yang kedaluwarsa. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +Jika Anda menerima `Invalid` dan tahu tanda tangan seharusnya dipercaya, pastikan akar sertifikat yang tepat disediakan ke `CertificateValidator`. Gunakan overload yang menerima `X509Certificate2Collection` untuk beberapa akar. + +### 2. Signature with external references +Beberapa tanda tangan mencakup konten eksternal (misalnya file terlampir). Pastikan sumber daya eksternal dapat diakses; jika tidak, verifikasi hash akan gagal. + +### 3. Time‑stamp validation +Sebuah tanda tangan dapat menyertakan token time‑stamp. Untuk memvalidasinya, konfigurasikan validator agar memeriksa sertifikat otoritas time‑stamp (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +Memuat PDF berukuran ratusan halaman dapat mengonsumsi memori. Jika Anda hanya membutuhkan data tanda tangan, gunakan `PdfFileEditor` untuk mengekstrak kamus tanda tangan tanpa merender halaman. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +Instansi `Document` tidak thread‑safe. Buat `Document` baru per thread saat memvalidasi banyak PDF secara paralel. + +## Full, runnable example + +Berikut adalah program lengkap yang dapat Anda salin, tempel, dan jalankan setelah memperbarui jalur file. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Menjalankan program** mencetak satu baris untuk setiap tanda tangan, dengan jelas menunjukkan apakah PDF lulus pemeriksaan **validate pdf digital signature**. + +## Conclusion + +Anda kini tahu **how to validate PDF** file yang berisi tanda tangan digital menggunakan Aspose.PDF untuk .NET. Tutorial ini mencakup memuat PDF, mengonfigurasi validator sertifikat, memeriksa keabsahan tanda tangan pdf, menangani beberapa tanda tangan, dan memecahkan masalah umum. + +Selanjutnya, jelajahi topik terkait seperti **how to sign PDF**, **how to add timestamp tokens**, dan **how to extract signed content**. Ekstensi ini memungkinkan Anda membangun alur kerja dokumen aman end‑to‑end lengkap dalam C#. + +--- + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/indonesian/net/document-conversion/_index.md index f7039484a0..822670741f 100644 --- a/pdf/indonesian/net/document-conversion/_index.md +++ b/pdf/indonesian/net/document-conversion/_index.md @@ -57,6 +57,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [XML Ke PDFTetapkan Jalur Gambar](./xml-to-pdfset-image-path/) | Pelajari cara mengonversi XML ke PDF dengan mudah menggunakan Aspose.PDF untuk .NET. Panduan terperinci ini memandu Anda melalui proses langkah demi langkah, dari penyiapan hingga penyelesaian. Bahasa Indonesia: | [XPS Ke PDF](./xps-to-pdf/) Pelajari cara mengonversi file XPS ke PDF menggunakan Aspose.PDF untuk .NET dengan tutorial langkah demi langkah ini. Sempurna untuk pengembang dan penggemar dokumen. | | [Konversi PDF ke PDF/X‑4 dalam C#](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Pelajari cara mengonversi PDF ke PDF/X‑4 menggunakan Aspose.PDF untuk .NET dengan contoh kode C# langkah demi langkah. | +| [Tutorial konversi PDF/X‑4 – Tetapkan standar PDF dan konversi PDF menggunakan Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Pelajari cara menetapkan standar PDF/X‑4 dan mengonversi PDF menggunakan Aspose.PDF untuk .NET. | | [Tutorial PDF ke PNG – Mengonversi Halaman PDF ke PNG dalam C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Pelajari cara mengonversi halaman PDF menjadi gambar PNG menggunakan Aspose.PDF untuk .NET dengan contoh kode C# langkah demi langkah. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/indonesian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..3763703a41 --- /dev/null +++ b/pdf/indonesian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,228 @@ +--- +category: general +date: 2026-08-08 +description: Tutorial konversi pdfx4 yang menunjukkan cara mengatur standar PDF ke + PDF/X‑4 dan mengonversi PDF dengan Aspose untuk konversi format yang dapat diandalkan. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: id +lastmod: 2026-08-08 +og_description: Tutorial konversi pdfx4 menjelaskan cara mengatur standar PDF ke PDF/X‑4 + dan melakukan konversi PDF yang andal menggunakan Aspose di C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Tutorial konversi pdfx4 – atur standar PDF dan konversi PDF menggunakan + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Tutorial konversi pdfx4 – atur standar PDF dan konversi PDF menggunakan Aspose +url: /id/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial konversi pdfx4 – set standar PDF dan konversi PDF menggunakan Aspose + +Jika Anda membutuhkan **pdfx4 conversion tutorial**, panduan ini akan membawa Anda melalui proses lengkap mengatur standar PDF menjadi PDF/X‑4 dan mengonversi PDF menggunakan Aspose. Baik Anda menyiapkan file siap cetak maupun memastikan kepatuhan arsip jangka panjang, Anda akan mempelajari alur kerja **aspose pdf format conversion** yang andal dan bekerja dengan .NET 6 dan versi lebih baru. + +Tutorial ini mencakup semua hal mulai dari penyiapan proyek hingga penanganan kasus tepi seperti file sumber yang hilang atau fitur yang tidak didukung. Pada akhir artikel Anda akan memiliki program C# yang berdiri sendiri yang menghasilkan file yang mematuhi PDF/X‑4 siap untuk alur kerja berikutnya. + +## Prasyarat + +Sebelum Anda memulai, pastikan Anda memiliki: + +- .NET 6 SDK atau yang lebih baru terpasang ([download here](https://dotnet.microsoft.com/download)) +- Lisensi Aspose.PDF untuk .NET yang valid (versi percobaan gratis dapat digunakan untuk pengujian) +- Visual Studio 2022, VS Code, atau IDE apa pun yang mendukung pengembangan .NET +- File PDF sumber yang ingin Anda konversi (letakkan di folder yang diketahui) + +Persyaratan ini memastikan kode berjalan tanpa konfigurasi tambahan. + +## Langkah 1: Buat proyek konsol .NET baru + +Buka terminal dan jalankan perintah berikut untuk membuat aplikasi konsol bernama `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Tambahkan paket NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Paket `Aspose.Pdf` menyediakan kelas `Document` dan `PdfFormatConversionOptions` yang diperlukan untuk operasi **convert pdf pdfx4**. + +## Langkah 2: Tulis kode konversi + +Buka `Program.cs` (atau `Program.cs` jika Anda menggunakan pernyataan top‑level baru) dan ganti isinya dengan contoh lengkap di bawah ini. Kode tersebut mendemonstrasikan **set pdf standard** ke PDF/X‑4, melakukan konversi, dan menyertakan penanganan error untuk jebakan umum. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Mengapa setiap bagian penting + +- **Argument validation** mencegah program crash ketika pengguna lupa menyertakan jalur file. +- **`Document` loading** melempar pengecualian yang jelas jika PDF sumber hilang atau rusak, yang penting untuk pengalaman **convert pdf using aspose** yang kuat. +- **`PdfFormatConversionOptions`** adalah tempat Anda **set pdf standard**. Dengan menetapkan `PdfStandard.PdfX4`, Aspose secara otomatis menyesuaikan ruang warna, menyematkan font yang diperlukan, dan menulis metadata PDF/X‑4 yang diperlukan. +- **`FontEmbeddingMode.EmbedAll`** memastikan setiap font yang digunakan dalam PDF sumber disematkan, sebuah persyaratan umum untuk PDF siap cetak. +- `doc.Convert` melakukan **aspose pdf format conversion** yang sebenarnya. Metode ini menulis file baru dalam satu panggilan, menyederhanakan alur kerja. + +## Langkah 3: Jalankan konverter + +Bangun proyek dan jalankan dengan jalur sumber serta tujuan: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Jika semuanya berhasil, konsol akan mencetak: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Anda sekarang dapat membuka `output_pdfx4.pdf` di penampil PDF apa pun yang mendukung PDF/X‑4 (misalnya, Adobe Acrobat Pro) dan memverifikasi kepatuhan melalui *File → Properties → Standards*. + +## Langkah 4: Verifikasi kepatuhan PDF/X‑4 (opsional) + +Untuk pipeline produksi Anda mungkin ingin memvalidasi output secara programatik. Aspose menyediakan kelas `PdfComplianceChecker` (tersedia dalam paket `Aspose.Pdf`) yang dapat digunakan sebagai berikut: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Menjalankan potongan kode ini setelah konversi memberi Anda hasil lulus/gagal yang eksplisit, yang berguna untuk pipeline CI/CD otomatis. + +## Langkah 5: Jebakan umum dan tips praktik terbaik + +| Masalah | Mengapa terjadi | Cara menghindarinya | +|---------|----------------|--------------------| +| Font yang hilang dalam PDF sumber | Font direferensikan tetapi tidak disematkan, menyebabkan peringatan konversi | Gunakan `FontEmbeddingMode.EmbedAll` seperti yang ditunjukkan di atas | +| PDF sumber berisi objek transparan yang tidak diizinkan dalam PDF/X‑4 | PDF/X‑4 melarang beberapa campuran transparansi tertentu | Pra‑proses PDF dengan `doc.ProcessTransparentObjects()` sebelum konversi | +| File besar menyebabkan OutOfMemoryException | Seluruh dokumen dimuat ke memori | Stream sumber menggunakan `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Lisensi tidak diterapkan | Versi percobaan menambahkan watermark | Panggil `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` sebelum penggunaan API Aspose apa pun | + +Menerapkan tips ini memastikan pengalaman **convert pdf pdfx4** yang lancar di lingkungan produksi. + +## Langkah 6: Memperluas tutorial + +Setelah Anda menguasai **pdfx4 conversion tutorial** dasar, Anda dapat menjelajahi: + +- **Batch conversion**: iterasi melalui folder PDF dan konversi masing‑masing ke PDF/X‑4. +- **Metadata injection**: tambahkan metadata XMP yang diperlukan oleh percetakan tertentu. +- **Color profile management**: lampirkan profil ICC menggunakan `doc.ColorSpace = ColorSpace.DeviceRGB;` sebelum konversi. + +Semua ekstensi ini dibangun di atas fondasi **aspose pdf format conversion** yang sama seperti yang ditunjukkan di sini. + +## Kesimpulan + +Tutorial **pdfx4 conversion tutorial** ini menunjukkan cara **set pdf standard** ke PDF/X‑4, melakukan **convert pdf using Aspose** yang andal, dan memverifikasi hasilnya. Anda kini memiliki program C# lengkap yang dapat dijalankan, yang dapat diintegrasikan ke dalam pipeline pemrosesan dokumen yang lebih besar atau digunakan sebagai utilitas mandiri. Bereksperimenlah dengan pemrosesan batch, penanganan metadata, atau standar PDF alternatif (PDF/A‑2b, PDF/UA) untuk memperdalam keahlian Anda dalam **aspose pdf format conversion**. + +Selamat coding, dan nikmati keyakinan yang datang dengan output yang mematuhi PDF/X‑4! + +## 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 yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan menjelajahi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/indonesian/net/document-creation/_index.md b/pdf/indonesian/net/document-creation/_index.md index 66347226ca..e6f6aa1244 100644 --- a/pdf/indonesian/net/document-creation/_index.md +++ b/pdf/indonesian/net/document-creation/_index.md @@ -76,9 +76,13 @@ Tutorial kode untuk Aspose.PDF Net ### [Buat Dokumen PDF dengan Aspose.PDF – Tambahkan Halaman, Bentuk & Simpan](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Pelajari cara menambahkan halaman, bentuk, dan menyimpan dokumen PDF menggunakan Aspose.PDF. + ### [Buat Dokumen PDF dengan Aspose.PDF – Panduan Langkah demi Langkah](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Pelajari cara membuat dokumen PDF menggunakan Aspose.PDF dengan panduan langkah demi langkah yang mudah diikuti. +### [Buat Dokumen PDF di C# dengan Aspose.Pdf](./create-pdf-document-in-c-with-aspose-pdf/) +Pelajari cara membuat dokumen PDF menggunakan Aspose.Pdf di C# dengan contoh kode lengkap. + ## Sumber Daya Tambahan - [Dokumentasi Aspose.PDF untuk Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/indonesian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/indonesian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..a95961f8f3 --- /dev/null +++ b/pdf/indonesian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Buat dokumen PDF di C# menggunakan Aspose.Pdf. Pelajari cara menambahkan + halaman kosong PDF, menambahkan paragraf ke PDF, dan memposisikan teks dalam PDF + dengan koordinat yang tepat. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: id +lastmod: 2026-08-08 +og_description: Buat dokumen PDF di C# dengan cepat. Tutorial ini menunjukkan cara + menambahkan halaman kosong PDF, menambahkan paragraf ke PDF, dan memposisikan teks + dalam PDF menggunakan Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Membuat Dokumen PDF di C# dengan Aspose.Pdf – Panduan Lengkap +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Buat dokumen PDF dengan C# menggunakan Aspose.Pdf +url: /id/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat dokumen PDF dengan C# menggunakan Aspose.Pdf + +Jika Anda perlu **membuat dokumen pdf** secara programatis, panduan ini menunjukkan cara melakukannya dengan tepat. Dengan menggunakan Aspose.Pdf untuk .NET, Anda dapat menambahkan halaman pdf kosong, menyisipkan paragraf ke pdf, dan memposisikan teks dalam pdf dengan akurasi pixel‑perfect—semua dalam beberapa baris kode C#. + +Anda akan menyelesaikan tutorial dengan file PDF yang berfungsi penuh yang berisi catatan yang ditempatkan pada koordinat yang Anda tentukan. Tanpa alat eksternal, tanpa penyuntingan manual—hanya kode bersih dan dapat diulang yang dapat Anda sisipkan ke proyek .NET mana pun. + +## Apa yang akan Anda pelajari + +* Cara **membuat dokumen pdf** dengan Aspose.Pdf. +* Cara yang benar untuk **menambahkan halaman pdf kosong** dan mengapa sebuah halaman harus ada sebelum menambahkan konten. +* Cara **menambahkan paragraf ke pdf** dan melampirkan tag khusus (berguna untuk ekstraksi atau styling nanti). +* Teknik untuk **memposisikan teks dalam pdf** menggunakan kelas `Position`. +* Cara menyimpan hasil ke disk dan memverifikasi output. + +**Prasyarat** + +* .NET 6.0 atau yang lebih baru (kode juga berfungsi dengan .NET Framework 4.7+). +* Lisensi Aspose.Pdf untuk .NET yang valid atau kunci evaluasi gratis. +* IDE seperti Visual Studio 2022 atau VS Code dengan ekstensi C#. + +> **Pro tip:** Jika Anda menggunakan evaluasi gratis, PDF yang dihasilkan akan berisi watermark kecil. Daftarkan lisensi untuk menghilangkannya. + +## Cara membuat dokumen pdf dengan Aspose.Pdf + +Langkah pertama adalah menginstansiasi kelas `Document`. Objek ini mewakili seluruh file PDF dan memberi Anda akses ke halaman, sumber daya, dan opsi penyimpanan. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Membuat dokumen **tidak** menulis apa pun ke disk saat ini; itu hanya menyiapkan representasi dalam memori yang dapat Anda manipulasi. Pendekatan ini menjaga API tetap cepat dan efisien dalam penggunaan memori. + +## Tambahkan halaman pdf kosong menggunakan Aspose.Pdf + +Sebuah PDF harus memiliki setidaknya satu halaman sebelum Anda dapat menempatkan konten apa pun. Menambahkan halaman kosong cukup dengan satu pemanggilan metode: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Metode `Add()` membuat halaman dengan ukuran default (A4) dan orientasi (potret). Jika Anda membutuhkan ukuran berbeda, berikan instance `PageSize` ke `Add()`. + +## Tambahkan paragraf ke pdf dan tetapkan catatan + +Setelah halaman ada, Anda dapat membuat objek `Paragraph` yang berisi teks yang terlihat. Paragraf juga dapat membawa tag khusus, yang berguna ketika Anda nanti perlu menemukan atau menata elemen tersebut secara programatis. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Mengapa menggunakan tag? + +Tag adalah metadata yang menyertai elemen PDF. Mereka dapat dipanggil nanti dengan `Document.FindObject()` atau digunakan oleh pemroses PDF hilir yang mengandalkan tag untuk aksesibilitas atau pengindeksan. + +## Posisi teks dalam pdf dengan koordinat tepat + +Penempatan default paragraf adalah sudut kiri‑atas margin halaman. Untuk memindahkan teks ke lokasi yang tepat, atur properti `Position` pada tag paragraf: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Koordinat diukur dalam poin (1 poin = 1/72 inci). Asal (0,0) berada di kiri‑bawah halaman, yang cocok dengan kebanyakan mesin render PDF. Sesuaikan nilai `X` dan `Y` untuk memenuhi kebutuhan tata letak Anda. + +Setelah memposisikan, tambahkan paragraf ke koleksi halaman: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Simpan dokumen pdf + +Akhirnya, tulis PDF dalam memori ke sebuah file. Anda dapat menentukan jalur output, format, dan bahkan opsi enkripsi. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Ketika program selesai, `output.pdf` berisi satu halaman dengan teks **Important note** yang ditempatkan di dekat sudut kanan‑atas (X = 50, Y = 750). Buka file tersebut di penampil PDF apa pun untuk memverifikasi penempatan. + +![Dokumen PDF yang dihasilkan dibuat dengan C# Aspose.Pdf menampilkan catatan yang diposisikan](https://example.com/images/generated-pdf.png) + +*Teks alt gambar: Dokumen PDF yang dihasilkan dibuat dengan C# Aspose.Pdf menampilkan catatan yang diposisikan* (includes primary keyword). + +## Contoh lengkap yang dapat dijalankan + +Menggabungkan semua bagian, berikut adalah aplikasi konsol lengkap yang dapat Anda salin, bangun, dan jalankan: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Output yang diharapkan** ketika Anda menjalankan program: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Membuka `output.pdf` menampilkan satu halaman dengan teks **Important note** yang diposisikan pada koordinat yang Anda tentukan. + +## Variasi umum dan kasus tepi + +| Scenario | What to change | Why it matters | +|----------|----------------|----------------| +| **Ukuran halaman berbeda** | `pdfDocument.Pages.Add(PageSize.A5)` | Halaman yang lebih kecil mengurangi ukuran file dan cocok untuk layar seluler. | +| **Beberapa catatan** | Loop over a collection of strings and create a `Paragraph` for each, incrementing the `Y` coordinate. | Memungkinkan pembuatan batch catatan bergaya bullet. | +| **Karakter Unicode** | Ensure the source file is saved as UTF-8 and set `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf mendukung Unicode secara langsung, tetapi enkoding file harus cocok. | +| **PDF terlindungi kata sandi** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Menambahkan keamanan untuk catatan rahasia. | +| **Output resolusi tinggi** | Set `pdfDocument.PageInfo.Width` and `Height` to larger values before adding content. | Berguna untuk mencetak PDF berformat besar. | + +## Tips untuk penggunaan produksi + +* **Gunakan kembali instance `Document`** saat menghasilkan banyak PDF dalam satu permintaan untuk mengurangi tekanan GC. +* **Dispose objek** (`pdfDocument.Dispose()`) jika Anda membuat banyak dokumen dalam loop. +* **Validasi koordinat**: nilai `Y` tidak boleh melebihi tinggi halaman; jika tidak, teks akan terpotong. +* **Gunakan `TextFragmentAbsorber`** untuk kemudian mengekstrak catatan berdasarkan tagnya (`/P`) jika Anda perlu membaca kembali kontennya. + +## Kesimpulan + +Anda kini tahu cara **membuat dokumen pdf** dengan Aspose.Pdf, **menambahkan halaman pdf kosong**, **menambahkan paragraf ke pdf**, **menambahkan catatan pdf**, dan **memposisikan teks dalam pdf** secara tepat. Contoh lengkap menunjukkan alur kerja yang bersih dan dapat diulang yang dapat Anda kembangkan untuk faktur, laporan, atau skenario otomatisasi dokumen apa pun. + +Selanjutnya, jelajahi topik terkait seperti **menambahkan gambar ke pdf**, **membangun tabel dengan Aspose.Pdf**, atau **menerapkan tanda tangan digital**. Masing‑masing topik ini dibangun di atas konsep inti yang sama yang dibahas di sini, sehingga Anda siap menangani tugas pembuatan PDF yang lebih canggih. + +Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait yang dibangun 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. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/indonesian/net/images-graphics/_index.md b/pdf/indonesian/net/images-graphics/_index.md index a30e79dc12..dc247b036e 100644 --- a/pdf/indonesian/net/images-graphics/_index.md +++ b/pdf/indonesian/net/images-graphics/_index.md @@ -108,7 +108,7 @@ Pelajari cara menyempurnakan dokumen PDF Anda dengan membuat persegi panjang den Pelajari cara menghapus gambar dari file PDF secara efisien menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup pengaturan, contoh kode, dan praktik terbaik. ### [Cara Menghapus Gambar dari PDF Menggunakan Aspose.PDF .NET: Panduan Langkah demi Langkah](./delete-images-aspose-pdf-net-guide/) -Pelajari cara menghapus gambar dari file PDF menggunakan Aspose.PDF untuk .NET. Panduan lengkap ini mencakup pengaturan, penerapan, dan aplikasi praktis. +Pelajari cara menghapus gambar dari PDF menggunakan Aspose.PDF untuk .NET. Panduan lengkap ini mencakup pengaturan, penerapan, dan aplikasi praktis. ### [Cara Menghapus Gambar dari PDF Menggunakan Aspose.PDF untuk .NET: Panduan Lengkap](./delete-images-from-pdf-aspose-dotnet/) Pelajari cara menghapus semua gambar dari PDF secara efisien menggunakan Aspose.PDF for .NET, meningkatkan privasi file dan mengurangi ukuran. Ikuti panduan langkah demi langkah ini. @@ -164,6 +164,9 @@ Pelajari cara merender skrip LaTeX yang kompleks menjadi dokumen PDF menggunakan ### [Mengatur Latar Belakang Gambar dalam PDF Menggunakan Aspose.PDF untuk .NET: Panduan Lengkap](./aspose-pdf-net-set-image-backgrounds/) Pelajari cara menyempurnakan dokumen PDF Anda dengan mengatur latar belakang gambar menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup kiat penyiapan, penerapan, dan pengoptimalan. +### [Mengatur Opasitas PDF di C# dengan Aspose.PDF – panduan lengkap](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Pelajari cara mengatur tingkat transparansi halaman PDF menggunakan Aspose.PDF untuk .NET dengan C#. + ## Sumber Daya Tambahan - [Dokumentasi Aspose.PDF untuk Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/indonesian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/indonesian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a038c2db98 --- /dev/null +++ b/pdf/indonesian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-08 +description: Atur opasitas PDF di C# menggunakan Aspose.PDF – pelajari cara menyesuaikan + transparansi stroke dan fill dengan beberapa baris kode. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: id +lastmod: 2026-08-08 +og_description: Atur opasitas PDF di C# dengan cepat. Panduan ini menunjukkan cara + mengubah transparansi garis dan isi menggunakan API keadaan grafik Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Atur opacity PDF di C# dengan Aspose.PDF – tutorial langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Atur Opasitas PDF di C# dengan Aspose.PDF – Panduan Lengkap +url: /id/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Mengatur Opasitas PDF di C# dengan Aspose.PDF – panduan lengkap + +Jika Anda perlu **mengatur opasitas PDF** untuk operasi menggambar tertentu, tutorial ini menunjukkan secara tepat cara melakukannya dengan Aspose.PDF untuk .NET. Baik Anda membuat watermark, lapisan semi‑transparan, atau grafik khusus, Anda akan mempelajari pendekatan yang ringkas dan siap produksi. + +Pada bagian‑bagian berikut kami akan membahas semuanya mulai dari memuat PDF, mengedit keadaan grafisnya, menambahkan definisi opasitas baru, hingga menyimpan hasilnya. Tidak diperlukan dokumentasi eksternal—hanya kode di bawah ini dan penjelasan singkat untuk setiap langkah. + +## Prasyarat + +Sebelum memulai, pastikan Anda memiliki: + +* .NET 6.0 atau lebih baru (kode ini juga berfungsi dengan .NET Framework 4.7+) +* Lisensi Aspose.PDF untuk .NET yang valid (versi percobaan gratis dapat digunakan untuk evaluasi) +* File PDF masukan (`input.pdf`) yang berada di folder yang dapat Anda baca/tulis +* Visual Studio 2022 atau IDE C# lain yang Anda sukai + +## Langkah 1 – Muat dokumen PDF (Aspose.PDF untuk .NET) + +Tugas pertama adalah membuka PDF yang sudah ada. Aspose.PDF merepresentasikan file PDF dengan kelas `Document`, yang memberi Anda akses penuh ke halaman, sumber daya, dan objek tingkat‑rendah. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Mengapa ini penting*: Memuat dokumen membuat model dalam memori yang dapat Anda modifikasi dengan aman. Pernyataan `using` memastikan pegangan file dilepaskan secara otomatis setelah selesai. + +## Langkah 2 – Dapatkan halaman pertama yang ingin Anda edit + +Opasitas didefinisikan per‑halaman melalui kamus sumber daya halaman. Di sini kami menargetkan halaman pertama, tetapi Anda dapat melakukan iterasi melalui `doc.Pages` untuk operasi batch. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Mengapa ini penting*: Setiap halaman memiliki koleksi `Resources`‑nya sendiri, yang menyimpan keadaan grafis, font, gambar, dll. Mengedit halaman yang tepat memastikan efek opasitas muncul di tempat yang Anda harapkan. + +## Langkah 3 – Buka kamus sumber daya halaman untuk diedit + +Aspose.PDF menyediakan pembantu `DictionaryEditor` untuk memanipulasi kamus PDF tingkat‑rendah tanpa merusak struktur file. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Mengapa ini penting*: Mengedit langsung kamus COS (Content Object System) PDF adalah satu‑satunya cara menyuntikkan keadaan grafis khusus. Editor menyederhanakan sintaks tingkat‑rendah sambil menjaga PDF tetap valid. + +## Langkah 4 – Ambil kamus ExtGState yang sudah ada + +Kamus **ExtGState** (external graphics state) menyimpan opasitas, mode pencampuran, lebar garis, dll. Jika belum ada, Aspose.PDF akan membuatnya secara otomatis saat Anda menambahkan entri baru. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Mengapa ini penting*: Tanpa entri `ExtGState` Anda tidak dapat merujuk opasitas khusus nanti dalam aliran konten halaman. Langkah ini menjamin kontainer sudah ada. + +## Langkah 5 – Buat keadaan grafis baru dengan opasitas yang diinginkan + +Keadaan grafis adalah kumpulan parameter. Untuk opasitas kami mengatur `CA` (stroke opacity) dan `ca` (fill opacity). Kami juga mengatur mode pencampuran (`BM`) untuk mengontrol bagaimana piksel transparan berinteraksi dengan konten di bawahnya. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Mengapa ini penting*: `CA` dan `ca` menerima nilai dari 0 (sepenuhnya transparan) hingga 1 (sepenuhnya opak). Sesuaikan angka‑angka ini untuk mencapai efek visual yang Anda butuhkan. Mode pencampuran `"Normal"` adalah yang paling umum, tetapi Anda dapat bereksperimen dengan `"Multiply"` atau `"Screen"` untuk efek artistik. + +## Langkah 6 – Daftarkan keadaan grafis baru ke dalam koleksi ExtGState + +Setiap keadaan grafis harus memiliki nama unik (misalnya `GS0`). Kami menambahkan kamus kami ke koleksi `ExtGState`, lalu memperbarui sumber daya halaman. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Mengapa ini penting*: Dengan menamai keadaan (`GS0`), Anda dapat merujuknya nanti dalam aliran konten halaman menggunakan operator `gs`. Jika Anda memerlukan beberapa tingkat opasitas, buat entri tambahan (`GS1`, `GS2`, …). + +## Langkah 7 – Terapkan keadaan grafis ke perintah menggambar (opsional) + +Jika Anda ingin menerapkan opasitas secara langsung pada konten yang sudah ada, Anda harus mengedit aliran konten halaman. Berikut contoh sederhana yang menggambar persegi panjang semi‑transparan menggunakan keadaan yang baru dibuat. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Mengapa ini penting*: Operator `gs` (`SetGraphicsState`) memberi tahu perender PDF untuk menggunakan nilai opasitas yang didefinisikan dalam `GS0` untuk semua perintah menggambar berikutnya. Pasangan `grestore`/`gsave` memastikan elemen halaman lain tidak terpengaruh. + +## Langkah 8 – Simpan PDF yang telah dimodifikasi + +Akhirnya, tulis dokumen yang telah diperbarui kembali ke disk. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Mengapa ini penting*: Menyimpan menyelesaikan semua perubahan, menyematkan keadaan grafis baru, dan menghasilkan PDF yang dapat ditampilkan oleh viewer mana pun (Adobe Acrobat, Chrome, dll.) dengan transparansi yang dimaksudkan. + +### Hasil yang diharapkan + +Buka `output.pdf` di penampil PDF. Anda akan melihat persegi panjang merah dengan garis tepi 80 % opak dan isi 40 % opak, yang menyatu mulus dengan konten latar belakang apa pun. Sisanya halaman tetap tidak berubah. + +## Variasi umum dan kasus tepi + +| Situasi | Apa yang diubah | Alasan | +|-----------|----------------|--------| +| **Beberapa tingkat opasitas** | Buat keadaan grafis tambahan (`GS1`, `GS2`, …) dengan nilai `CA`/`ca` yang berbeda dan referensikan sesuai kebutuhan | Memungkinkan kontrol halus atas elemen yang berbeda | +| **Mode pencampuran berbeda** | Gunakan `"Multiply"`, `"Screen"`, `"Overlay"` dll., alih‑alih `"Normal"` pada entri `BM` | Menghasilkan efek pencampuran artistik | +| **Menerapkan pada aliran konten yang ada** | Sisipkan `SetGraphicsState` sebelum operator menggambar spesifik yang ingin dipengaruhi | Mencegah opasitas tidak diinginkan pada objek lain | +| **PDF besar** | Proses halaman dalam loop `foreach (Page p in doc.Pages)` untuk menghindari memuat seluruh file ke memori sekaligus | Meningkatkan kinerja dan mengurangi tekanan memori | +| **Tidak ada ExtGState yang ada** | Kode pada Langkah 4 sudah membuatnya bila belum ada, jadi tidak diperlukan penanganan ekstra | Menjamin kamus tersedia | + +### Tips profesional + +Saat Anda menambahkan banyak keadaan grafis khusus, pertahankan penamaan yang konsisten (`GS0`, `GS1`, …) dan dokumentasikan tujuan masing‑masing dalam blok komentar. Ini memudahkan pemeliharaan di masa depan, terutama dalam proyek kolaboratif. + +## Contoh lengkap yang dapat dijalankan + +Berikut adalah program lengkap yang dapat Anda salin, tempel, dan jalankan. Program ini mencakup semua langkah, direktif `using` yang diperlukan, serta komentar. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Jalankan program, + +## 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 sendiri. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..51d6832ee2 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. | +| [Simpan Dokumen PDF dengan Aspose.PDF – panduan lengkap](./save-pdf-document-with-aspose-pdf-complete-guide/) | Pelajari cara menyimpan dokumen PDF menggunakan Aspose.PDF dengan panduan lengkap langkah demi langkah. Bahasa Indonesia: {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/indonesian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..e2120af806 --- /dev/null +++ b/pdf/indonesian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Simpan dokumen PDF menggunakan Aspose.PDF, pelajari cara menambahkan + halaman PDF, mengisi bidang formulir PDF, dan membuat PDF dengan bidang formulir + dalam satu tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: id +lastmod: 2026-08-08 +og_description: Simpan dokumen PDF dengan Aspose.PDF dan temukan cara menambahkan + halaman PDF, mengisi bidang formulir PDF, serta membuat PDF dengan bidang formulir + secara cepat dan andal. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Menyimpan dokumen PDF dengan Aspose.PDF – panduan langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Simpan dokumen PDF dengan Aspose.PDF – panduan lengkap +url: /id/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Simpan dokumen PDF dengan Aspose.PDF – panduan lengkap + +Jika Anda perlu **save PDF document** yang berisi bidang formulir interaktif, tutorial ini menunjukkan cara melakukannya secara tepat. Anda akan melihat cara menambahkan halaman PDF, membuat formulir PDF, dan mengisi bidang formulir PDF—semua dengan Aspose.PDF untuk .NET. + +Di bagian berikut Anda akan mempelajari cara: + +* menambahkan beberapa halaman ke PDF baru, +* membuat bidang formulir kotak teks pada halaman pertama, +* menempatkan anotasi widget untuk bidang yang sama pada halaman kedua, +* mengatur nilai bidang (populate PDF form field), +* dan akhirnya **save PDF document** ke disk. + +Tidak diperlukan alat eksternal; kode lengkap yang dapat dijalankan sudah disertakan. + +## Prasyarat + +* .NET 6.0 atau yang lebih baru (kode ini juga berfungsi dengan .NET Framework 4.7.2+). +* Lisensi Aspose.PDF untuk .NET yang valid atau kunci evaluasi gratis. +* Visual Studio 2022 (atau IDE C# apa pun). + +Tambahkan paket NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Cara menambahkan halaman PDF + +Langkah pertama adalah membuat PDF kosong dan menambahkan halaman yang Anda butuhkan. Menambahkan halaman sebelum mendefinisikan bidang formulir memastikan koordinat tata letak akurat. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Mengapa ini penting:* Setiap objek `Page` mewakili kanvas yang dapat dicetak. Dengan menambahkan halaman lebih awal Anda dapat merujuknya nanti saat menempatkan elemen formulir. + +## Cara membuat formulir PDF dengan Aspose.PDF + +Formulir PDF terdiri dari **field definition** (kontainer logis) dan satu atau lebih **widget annotations** (representasi visual). Contoh ini membuat `TextBoxField` bernama **Comments** pada halaman pertama. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Mengapa ini penting:* Koordinat `Rectangle` dinyatakan dalam poin (1 pt = 1/72 in). Sesuaikan nilai-nilai tersebut agar cocok dengan desain Anda. + +## Isi bidang formulir PDF + +Anda dapat mengatur nilai bidang secara programatis sebelum dokumen disimpan. Inilah inti dari **populate PDF form field**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Jika Anda perlu mengisi bidang tersebut nanti (misalnya, dari input pengguna), cukup tetapkan string baru ke `commentsField.Value` sebelum memanggil `Save`. + +## Tambahkan anotasi widget untuk bidang yang sama pada halaman kedua + +Anotasi widget membuat bidang formulir terlihat pada sebuah halaman. Dengan menambahkan widget kedua, bidang logis yang sama muncul di kedua halaman, memperlihatkan **create PDF with form fields** yang melintasi beberapa halaman. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Mengapa ini penting:* Koleksi `Widgets` dapat menampung sejumlah representasi visual. Pengguna dapat berinteraksi dengan bidang pada halaman mana pun, dan nilai yang dimasukkan tetap sinkron. + +## Lampirkan bidang ke anotasi halaman pertama + +Bidang formulir harus ditambahkan ke koleksi anotasi sebuah halaman agar penampil PDF dapat merendernya. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Simpan dokumen PDF + +Sekarang formulir sudah sepenuhnya didefinisikan, Anda dapat **save PDF document** ke lokasi pilihan Anda. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Saat Anda membuka `output.pdf` di Adobe Acrobat Reader atau penampil PDF apa pun, Anda akan melihat kotak teks pada halaman 1 dan kotak yang cocok pada halaman 2. Mengetik di salah satu kotak akan memperbarui bidang dasar yang sama. + +## Contoh lengkap yang dapat dijalankan + +Berikut adalah program lengkap yang dapat Anda salin‑tempel ke aplikasi konsol. Program ini berhasil dikompilasi dan menghasilkan PDF sebagaimana dijelaskan tanpa modifikasi apa pun. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Output yang diharapkan:** Sebuah file bernama `output.pdf` yang berisi dua halaman. Halaman 1 menampilkan kotak teks berlabel “Comments” pada koordinat (100, 600). Halaman 2 menampilkan bidang yang sama pada (100, 400). Bidang tersebut telah diisi sebelumnya dengan “Enter your feedback here”. Mengubah teks pada salah satu halaman akan memperbarui nilai yang sama ketika dokumen disimpan kembali. + +## Pertanyaan umum dan penanganan kasus tepi + +| Question | Answer | +|----------|--------| +| *Can I add more than one widget for the same field?* | Yes. Append additional `WidgetAnnotation` objects to `commentsField.Widgets`. Each widget can be placed on any page. | +| *What if I need to set the field’s appearance (font, border, background)?* | Use `commentsField.DefaultAppearance` to specify a font and color, and set `commentsField.Border` properties for line style. | +| *How do I make the field read‑only?* | Set `commentsField.ReadOnly = true;`. The field will still display its value but cannot be edited by the user. | +| *Is it possible to populate the field after the PDF is created?* | Yes. Load the saved PDF with `new Document("output.pdf")`, locate the field via `pdfDocument.Form["Comments"]`, assign a new `Value`, and call `Save` again. | +| *What if the PDF must conform to PDF/A for archiving?* | After building the document, call `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` before saving. | + +## Tips dari bidang + +* **Pro tip:** Jaga nama bidang logis tetap pendek dan unik; itu adalah identifier yang akan Anda gunakan saat mengisi formulir secara programatis nanti. +* **Watch out for:** Kotak widget yang saling tumpang tindih. Tumpang tindih dapat menyebabkan artefak render pada beberapa penampil. +* **Performance note:** Menambahkan banyak halaman atau widget dalam loop yang ketat dapat dioptimalkan dengan menggunakan satu instance `Rectangle` dan hanya mengubah koordinatnya. + +## Kesimpulan + +Anda kini tahu cara **save PDF document** yang berisi formulir berfungsi penuh, cara **populate PDF form field**, dan cara **how to add pages PDF** serta **create PDF with form fields** menggunakan Aspose.PDF untuk .NET. Contoh lengkap menunjukkan alur kerja end‑to‑end dari pembuatan dokumen hingga penyimpanan akhir. + +Selanjutnya, jelajahi topik terkait seperti **adding check boxes**, **creating drop‑down lists**, atau **flattening the form** untuk distribusi read‑only. Masing‑masing topik tersebut membangun di atas prinsip yang sama dan memperluas kemampuan otomatisasi PDF Anda. + +Selamat coding! + +## 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. + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/indonesian/net/programming-with-pdf-pages/_index.md index 44d02db399..3d1d836eff 100644 --- a/pdf/indonesian/net/programming-with-pdf-pages/_index.md +++ b/pdf/indonesian/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Bahasa Indonesia: --- | Bahasa Indonesia: | [Perbarui Dimensi Halaman PDF](./update-dimensions/) | Temukan cara memperbarui dimensi halaman PDF dengan mudah dengan Aspose.PDF untuk .NET dalam panduan langkah demi langkah yang komprehensif ini. Bahasa Indonesia: | [Perbesar Isi Halaman Dalam File PDF](./zoom-to-page-contents/) | Pelajari cara memperbesar konten halaman dalam file PDF menggunakan Aspose.PDF untuk .NET dalam panduan lengkap ini. Sempurnakan dokumen PDF Anda sesuai dengan kebutuhan spesifik Anda. | | [Menambahkan nomor halaman PDF dengan C# – Panduan Langkah demi Langkah Lengkap](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Panduan langkah demi langkah untuk menambahkan nomor halaman pada file PDF menggunakan C# dengan Aspose.PDF untuk .NET. Mudah diikuti. | +| [Menambahkan penomoran Bates pada PDF dengan Aspose – panduan langkah demi langkah](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Panduan lengkap menambahkan penomoran Bates pada file PDF menggunakan Aspose.PDF untuk .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/indonesian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..cbcecc1d0f --- /dev/null +++ b/pdf/indonesian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-08-08 +description: Tambahkan penomoran Bates pada PDF menggunakan Aspose.Pdf di C#. Tutorial + ini juga menunjukkan cara menambahkan halaman kosong pada PDF dan menghasilkan PDF + secara programatis. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: id +lastmod: 2026-08-08 +og_description: Tambahkan penomoran Bates pada PDF dengan Aspose.Pdf di C#. Pelajari + cara menambahkan halaman kosong pada PDF, menghasilkan PDF secara programatik, dan + menyimpan dokumen akhir dalam hitungan menit. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Menambahkan Penomoran Bates pada PDF dengan Aspose – Panduan Lengkap C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Menambahkan penomoran Bates pada PDF dengan Aspose – panduan langkah demi langkah +url: /id/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Menambahkan bates numbering pdf dengan Aspose – panduan langkah demi langkah + +Menambahkan bates numbering pdf dengan Aspose.Pdf sangat mudah setelah Anda memahami langkah‑langkah dasarnya. Jika Anda juga perlu menambahkan blank page pdf atau menghasilkan pdf secara programatis, panduan ini mencakup semua yang Anda butuhkan. + +Dalam tutorial ini Anda akan: + +* Membuat dokumen PDF baru dari awal. +* Menambahkan blank page pdf yang akan menampung nomor Bates. +* Mengonfigurasi artefak Bates numbering dengan awalan khusus. +* Menyimpan PDF sehingga nomor muncul pada file yang dihasilkan. + +Pada akhir tutorial Anda akan memiliki aplikasi konsol C# yang berfungsi penuh yang menghasilkan PDF berisi nomor Bates seperti **CASE‑1000**, **CASE‑1001**, … – sebuah kebutuhan umum untuk alur kerja hukum dan e‑discovery. + +## Prasyarat + +* .NET 6.0 SDK atau yang lebih baru (kode juga berfungsi dengan .NET Framework 4.8). +* Visual Studio 2022 atau IDE yang kompatibel dengan C#. +* Lisensi Aspose.Pdf untuk .NET yang valid (atau kunci evaluasi gratis). +* Familiaritas dasar dengan sintaks C#. + +> **Pro tip:** Jika Anda menjalankan kode tanpa lisensi, Aspose akan menambahkan watermark kecil pada PDF output. + +## Langkah 1: Siapkan proyek dan impor Aspose.Pdf + +Buat proyek konsol baru dan tambahkan paket NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Direktif `using` yang diperlukan untuk contoh ini adalah: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Namespace ini memberi Anda akses ke kelas `Document`, `Page`, dan `BatesNumberingArtifact` yang akan digunakan nanti. + +## Langkah 2: Tambahkan blank page pdf + +Nomor Bates harus ditempelkan pada sebuah halaman, jadi pertama-tama kami membuat halaman kosong yang akan menerima artefak penomoran. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Kelas `Document` mewakili seluruh file PDF, sementara `Pages.Add()` menyisipkan halaman baru yang kosong di akhir koleksi halaman dokumen. Karena dokumen dimulai kosong, pemanggilan ini juga membuat halaman pertama. + +## Langkah 3: Konfigurasikan artefak Bates numbering + +Sekarang kami mendefinisikan bagaimana nomor Bates harus ditampilkan. `BatesNumberingArtifact` memungkinkan Anda mengatur nomor awal, awalan, akhiran, dan opsi format. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Mengapa ini penting:** +Mengatur `StartNumber` ke **1000** sesuai dengan konvensi berkas kasus hukum yang umum. `Prefix` memastikan setiap nomor muncul sebagai **CASE‑1000**, **CASE‑1001**, … yang lebih mudah dicari dan diurutkan. + +## Langkah 4: Lampirkan artefak ke halaman + +Artefak harus ditambahkan ke koleksi `Artifacts` halaman sehingga Aspose merendernya pada setiap halaman saat disimpan. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Saat dokumen disimpan, Aspose secara otomatis mengulangi artefak pada semua halaman, menambah nomor untuk setiap halaman berikutnya. + +## Langkah 5: (Opsional) Tambahkan halaman tambahan + +Jika Anda membutuhkan lebih banyak halaman, cukup ulangi `pdfDocument.Pages.Add()`. Artefak Bates numbering yang Anda lampirkan pada langkah sebelumnya akan otomatis muncul pada setiap halaman baru. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Langkah 6: Simpan PDF – menghasilkan pdf secara programatis + +Akhirnya, simpan dokumen ke disk. Inilah titik di mana nomor Bates dirender ke halaman. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Hasil yang diharapkan:** +Buka *BatesNumberedDocument.pdf* dan Anda akan melihat PDF tiga halaman. Setiap halaman menampilkan nomor Bates di pojok kanan bawah: + +* Halaman 1 → **CASE‑1000** +* Halaman 2 → **CASE‑1001** +* Halaman 3 → **CASE‑1002** + +Nomor-nomor tersebut secara otomatis bertambah karena artefak terlampir pada koleksi halaman. + +## Contoh lengkap yang dapat dijalankan + +Menggabungkan semuanya, berikut adalah program konsol lengkap yang dapat Anda salin, tempel, dan jalankan: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Jalankan program dengan `dotnet run`. Setelah eksekusi, temukan file di desktop Anda dan verifikasi nomor Bates. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Pertanyaan umum dan kasus tepi + +### Bagaimana jika saya membutuhkan font atau posisi yang berbeda? + +`BatesNumberingArtifact` menyediakan properti seperti `FontSize`, `FontColor`, `HorizontalAlignment`, dan `VerticalAlignment`. Misalnya: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Bagaimana cara mengecualikan halaman tertentu dari penomoran? + +Buat `BatesNumberingArtifact` terpisah untuk halaman yang ingin Anda beri nomor dan tambahkan hanya ke halaman‑halaman tersebut. Halaman tanpa artefak yang terlampir akan tetap tidak bernomor. + +### Apakah ini bekerja dengan PDF yang sudah ada? + +Ya. Alih-alih `new Document()`, muat file yang sudah ada: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Kemudian lampirkan artefak ke halaman yang diinginkan dan simpan. + +## Kesimpulan + +Anda kini tahu cara **add bates numbering pdf** menggunakan Aspose.Pdf, cara **add blank page pdf**, dan cara **generate pdf programmatically** dalam solusi C# yang bersih dan dapat digunakan kembali. Pendekatan ini bekerja dengan jumlah halaman berapa pun, awalan khusus, dan opsi styling, memberi Anda kontrol penuh atas dokumen akhir. + +Langkah selanjutnya yang dapat Anda jelajahi: + +* Use **create pdf as + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 f86b8750ba..93966667d5 100644 --- a/pdf/indonesian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/indonesian/net/programming-with-security-and-signatures/_index.md @@ -32,9 +32,11 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Apakah Dilindungi Kata Sandi?](./is-password-protected/) Pelajari cara memeriksa apakah PDF dilindungi kata sandi menggunakan Aspose.PDF untuk .NET dalam panduan langkah demi langkah yang komprehensif ini. Bahasa Indonesia: | [Mengatur Hak Istimewa Dalam File PDF](./set-privileges/) | Pelajari cara mengatur hak akses PDF menggunakan Aspose.PDF untuk .NET dengan panduan langkah demi langkah ini. Amankan dokumen Anda secara efektif. Bahasa Indonesia: | [Tanda Tangan Dengan Kartu Pintar Menggunakan Tanda Tanda File Pdf](./sign-with-smart-card-using-pdf-file-signature/) | Pelajari cara menandatangani file PDF menggunakan kartu pintar dengan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah ini untuk mendapatkan tanda tangan digital yang aman. Bahasa Indonesia: -| [Tanda Tangan Dengan Kartu Pintar Menggunakan Kolom Tanda Tangan](./sign-with-smart-card-using-signature-field/) | Pelajari cara menandatangani PDF dengan aman menggunakan kartu pintar dengan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah kami untuk penerapan yang mudah. | +| [Tanda Tanda Tangan Dengan Kartu Pintar Menggunakan Kolom Tanda Tangan](./sign-with-smart-card-using-signature-field/) | Pelajari cara menandatangani PDF dengan aman menggunakan kartu pintar dengan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah kami untuk penerapan yang mudah. | | [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 lengkap](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Panduan lengkap untuk memverifikasi tanda tangan PDF menggunakan Aspose.PDF di C#. Bahasa Indonesia: +| [Tutorial Tanda Tangan PDF: Validasi Tanda Tangan Digital PDF dengan Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Pelajari cara memvalidasi tanda tangan digital pada file PDF menggunakan Aspose.PDF untuk .NET. Bahasa Indonesia: {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/indonesian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/indonesian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..69b314403a --- /dev/null +++ b/pdf/indonesian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: tutorial tanda tangan PDF yang menunjukkan cara memvalidasi tanda tangan + digital PDF menggunakan opsi validasi tanda tangan dan kode C# – panduan langkah + demi langkah yang cepat +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: id +lastmod: 2026-08-08 +og_description: Tutorial tanda tangan PDF memandu Anda melalui proses memvalidasi + tanda tangan digital PDF dengan Aspose.PDF. Pelajari cara mengonfigurasi opsi validasi + tanda tangan dan memeriksa hasilnya. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: tutorial tanda tangan PDF – validasi tanda tangan digital PDF di C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Tutorial tanda tangan PDF: memvalidasi tanda tangan digital PDF dengan Aspose.PDF' +url: /id/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial tanda tangan pdf – memvalidasi tanda tangan digital PDF dalam C# + +Jika Anda membutuhkan **pdf signature tutorial** yang menunjukkan secara tepat cara memvalidasi tanda tangan digital PDF, panduan ini mencakup semuanya. Anda akan melihat cara memuat PDF yang ditandatangani, mengkonfigurasi **signature validation options**, menjalankan validasi, dan menampilkan hasil—semua dengan kode C# yang jelas dan dapat dijalankan. + +Memvalidasi tanda tangan PDF sangat penting ketika Anda memproses kontrak, faktur, atau dokumen lain yang memiliki kekuatan hukum. Tutorial ini membahas alur kerja lengkap, sehingga Anda dapat mengintegrasikan pemeriksaan tanda tangan ke dalam aplikasi Anda tanpa menebak panggilan API apa yang diperlukan. + +## Apa yang akan Anda capai + +* Muat file PDF yang ditandatangani menggunakan Aspose.PDF. +* Siapkan **signature validation options** seperti algoritma hash. +* Panggil metode `Validate` untuk **validate pdf digital signature**. +* Keluarkan pesan “Signature valid” yang jelas ke konsol. + +**Prasyarat** + +* .NET 6.0 (atau lebih baru) terpasang. +* Visual Studio 2022 (atau IDE C# apa pun). +* Paket NuGet Aspose.PDF untuk .NET (`Aspose.Pdf`). + +> **Pro tip:** Gunakan versi Aspose.PDF terbaru untuk mendapatkan dukungan algoritma SHA‑3 dan peningkatan kinerja validasi. + +## Langkah 1: Instal paket NuGet Aspose.PDF + +Buka proyek Anda di Visual Studio dan jalankan perintah berikut di Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Paket ini menambahkan namespace `Aspose.Pdf`, yang berisi kelas `Document` dan API terkait tanda tangan yang akan Anda gunakan. + +## Langkah 2: Muat dokumen PDF yang ditandatangani + +Baris kode pertama membuat objek `Document` yang mewakili file PDF di disk. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Mengapa ini penting:* Kelas `Document` mengurai struktur PDF, menampilkan koleksi `Signatures` yang berisi semua tanda tangan digital yang disematkan. Jika jalur file tidak tepat, akan muncul pengecualian, jadi pastikan jalur sudah benar sebelum menjalankan program. + +## Langkah 3: Konfigurasikan opsi validasi tanda tangan + +Anda dapat menyesuaikan proses validasi dengan kelas `SignatureValidationOptions`. Dalam tutorial ini kami menentukan algoritma hash, tetapi Anda juga dapat mengatur pemeriksaan pencabutan sertifikat, verifikasi timestamp, dan lainnya. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Mengapa ini penting:* Algoritma hash harus cocok dengan yang digunakan saat tanda tangan dibuat. Menggunakan algoritma yang tidak cocok akan menyebabkan validasi gagal meskipun tanda tangan secara keseluruhan benar. + +## Langkah 4: Validasi tanda tangan pertama + +Sebagian besar PDF hanya berisi satu tanda tangan, tetapi koleksi `Signatures` dapat menampung banyak. Contoh ini memvalidasi entri pertama (`[0]`). Metode `Validate` mengembalikan Boolean yang menunjukkan keberhasilan. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Kasus tepi:* Jika PDF tidak memiliki tanda tangan, `document.Signatures.Count` akan menjadi `0` dan mengakses `[0]` akan menimbulkan `IndexOutOfRangeException`. Lindungi kode dengan pemeriksaan sederhana: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Langkah 5: Tampilkan hasil validasi + +Akhirnya, tulis hasilnya ke konsol. Langkah ini memperlihatkan hasil **check pdf signature** dalam format yang dapat dibaca manusia. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Saat Anda menjalankan program, Anda akan melihat: + +``` +Signature valid: True +``` + +Jika tanda tangan rusak, menggunakan algoritma yang tidak didukung, atau sertifikat dicabut, output akan menjadi `False`. + +## Contoh lengkap yang dapat dijalankan + +Salin kode berikut ke proyek konsol baru (`dotnet new console`) dan ganti `YOUR_DIRECTORY/signed.pdf` dengan jalur ke file PDF yang ditandatangani. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Output yang diharapkan + +``` +Signature valid: True +``` + +Jika tanda tangan gagal divalidasi, konsol akan menampilkan `Signature valid: False`. + +## Pertanyaan umum dan pemecahan masalah + +| Pertanyaan | Jawaban | +|------------|---------| +| **Bagaimana jika PDF menggunakan algoritma hash yang berbeda?** | Ubah `HashAlgorithm` dalam `SignatureValidationOptions` agar sesuai, misalnya `HashAlgorithm.SHA256`. | +| **Bagaimana cara memvalidasi semua tanda tangan dalam PDF multi‑signature?** | Lakukan perulangan pada `document.Signatures` dan panggil `Validate` untuk setiap entri. | +| **Apakah saya dapat memverifikasi rantai kepercayaan sertifikat penandatangan?** | Setel `validationOptions.CheckCertificateRevocation = true` dan secara opsional sediakan `CertificateStore` khusus untuk menyertakan sertifikat root tepercaya. | +| **Bagaimana jika saya perlu mendukung validasi timestamp?** | Aktifkan `validationOptions.CheckTimestamp = true`. Aspose.PDF kemudian akan memverifikasi token timestamp yang tersemat. | +| **Apakah ada cara untuk mendapatkan detail kesalahan validasi?** | Gunakan `ValidateEx(validationOptions, out ValidationResult result)`; `result` berisi `ErrorMessage` dan `ErrorCode` untuk setiap kegagalan. | + +## Langkah selanjutnya + +* Jelajahi **validate pdf signature** untuk beberapa tanda tangan dengan mengiterasi `document.Signatures`. +* Gabungkan tutorial ini dengan **check pdf signature** dalam sebuah web API untuk menyediakan verifikasi waktu nyata bagi kontrak yang diunggah. +* Selami lebih dalam **signature validation options** seperti pemeriksaan CRL/OCSP, validasi timestamp, dan penyimpanan kepercayaan khusus. + +Anda kini memiliki **pdf signature tutorial** lengkap yang menunjukkan cara **validate pdf digital signature** menggunakan Aspose.PDF dalam C#. Silakan sesuaikan kode untuk alur kerja Anda, tambahkan logging, atau integrasikan ke dalam pipeline pemrosesan dokumen yang lebih besar. Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait dan 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. + +- [Tutorial Digital Signature Aspose Pdf Net](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial Digital Signature Aspose Pdf Net](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial Digital Signature Aspose Pdf Net](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/indonesian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..5644d8042e --- /dev/null +++ b/pdf/indonesian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Verifikasi tanda tangan PDF di C# menggunakan Aspose.PDF. Pelajari cara + memvalidasi tanda tangan digital PDF dan menampilkan daftar tanda tangan PDF hanya + dalam beberapa baris kode. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: id +lastmod: 2026-08-08 +og_description: Verifikasi tanda tangan PDF di C# dengan Aspose.PDF. Panduan ini menunjukkan + cara memvalidasi tanda tangan digital PDF, menampilkan daftar tanda tangan PDF, + dan menangani tanda tangan yang terkompromi secara efisien. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Verifikasi tanda tangan PDF di C# – tutorial cepat Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Verifikasi tanda tangan PDF di C# dengan Aspose.PDF – panduan lengkap +url: /id/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifikasi tanda tangan PDF di C# dengan Aspose.PDF – panduan lengkap + +Jika Anda perlu **verifikasi tanda tangan PDF** dalam aplikasi .NET, panduan ini menunjukkan cara singkat melakukannya dengan Aspose.PDF. Anda akan belajar cara **memvalidasi digital signature PDF**, **mendaftar tanda tangan PDF**, dan mendeteksi tanda tangan yang terkompromi hanya dengan beberapa baris kode. + +Tutorial ini mencakup semua hal mulai dari instalasi pustaka hingga penanganan kasus tepi seperti dokumen tanpa tanda tangan atau PDF terenkripsi. Pada akhir tutorial Anda akan dapat mengintegrasikan verifikasi tanda tangan ke dalam proyek C# apa pun, memastikan keaslian file PDF yang masuk. + +**Prerequisites** + +- .NET 6.0 atau yang lebih baru (kode ini juga bekerja dengan .NET Framework 4.6+). +- Pemahaman dasar tentang C# dan Visual Studio (atau IDE apa pun yang Anda sukai). +- Lisensi Aspose.PDF untuk .NET (versi percobaan gratis dapat digunakan untuk evaluasi). + +Jika Anda memenuhi persyaratan ini, Anda siap memulai verifikasi tanda tangan PDF. + +## Verifikasi tanda tangan PDF – menyiapkan proyek + +1. **Add the Aspose.PDF NuGet package** + Open the Package Manager Console and run: + + ```bash + Install-Package Aspose.PDF + ``` + + This brings in the `Aspose.Pdf` assembly and its dependencies. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` gives you the `Any` extension used later, while `Aspose.Pdf` contains the `Document` and `Signature` classes. + +## Muat dokumen PDF + +Langkah fungsional pertama adalah membuka PDF yang ingin Anda periksa. Aspose.PDF membaca file ke dalam memori, memungkinkan Anda untuk menanyakan tanda tangannya. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – Loading the document inside a `using` block guarantees that the file handle is released promptly, preventing file‑lock issues in long‑running services. + +> **Mengapa ini penting** – Memuat dokumen di dalam blok `using` menjamin bahwa handle file segera dilepaskan, mencegah masalah penguncian file pada layanan yang berjalan lama. + +## Daftar tanda tangan PDF + +Sebelum Anda memvalidasi sebuah tanda tangan, Anda mungkin ingin mengetahui berapa banyak tanda tangan yang ada. Langkah ini mendemonstrasikan kemampuan **list PDF signatures**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Penjelasan** + +- `document.Signatures` mengembalikan koleksi objek `Signature`. +- `Count` memberi tahu berapa banyak tanda tangan yang ada. +- Setiap `Signature` menampilkan metadata seperti `Id`, `SignatureType`, dan `Reason`, yang dapat berguna untuk log audit. + +**Edge case** – Jika PDF tidak memiliki tanda tangan, `Count` akan menjadi `0` dan loop tidak akan dijalankan. Anda dapat menangani skenario ini dengan elegan: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validasi digital signature PDF – mendeteksi tanda tangan yang terkompromi + +Sekarang Anda dapat mengenumerasi tanda tangan, tugas inti adalah **verify PDF signature** integritasnya. Aspose.PDF menyediakan properti `IsCompromised`, yang mengembalikan `true` ketika hash kriptografis tanda tangan tidak lagi cocok dengan konten dokumen. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Mengapa ini bekerja** + +- `Signature.IsCompromised` melakukan validasi kriptografis penuh menggunakan rantai sertifikat yang tersemat. +- Operator LINQ `Any` berhenti pada tanda tangan pertama yang terkompromi, membuat pemeriksaan menjadi efisien bahkan untuk dokumen dengan banyak tanda tangan. + +### Menangani beberapa tanda tangan secara individual + +Jika Anda perlu mengetahui tanda tangan spesifik mana yang gagal, iterasi alih-alih menggunakan `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Tips pro:** Simpan hasil validasi bersama `sig.Id` di basis data untuk analisis forensik di kemudian hari. + +## Output hasil dan pertimbangkan kasus tepi + +Berikut adalah program lengkap yang dapat dijalankan yang menggabungkan langkah-langkah di atas. Program ini memuat PDF, mendaftar semua tanda tangan, memvalidasinya, dan mencetak hasil yang jelas. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Output yang diharapkan (tanda tangan valid)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Output yang diharapkan (tanda tangan terkompromi)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Kesalahan umum dan cara menghindarinya + +| Masalah | Solusi | +|---------|----------| +| PDF dilindungi password. | Berikan password melalui `document.Encrypt.Decrypt(password)` sebelum mengakses `Signatures`. | +| Tidak ada lisensi Aspose.PDF yang diatur. | Gunakan `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` untuk menghindari watermark evaluasi. | +| PDF besar menyebabkan penggunaan memori tinggi. | Proses file dalam mode streaming (`Document.Load(stream)`) alih-alih memuat seluruh file sekaligus. | + +## Kesimpulan + +Anda sekarang tahu cara **verify PDF signature** di C# menggunakan Aspose.PDF, cara **validate digital signature PDF**, dan cara **list PDF signatures** untuk pelaporan atau keperluan audit. Contoh lengkap menunjukkan cara memuat dokumen, mengenumerasi tanda tangannya, memeriksa masing‑masing untuk kompromi, dan menangani kasus tepi yang umum. + +Langkah selanjutnya yang dapat Anda jelajahi: + +- **Validasi token timestamp** untuk memastikan tanda tangan dibuat sebelum sertifikat kedaluwarsa. +- **Ekstrak sertifikat penandatangan** (`sig.Certificate`) untuk validasi trust‑store kustom. +- **Integrasikan dengan ASP.NET Core** untuk secara otomatis menolak PDF yang diunggah yang gagal verifikasi. + +Silakan bereksperimen dengan banyak tanda tangan, logika validasi kustom, atau pustaka PDF alternatif. Jika Anda menemukan panduan ini berguna, bagikan kepada rekan tim atau tambahkan tip Anda sendiri di komentar. + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang 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 sendiri. + +- [Cara Memverifikasi PDF – Validasi Tanda Tangan PDF dengan Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verifikasi tanda tangan pdf di C# – Panduan Lengkap untuk Memvalidasi Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verifikasi Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/indonesian/net/text-operations/_index.md index 1422092b90..e7757bbad7 100644 --- a/pdf/indonesian/net/text-operations/_index.md +++ b/pdf/indonesian/net/text-operations/_index.md @@ -27,7 +27,7 @@ Pelajari cara menambahkan nomor halaman menggunakan Aspose.PDF untuk .NET dengan Pelajari cara menghapus semua teks dari dokumen PDF secara efisien menggunakan Aspose.PDF untuk .NET. Ikuti panduan langkah demi langkah ini dengan contoh kode dan kiat performa. ### [Membuat & Memutar Teks dalam PDF Menggunakan Aspose.PDF .NET: Panduan Lengkap untuk Pengembang](./create-rotate-text-aspose-pdf-net/) -Pelajari cara membuat dan memutar teks dalam dokumen PDF menggunakan Aspose.PDF untuk .NET. Panduan ini mencakup inisialisasi, konfigurasi teks, dan tata letak kreatif dengan C#. +Pelajari cara membuat dan memutar teks dalam dokumen PDF menggunakan Aspose.PDF .NET. Panduan ini mencakup inisialisasi, konfigurasi teks, dan tata letak kreatif dengan C#. ### [Membuat PDF Teks Indentasi di .NET Menggunakan Aspose.PDF](./create-indented-text-pdfs-net-aspose-pdf/) Tutorial kode untuk Aspose.PDF Net @@ -164,6 +164,8 @@ Tutorial kode untuk Aspose.PDF Net ### [Gaya Teks dalam PDF yang Ditandai menggunakan Aspose.PDF untuk .NET | Panduan untuk Pembuatan PDF yang Mudah Diakses dan Estetis](./style-text-tagged-pdfs-aspose-pdf-net/) Pelajari cara memberi gaya pada teks dalam dokumen PDF yang diberi tag dengan Aspose.PDF untuk .NET. Panduan ini mencakup instalasi, teknik, dan aplikasi praktis untuk meningkatkan aksesibilitas. +### [Cara Meringkas PDF dengan Aspose.Pdf.AI – Panduan](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## Sumber Daya Tambahan - [Dokumentasi Aspose.PDF untuk Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/indonesian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/indonesian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..14f73a3ba5 --- /dev/null +++ b/pdf/indonesian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Cara merangkum PDF dengan Aspose.Pdf.AI – pelajari cara merangkum PDF + dengan AI, menghasilkan ringkasan PDF, dan menyimpan ringkasan sebagai PDF. Kode + lengkap dan praktik terbaik. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: id +lastmod: 2026-08-08 +og_description: Cara merangkum PDF dengan Aspose.Pdf.AI. Tutorial ini menunjukkan + cara merangkum PDF dengan AI, menghasilkan rangkuman PDF, dan menyimpan rangkuman + sebagai PDF dalam beberapa baris kode C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Cara merangkum PDF dengan Aspose.Pdf.AI – panduan langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Cara meringkas PDF dengan Aspose.Pdf.AI – panduan +url: /id/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara meringkas PDF dengan Aspose.Pdf.AI – panduan + +Jika Anda perlu **cara meringkas PDF** dengan cepat dan dapat diandalkan, Anda dapat membiarkan model AI melakukan pekerjaan berat. Tutorial ini menunjukkan secara tepat cara meringkas PDF dengan AI, menghasilkan ringkasan PDF, dan menyimpan ringkasan sebagai PDF menggunakan Aspose.Pdf.AI SDK untuk .NET. Anda akan mendapatkan contoh lengkap yang dapat dijalankan serta penjelasan setiap baris sehingga Anda dapat menyesuaikan solusi ini untuk proyek Anda sendiri. + +Panduan mencakup: + +* Menyiapkan folder sumber dan kunci API +* Membuat `OpenAIClient` yang berkomunikasi dengan model +* Mengonfigurasi opsi ringkasan seperti temperature dan jalur dokumen +* Membangun `SummaryCopilot` dan mengambil teks ringkasan secara asynchronous +* Menyimpan ringkasan yang dihasilkan kembali ke file PDF + +Tidak diperlukan layanan eksternal selain endpoint OpenAI, dan kode ini bekerja dengan .NET 6+ serta Aspose.Pdf.AI 23.7 (atau lebih baru). + +## Prasyarat + +* **.NET 6 SDK** (atau versi .NET yang lebih baru) +* **Aspose.Pdf.AI untuk .NET** – instal melalui NuGet: `dotnet add package Aspose.Pdf.AI` +* **Kunci API OpenAI** dengan akses ke model yang ingin Anda gunakan (misalnya, `gpt‑4o`) +* File PDF yang ingin Anda ringkas (contoh menggunakan `SampleDocument.pdf`) + +Pastikan folder yang Anda tentukan di `dataDirectory` ada dan aplikasi memiliki izin baca/tulis. + +## Langkah 1: Siapkan struktur proyek + +Buat proyek konsol (atau integrasikan kode ke dalam aplikasi .NET apa pun). `Program.cs` minimal terlihat seperti ini: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Mengapa struktur ini penting + +* **`await using`** secara otomatis membuang `OpenAIClient`, melepaskan koneksi HTTP. +* **`Path.Combine`** membangun jalur yang independen terhadap OS, mencegah bug pada Windows vs. Linux. +* **Temperature** mengontrol kreativitas; `0.5` memberikan ringkasan yang seimbang dan faktual. +* **`GetSummaryAsync`** mengembalikan teks biasa, sementara `SaveSummaryAsync` membuat PDF yang tepat yang mempertahankan font dan tata letak. + +## Langkah 2: Pahami opsi ringkasan + +Kelas `OpenAISummaryCopilotOptions` memungkinkan Anda menyesuaikan proses peringkasan: + +| Option | Purpose | Typical values | +|--------|---------|----------------| +| `WithTemperature(double)` | Mengontrol tingkat keacakan. `0.0` = deterministik, `1.0` = sangat kreatif. | `0.3‑0.7` untuk dokumen bisnis | +| `WithDocument(string)` | Jalur ke PDF sumber. Harus berupa file yang dapat dibaca. | Jalur absolut atau relatif apa pun | +| `WithPrompt(string)` *(optional)* | Prompt khusus untuk membimbing model. | “Ringkas temuan utama dalam 150 kata.” | + +Jika Anda memiliki **PDF besar** (lebih dari 10 MB atau banyak halaman), pertimbangkan memecah dokumen menjadi potongan‑potongan lebih kecil sebelum diringkas untuk menghindari kesalahan batas token. SDK tidak secara otomatis memecah; Anda dapat menggunakan `PdfDocument` dari `Aspose.Pdf` untuk mengekstrak halaman dan memberikannya satu per satu. + +## Langkah 3: Jalankan kode dan verifikasi output + +1. Letakkan `SampleDocument.pdf` di dalam folder `Data` yang Anda referensikan. +2. Ganti `"YOUR_API_KEY"` dengan kunci OpenAI Anda yang sebenarnya. +3. Jalankan `dotnet run`. + +Anda akan melihat dua bagian di konsol: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Buka `Summary_out.pdf` dengan penampil PDF apa pun – file tersebut akan berisi teks ringkasan yang sama, diformat dengan font default. PDF ini sepenuhnya dapat dicari karena SDK menyisipkan teks sebagai halaman PDF standar. + +## Langkah 4: Variasi umum dan penanganan kasus tepi + +### Ringkas hanya sebagian dokumen + +Jika Anda perlu **meringkas pdf dengan ai** untuk bab tertentu, ekstrak rentang tersebut terlebih dahulu: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Kemudian arahkan `WithDocument` ke `Chapter5.pdf`. + +### Menyesuaikan panjang ringkasan + +Anda dapat memengaruhi panjang dengan menambahkan prompt khusus: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Menangani kesalahan API + +Gangguan jaringan atau batas kuota menghasilkan `Aspose.Pdf.AI.Exceptions.AIException`. Bungkus pemanggilan dalam blok `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Menyimpan ringkasan dengan tata letak khusus + +`SaveSummaryAsync` menulis teks biasa. Untuk menata PDF (menambahkan judul, header, atau branding), buat `PdfDocument` baru dan sisipkan ringkasan secara manual: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Langkah 5: Tips kinerja dan praktik terbaik + +* **Gunakan kembali `OpenAIClient`** untuk banyak ringkasan dalam proses yang sama – membuat klien itu murah, tetapi menggunakan kembali `HttpClient` yang mendasarinya mengurangi kehabisan soket. +* **Cache ringkasan** jika PDF sumber tidak berubah; Anda dapat menyimpan teks di basis data dan melewatkan pemanggilan API. + +## 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 yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Cara Mengekstrak & Menyimpan Halaman PDF Tertentu Menggunakan Aspose.PDF untuk .NET - Panduan Komprehensif](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Cara Mengekstrak dan Menyimpan Lampiran PDF Menggunakan Aspose.PDF .NET: Panduan Komprehensif](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Cara Mengonversi HTML ke PDF dengan Aspose.PDF .NET: Panduan Lengkap](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/conversion-export/_index.md b/pdf/italian/net/conversion-export/_index.md index 88b3c12fe6..0ec13332ef 100644 --- a/pdf/italian/net/conversion-export/_index.md +++ b/pdf/italian/net/conversion-export/_index.md @@ -224,8 +224,8 @@ Padroneggia la conversione da PDF a HTML con Aspose.PDF per .NET. Migliora l'acc ### [Conversione da PDF a HTML con Aspose.PDF per .NET](./pdf-to-html-conversion-aspose-dot-net/) Un tutorial sul codice per Aspose.PDF Net -### [Conversione da PDF a TIFF in .NET con Aspose.PDF: una guida passo passo](./pdf-to-tiff-conversion-aspose-pdf-net/) -Scopri come convertire documenti PDF in immagini TIFF utilizzando Aspose.PDF per .NET. Padroneggia profondità di colore personalizzate e tecniche avanzate di elaborazione delle immagini. +### [Salva PDF come HTML con Aspose.PDF – guida passo‑passo](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Scopri come salvare PDF come file HTML utilizzando Aspose.PDF con esempi di codice C# passo‑passo. ## Risorse aggiuntive diff --git a/pdf/italian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/italian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..a665c3a568 --- /dev/null +++ b/pdf/italian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Salva PDF come HTML usando Aspose.PDF in C#. Scopri come convertire PDF + in HTML, ignorare le immagini raster e gestire i casi limite più comuni. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: it +lastmod: 2026-08-08 +og_description: Salva PDF come HTML usando Aspose.PDF. Questa guida ti mostra come + convertire PDF in HTML, saltare le immagini raster e evitare gli errori più comuni. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Salva PDF come HTML con Aspose.PDF – tutorial completo C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Salva PDF come HTML con Aspose.PDF – guida passo‑passo +url: /it/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salva PDF come HTML con Aspose.PDF – guida passo‑passo + +Se hai bisogno di **salvare PDF come HTML** rapidamente, questo tutorial ti mostra esattamente come farlo con Aspose.PDF per .NET. Che tu stia costruendo un'app web per visualizzare documenti o esportando report per un indicizzamento SEO‑friendly, vedrai una soluzione completa e eseguibile che converte PDF in HTML offrendo un controllo fine sulle immagini raster. + +Oltre all'attività principale, tratteremo anche le opzioni di **aspose pdf html conversion** che ti permettono di saltare le immagini raster, regolare la gestione del CSS e gestire documenti di grandi dimensioni in modo efficiente. Alla fine di questa guida avrai un programma autonomo che potrai inserire in qualsiasi progetto .NET. + +## Prerequisiti + +* .NET 6.0 SDK o successivo (il codice funziona anche con .NET Core e .NET Framework) +* Visual Studio 2022 o qualsiasi IDE che supporti C# +* Una licenza Aspose.PDF per .NET (la versione di prova gratuita è valida per la valutazione) +* Un file PDF chiamato `report.pdf` posizionato in una cartella a cui puoi fare riferimento dal codice + +Non sono necessari pacchetti NuGet aggiuntivi oltre a `Aspose.Pdf`. + +## Passo 1: Installa il pacchetto NuGet Aspose.PDF + +Apri il terminale nella cartella del tuo progetto ed esegui: + +```bash +dotnet add package Aspose.Pdf +``` + +Il pacchetto aggiunge lo spazio dei nomi `Aspose.Pdf`, che contiene la classe `Document` e il tipo `HtmlSaveOptions` utilizzati per le operazioni di **convert pdf to html**. + +## Passo 2: Crea un progetto console e aggiungi le direttive using + +Crea una nuova applicazione console se non ne hai già una: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Quindi apri `Program.cs` e aggiungi gli spazi dei nomi richiesti: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Queste direttive ti danno accesso all'API PDF core e alle opzioni di salvataggio HTML che controllano il processo **aspose convert pdf html**. + +## Passo 3: Carica il documento PDF + +La prima riga operativa legge il PDF di origine in un oggetto `Aspose.Pdf.Document`. Questo oggetto rappresenta l'intero file PDF in memoria e fornisce metodi per salvare, modificare ed estrarre contenuti. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Perché è importante*: Caricare il documento una sola volta mantiene prevedibile l'uso della memoria, soprattutto per PDF di grandi dimensioni. Se il file non viene trovato, Aspose genera una `FileNotFoundException`, quindi assicurati che il percorso sia corretto. + +## Passo 4: Configura le opzioni di salvataggio HTML + +`HtmlSaveOptions` ti consente di affinare la conversione del PDF. In questo tutorial saltiamo le immagini raster per mantenere l'output leggero, ma puoi cambiare la modalità in `EmbedAll` se ti servono. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Punti chiave**: + +* `RasterImagesSavingMode.Skip` indica ad Aspose di ignorare le immagini bitmap (JPEG, PNG) durante la conversione. È ideale quando il PDF di origine contiene pagine scansionate che non ti servono nella visualizzazione HTML. +* Puoi passare a `EmbedAll` o `External` se desideri che le immagini vengano salvate come file separati. +* La proprietà `ResourcesFolder` diventa rilevante solo quando le immagini vengono salvate esternamente. + +## Passo 5: Salva il documento come HTML + +Ora scrivi il file HTML su disco utilizzando le opzioni configurate. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Dopo che questa chiamata termina, `report.html` contiene il contenuto testuale, la grafica vettoriale e il layout preservati dal PDF originale, ma senza immagini raster. Puoi aprire il file in un browser per verificare il risultato. + +## Output previsto + +Quando apri `report.html` in Chrome o Edge, dovresti vedere: + +* Tutti i titoli, i paragrafi e le forme vettoriali renderizzate correttamente. +* Nessun tag `` per le immagini raster (sono omessi a causa della modalità `Skip`). +* CSS pulito e minimale, sia inline che in un foglio di stile separato, a seconda dell'opzione scelta. + +Se devi confermare che le immagini siano state omesse, ispeziona il sorgente della pagina (`Ctrl+U`). Non troverai alcuna voce ``. + +## Passo 6: Gestisci casi limite comuni + +### 6.1 PDF di grandi dimensioni (> 100 MB) + +Per file molto grandi, abilita lo streaming per ridurre la pressione sulla memoria: + +```csharp +htmlOpts.Streaming = true; +``` + +Lo streaming scrive i blocchi HTML direttamente su disco, evitando che l'intero documento venga mantenuto in memoria. + +### 6.2 PDF protetti da password + +Se il PDF di origine è criptato, fornisci la password prima di salvare: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Tentare di salvare senza decrittare genera una `InvalidPasswordException`. + +### 6.3 Caratteri Unicode + +Aspose.PDF incorpora automaticamente i font Unicode, ma puoi forzare un font specifico per una resa coerente: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Nominazione file personalizzata per più pagine + +Se desideri che ogni pagina PDF sia un file HTML separato, imposta: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Questo crea `report_page_1.html`, `report_page_2.html`, ecc., utile per la paginazione nelle applicazioni web. + +## Esempio completo e eseguibile + +Di seguito trovi il programma completo che incorpora tutti i passaggi discussi. Copialo in `Program.cs`, regola i percorsi e esegui `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verifica**: Dopo l'esecuzione, la console stampa il messaggio di successo. Apri il file HTML generato in un browser per confermare che il testo e la grafica vettoriale siano visualizzati correttamente e che le immagini raster siano omesse. + +## Consigli professionali e insidie + +* **Consiglio pro**: Se in seguito ti servono le immagini raster, cambia `RasterImagesSavingMode` in `External` e imposta `ResourcesFolder`. Questo crea una sottocartella `images` con i bitmap estratti. +* **Attenzione a**: Usare la modalità predefinita `Skip` su PDF che dipendono fortemente da immagini scansionate produrrà aree vuote dove dovrebbero esserci le immagini. Testa sempre con un campione rappresentativo dei tuoi documenti. +* **Consiglio di performance**: Riutilizzare una singola istanza di `HtmlSaveOptions` per più documenti riduce l'overhead di creazione degli oggetti nelle conversioni batch. +* **Verifica della versione**: L'API mostrata funziona con Aspose.PDF per .NET versione 23.9 e successive. Le versioni precedenti potrebbero usare `HtmlSaveOptions.RasterImagesSavingMode` con un nome di enum leggermente diverso. + +## Conclusione + +Ora sai come **salvare PDF come HTML** usando Aspose.PDF, come controllare la gestione delle immagini raster e come affrontare le sfide tipiche come file di grandi dimensioni, protezione con password e output HTML per pagina. Questa soluzione completa ti permette di integrare la conversione da PDF a HTML in qualsiasi applicazione C# con fiducia. + +### Cosa segue? + +* Esplora **aspose pdf html conversion** per incorporare font e personalizzare il CSS. +* Combina questa conversione con una Web API per servire HTML su richiesta. +* Prova la direzione opposta—**convert pdf to html** e poi di nuovo a PDF—per convalidare la fedeltà del round‑trip. + +Sentiti libero di sperimentare con le opzioni e condividi i tuoi risultati nei commenti o sui forum di Aspose. 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. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/italian/net/digital-signatures/_index.md index 6d828e3587..b00974df3f 100644 --- a/pdf/italian/net/digital-signatures/_index.md +++ b/pdf/italian/net/digital-signatures/_index.md @@ -62,6 +62,9 @@ Scopri come caricare un PDF in C#, convertirlo in PDF/X‑4 e elencare le firme ### [Convalida firma PDF con Aspose – Converti PDF in HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Scopri come convalidare le firme PDF e convertire i PDF in HTML con Aspose, garantendo l'integrità dei documenti durante la trasformazione. +### [Come convalidare un PDF con Aspose.PDF – verificare la validità della firma PDF in C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Scopri come verificare la validità delle firme PDF in C# utilizzando Aspose.PDF. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/italian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..13826fea81 --- /dev/null +++ b/pdf/italian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: Come convalidare un PDF usando Aspose.PDF e verificare la firma digitale + del PDF. Segui questa guida passo passo per controllare rapidamente la firma del + PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: it +lastmod: 2026-08-08 +og_description: Come convalidare un PDF usando Aspose.PDF. Impara a convalidare la + firma digitale PDF e a verificare la validità della firma PDF in poche righe di + codice C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Come convalidare PDF – verificare la validità della firma PDF con Aspose.PDF + in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Come validare PDF con Aspose.PDF – verificare la validità della firma PDF in + C# +url: /it/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come convalidare PDF con Aspose.PDF – verificare la validità della firma PDF in C# + +Se hai bisogno di **how to validate PDF** contenenti firme digitali, questo tutorial ti mostra una soluzione completa. Imparerai a caricare un PDF, creare un validatore di certificati e verificare la validità della firma PDF con Aspose.PDF per .NET. + +Convalidare una firma digitale PDF è una necessità comune per la conformità, la fatturazione e lo scambio sicuro di documenti. Alla fine di questa guida potrai verificare con fiducia se un PDF firmato è affidabile e comprenderai come gestire casi particolari tipici, come certificati mancanti o firme multiple. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +- .NET 6.0 o versioni successive installate +- Un IDE come Visual Studio 2022 (qualsiasi editor che supporta C# funziona) +- Una copia con licenza di **Aspose.PDF for .NET** (la versione di prova gratuita è valida per la valutazione) +- Un file PDF firmato (`signed.pdf`) e, se la firma si basa su una CA privata, il certificato attendibile corrispondente (`trustedCertificate.pfx`) + +Non sono richiesti pacchetti NuGet aggiuntivi oltre a `Aspose.PDF`. + +## Passo 1: Installa Aspose.PDF + +Apri un terminale nella cartella del tuo progetto ed esegui: + +```bash +dotnet add package Aspose.PDF +``` + +Il comando aggiunge la libreria più recente di Aspose.PDF, che contiene le classi `Document` e `CertificateValidator` utilizzate più avanti. + +## Passo 2: Carica il documento PDF + +Caricare un PDF è la prima operazione che esegui quando **how to load pdf** programmaticamente. Il costruttore `Document` accetta un percorso file, uno stream o un array di byte. L'uso di un percorso completo mantiene l'esempio chiaro. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Perché è importante:** L'oggetto `Document` rappresenta l'intero file PDF in memoria. Senza caricare il file, non è possibile accedere alla sua collezione `Signatures`, necessaria per **check pdf signature** dati. + +## Prepara il validatore di certificati + +Una firma digitale è attendibile solo se il certificato di firma si collega a una radice di cui ti fidi. `CertificateValidator` ti consente di indirizzare Aspose.PDF verso un archivio di certificati attendibile o un file PFX specifico. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Se il tuo PDF utilizza una CA pubblica già fidata da Windows, puoi omettere `certPath` e istanziare `CertificateValidator` con il suo costruttore predefinito. Fornire un PFX personalizzato è utile per ambienti PKI interni. + +## Convalida la prima firma digitale + +Un PDF può contenere più firme. Per semplicità, questo tutorial convalida la prima firma (`Signatures[0]`). Il metodo `Validate` restituisce `true` quando la firma è crittograficamente intatta **and** il certificato di firma è attendibile. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Cosa succede dietro le quinte:** +- Il metodo verifica l'hash del contenuto firmato rispetto al valore della firma. +- Costruisce la catena di certificati usando il validatore fornito. +- Lo stato di revoca (CRL/OCSP) viene valutato se il validatore è configurato per farlo. + +### Gestione di più firme + +Se il tuo PDF contiene più di una firma, itera sulla collezione `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Questo modello ti consente di **check pdf signature** su ogni pagina e di segnalare i risultati individuali. + +## Output del risultato della convalida + +Infine, scrivi l'esito sulla console. Nel codice di produzione probabilmente registreresti il risultato o solleveresti un'eccezione per una firma non valida. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Output console previsto + +``` +Valid +``` + +o + +``` +Invalid +``` + +Il messaggio riflette il valore booleano restituito da `Validate`. Un risultato “Invalid” può indicare un documento manomesso, un certificato non attendibile o un certificato di firma scaduto. + +## Problemi comuni e consigli di best‑practice + +### 1. Certificato attendibile mancante +Se ricevi `Invalid` e sai che la firma dovrebbe essere attendibile, verifica che il certificato radice corretto sia fornito a `CertificateValidator`. Usa la sovraccarico che accetta una `X509Certificate2Collection` per più radici. + +### 2. Firma con riferimenti esterni +Alcune firme coprono contenuti esterni (ad es., un file allegato). Assicurati che le risorse esterne siano accessibili; altrimenti la verifica dell'hash fallisce. + +### 3. Convalida del timestamp +Una firma può includere un token di timestamp. Per convalidarlo, configura il validatore per controllare i certificati dell’autorità di timestamp (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Prestazioni con PDF di grandi dimensioni +Caricare un PDF di centinaia di pagine può consumare molta memoria. Se ti servono solo i dati della firma, usa `PdfFileEditor` per estrarre il dizionario della firma senza renderizzare le pagine. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Sicurezza dei thread +Le istanze di `Document` non sono thread‑safe. Crea un nuovo `Document` per thread quando convalidi molti PDF in parallelo. + +## Esempio completo, eseguibile + +Di seguito trovi il programma completo che puoi copiare, incollare ed eseguire dopo aver aggiornato i percorsi dei file. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Eseguire il programma** stampa una riga per ogni firma, indicando chiaramente se il PDF supera il controllo **validate pdf digital signature**. + +## Conclusione + +Ora sai **how to validate PDF** contenenti firme digitali usando Aspose.PDF per .NET. Il tutorial ha coperto il caricamento di un PDF, la configurazione di un validatore di certificati, la verifica della validità della firma PDF, la gestione di firme multiple e la risoluzione di problemi comuni. + +Successivamente, esplora argomenti correlati come **how to sign PDF**, **how to add timestamp tokens** e **how to extract signed content**. Queste estensioni ti permettono di costruire un flusso di lavoro documentale sicuro end‑to‑end in C#. + +--- + + +## 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 di implementazione alternativi nei tuoi progetti. + +- [Come verificare PDF – Convalidare la firma PDF con Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Come estrarre le informazioni della firma PDF usando Aspose.PDF .NET: Guida passo‑a‑passo](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Come rimuovere le firme digitali PDF usando Aspose.PDF .NET | Guida completa](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/italian/net/document-conversion/_index.md index 40fa26296b..9546136f98 100644 --- a/pdf/italian/net/document-conversion/_index.md +++ b/pdf/italian/net/document-conversion/_index.md @@ -37,6 +37,7 @@ Imparerai come specificare le impostazioni di conversione, estrarre testo e imma | [PDF in PDFA](./pdf-to-pdfa/) Scopri come convertire i file PDF nel formato PDF/A utilizzando Aspose.PDF per .NET con questo tutorial passo dopo passo. | | [PDF in PDFA3b](./pdf-to-pdfa3b/) | Impara a convertire i file PDF nel formato PDF/A-3B senza sforzo con Aspose.PDF per .NET in questa guida passo passo. | | [Converti PDF in PDF/X‑4 in C# – Tutorial ASP.NET PDF passo‑passo](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Scopri come convertire un PDF in PDF/X‑4 usando Aspose.PDF per .NET con un esempio completo in C#. | +| [Tutorial di conversione PDF/X‑4 – impostare lo standard PDF e convertire PDF con Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Scopri come impostare lo standard PDF/X‑4 e convertire PDF utilizzando Aspose.PDF per .NET in questa guida passo passo. | | [Suggerimenti per il font da PDF a PNG](./pdf-to-png-font-hinting/) | Impara a convertire PDF in PNG con suggerimenti sui font utilizzando Aspose.PDF per .NET in una semplice guida passo passo. | | [PDF in PPT](./pdf-to-ppt/) | Scopri come convertire PDF in PPT utilizzando Aspose.PDF per .NET con questa guida passo passo. Facile, efficiente e perfetto per le presentazioni. | | [PDF in SVG](./pdf-to-svg/) | Scopri come convertire i file PDF in formato SVG utilizzando Aspose.PDF per .NET in questo tutorial passo passo. Perfetto per sviluppatori e designer. | diff --git a/pdf/italian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/italian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..a1f218010f --- /dev/null +++ b/pdf/italian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,227 @@ +--- +category: general +date: 2026-08-08 +description: Tutorial di conversione pdfx4 che mostra come impostare lo standard PDF + su PDF/X‑4 e convertire PDF con Aspose per una conversione di formato affidabile. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: it +lastmod: 2026-08-08 +og_description: Il tutorial di conversione pdfx4 spiega come impostare lo standard + PDF su PDF/X‑4 ed eseguire una conversione affidabile del PDF usando Aspose in C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Tutorial di conversione pdfx4 – imposta lo standard PDF e converti PDF usando + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Tutorial di conversione pdfx4 – imposta lo standard PDF e converti PDF usando + Aspose +url: /it/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial di conversione pdfx4 – impostare lo standard PDF e convertire PDF con Aspose + +Se hai bisogno di un **pdfx4 conversion tutorial**, questa guida ti accompagna passo passo nel processo completo di impostazione dello standard PDF a PDF/X‑4 e della conversione di un PDF usando Aspose. Che tu stia preparando file pronti per la stampa o garantendo la conformità di archiviazione a lungo termine, imparerai un flusso di lavoro affidabile per **aspose pdf format conversion** che funziona con .NET 6 e versioni successive. + +Il tutorial copre tutto, dalla configurazione del progetto alla gestione di casi limite come file sorgente mancanti o funzionalità non supportate. Alla fine dell'articolo avrai un programma C# autonomo che produce un file conforme a PDF/X‑4 pronto per i flussi di lavoro successivi. + +## Prerequisiti + +- .NET 6 SDK o versioni più recenti installate ([download here](https://dotnet.microsoft.com/download)) +- Una licenza valida di Aspose.PDF per .NET (la versione di prova gratuita funziona per i test) +- Visual Studio 2022, VS Code o qualsiasi IDE che supporti lo sviluppo .NET +- Un file PDF sorgente che desideri convertire (posizionalo in una cartella nota) + +Questi requisiti garantiscono che il codice venga eseguito senza configurazioni aggiuntive. + +## Passo 1: Creare un nuovo progetto console .NET + +Apri un terminale ed esegui i seguenti comandi per generare un'app console chiamata `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Aggiungi il pacchetto NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Il pacchetto `Aspose.Pdf` fornisce la classe `Document` e `PdfFormatConversionOptions` necessari per le operazioni di **convert pdf pdfx4**. + +## Passo 2: Scrivere il codice di conversione + +Apri `Program.cs` (o `Program.cs` se stai usando le nuove dichiarazioni di livello superiore) e sostituisci il suo contenuto con l'esempio completo qui sotto. Il codice dimostra **set pdf standard** a PDF/X‑4, esegue la conversione e include la gestione degli errori per le problematiche comuni. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Perché ogni parte è importante + +- **Argument validation** impedisce al programma di bloccarsi quando l'utente dimentica il percorso del file. +- **`Document` loading** genera un'eccezione chiara se il PDF sorgente è mancante o corrotto, il che è essenziale per un'esperienza solida di **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** è dove **set pdf standard**. Assegnando `PdfStandard.PdfX4`, Aspose regola automaticamente gli spazi colore, incorpora i font richiesti e scrive i metadati PDF/X‑4 necessari. +- **`FontEmbeddingMode.EmbedAll`** garantisce che tutti i font usati nel PDF sorgente siano incorporati, un requisito comune per i PDF pronti per la stampa. +- **`doc.Convert`** esegue la reale **aspose pdf format conversion**. Il metodo scrive il nuovo file in una sola chiamata, semplificando il flusso di lavoro. + +## Passo 3: Eseguire il convertitore + +Compila il progetto ed eseguilo con i percorsi di origine e destinazione: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Se tutto funziona, la console stampa: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Ora puoi aprire `output_pdfx4.pdf` in qualsiasi visualizzatore PDF che supporti PDF/X‑4 (ad esempio Adobe Acrobat Pro) e verificare la conformità tramite *File → Properties → Standards*. + +## Passo 4: Verificare la conformità PDF/X‑4 (opzionale) + +Per le pipeline di produzione potresti voler convalidare programmaticamente l'output. Aspose fornisce una classe `PdfComplianceChecker` (disponibile nel pacchetto `Aspose.Pdf`) che può essere usata come segue: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Eseguire questo snippet dopo la conversione ti fornisce un risultato esplicito di pass/fail, utile per pipeline CI/CD automatizzate. + +## Passo 5: Problemi comuni e consigli di best‑practice + +| Problema | Perché accade | Come evitarlo | +|----------|----------------|----------------| +| Font mancanti nel PDF sorgente | I font sono referenziati ma non incorporati, causando avvisi di conversione | Usa `FontEmbeddingMode.EmbedAll` come mostrato sopra | +| Il PDF sorgente contiene oggetti trasparenti non consentiti in PDF/X‑4 | PDF/X‑4 non consente certe miscele di trasparenza | Pre‑processa il PDF con `doc.ProcessTransparentObjects()` prima della conversione | +| File di grandi dimensioni causano OutOfMemoryException | L'intero documento viene caricato in memoria | Esegui lo streaming della sorgente usando `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licenza non applicata | La versione di prova aggiunge filigrane | Chiama `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` prima di qualsiasi utilizzo dell'API Aspose | + +Applicare questi consigli garantisce un'esperienza fluida di **convert pdf pdfx4** negli ambienti di produzione. + +## Passo 6: Estendere il tutorial + +Una volta padroneggiato il base **pdfx4 conversion tutorial**, puoi esplorare: + +- **Batch conversion**: iterare su una cartella di PDF e convertire ciascuno in PDF/X‑4. +- **Metadata injection**: aggiungere metadati XMP richiesti da specifiche tipografie. +- **Color profile management**: allegare profili ICC usando `doc.ColorSpace = ColorSpace.DeviceRGB;` prima della conversione. + +Tutte queste estensioni si basano sulla stessa fondazione di **aspose pdf format conversion** mostrata qui. + +## Conclusione + +Questo **pdfx4 conversion tutorial** ti ha mostrato come **set pdf standard** a PDF/X‑4, eseguire una conversione affidabile **convert pdf using Aspose**, e verificare il risultato. Ora disponi di un programma C# completo e eseguibile che può essere integrato in pipeline di elaborazione documenti più ampie o usato come utility autonoma. Sperimenta con l'elaborazione batch, la gestione dei metadati o standard PDF alternativi (PDF/A‑2b, PDF/UA) per approfondire la tua competenza in **aspose pdf format conversion**. + +Buon coding, e goditi la sicurezza che deriva da un output conforme a PDF/X‑4! + +## 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. + +- [Converti PDF/A in PDF standard usando Aspose.PDF .NET : Guida completa](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Come impostare una data di scadenza sui PDF usando Aspose.PDF per .NET (Tutorial C#)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Guida completa: Converti PDF in TIFF usando Aspose.PDF .NET per una conversione documenti senza interruzioni](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/italian/net/document-creation/_index.md b/pdf/italian/net/document-creation/_index.md index 944347a249..d5d3344406 100644 --- a/pdf/italian/net/document-creation/_index.md +++ b/pdf/italian/net/document-creation/_index.md @@ -76,9 +76,13 @@ Un tutorial sul codice per Aspose.PDF Net ### [Crea documento PDF con Aspose.PDF – Aggiungi pagina, forma e salva](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Scopri come aggiungere pagine e forme a un PDF e salvarlo usando Aspose.PDF per .NET. + ### [Creare documento PDF con Aspose.PDF – Guida passo‑passo](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Scopri come generare un documento PDF da zero utilizzando Aspose.PDF per .NET con questa guida passo‑passo. +### [Creare documento PDF in C# con Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Scopri come creare un documento PDF in C# utilizzando Aspose.PDF. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/italian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..bbdbe75c36 --- /dev/null +++ b/pdf/italian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Crea un documento PDF in C# usando Aspose.Pdf. Scopri come aggiungere + una pagina vuota al PDF, aggiungere un paragrafo al PDF e posizionare il testo nel + PDF con coordinate precise. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: it +lastmod: 2026-08-08 +og_description: Crea rapidamente un documento PDF in C#. Questo tutorial mostra come + aggiungere una pagina PDF vuota, aggiungere un paragrafo al PDF e posizionare il + testo nel PDF utilizzando Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Crea documento PDF in C# con Aspose.Pdf – guida completa +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Crea documento PDF in C# con Aspose.Pdf +url: /it/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crea documento pdf in C# con Aspose.Pdf + +Se hai bisogno di **creare documento pdf** programmaticamente, questa guida ti mostra esattamente come fare. Usando Aspose.Pdf per .NET puoi aggiungere una pagina pdf vuota, inserire un paragrafo in pdf e posizionare il testo in pdf con precisione pixel‑perfect—tutto in poche righe di codice C#. + +Concluderai il tutorial con un file PDF completamente funzionante che contiene una nota posizionata alle coordinate specificate. Nessun strumento esterno, nessuna modifica manuale—solo codice pulito e ripetibile che puoi inserire in qualsiasi progetto .NET. + +## Cosa imparerai + +* Come **creare documento pdf** con Aspose.Pdf. +* Il modo corretto per **aggiungere pagina pdf vuota** e perché una pagina deve esistere prima di aggiungere contenuti. +* Come **aggiungere paragrafo a pdf** e allegare un tag personalizzato (utile per estrazioni o styling successivi). +* La tecnica per **posizionare testo in pdf** usando la classe `Position`. +* Come salvare il risultato su disco e verificare l'output. + +**Prerequisiti** + +* .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.7+). +* Una licenza valida di Aspose.Pdf per .NET o una chiave di valutazione gratuita. +* Un IDE come Visual Studio 2022 o VS Code con l'estensione C#. + +> **Suggerimento professionale:** Se utilizzi una valutazione gratuita, il PDF generato conterrà una piccola filigrana. Registra una licenza per rimuoverla. + +## Come creare documento pdf con Aspose.Pdf + +Il primo passo è istanziare la classe `Document`. Questo oggetto rappresenta l'intero file PDF e ti dà accesso a pagine, risorse e opzioni di salvataggio. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Creare il documento **non** scrive ancora nulla su disco; prepara solo una rappresentazione in‑memoria che puoi manipolare. Questo approccio mantiene l'API veloce ed efficiente in termini di memoria. + +## Aggiungi pagina pdf vuota usando Aspose.Pdf + +Un PDF deve contenere almeno una pagina prima di poter inserire qualsiasi contenuto. Aggiungere una pagina vuota è una singola chiamata di metodo: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Il metodo `Add()` crea una pagina con dimensione predefinita (A4) e orientamento (ritratto). Se ti serve una dimensione diversa, passa un'istanza `PageSize` a `Add()`. + +## Aggiungi paragrafo a pdf e imposta una nota + +Ora che la pagina esiste, puoi creare un oggetto `Paragraph` che contiene il testo visibile. Il paragrafo può anche trasportare un tag personalizzato, utile quando in seguito devi individuare o stilizzare l'elemento programmaticamente. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Perché usare un tag? + +I tag sono metadati che viaggiano con l'elemento PDF. Possono essere interrogati in seguito con `Document.FindObject()` o utilizzati da processori PDF a valle che si basano sui tag per l'accessibilità o l'indicizzazione. + +## Posiziona testo in pdf con coordinate precise + +Il posizionamento predefinito di un paragrafo è l'angolo in alto a sinistra del margine della pagina. Per spostare il testo in una posizione esatta, imposta la proprietà `Position` sul tag del paragrafo: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Le coordinate sono misurate in punti (1 punto = 1/72 pollice). L'origine (0,0) è nell'angolo in basso a sinistra della pagina, che corrisponde alla maggior parte dei motori di rendering PDF. Regola i valori `X` e `Y` per adattarli alle esigenze del tuo layout. + +Dopo il posizionamento, aggiungi il paragrafo alla collezione della pagina: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Salva il documento pdf + +Infine, scrivi il PDF in‑memoria su un file. Puoi specificare il percorso di output, il formato e anche le opzioni di crittografia. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Quando il programma termina, `output.pdf` contiene una singola pagina con il testo **Important note** posizionato vicino all'angolo in alto a destra (X = 50, Y = 750). Apri il file in qualsiasi visualizzatore PDF per verificare il posizionamento. + +![Documento PDF generato con C# Aspose.Pdf che mostra la nota posizionata](https://example.com/images/generated-pdf.png) + +*Testo alternativo immagine: Documento PDF generato con C# Aspose.Pdf che mostra la nota posizionata* (include la parola chiave principale). + +## Esempio completo, eseguibile + +Mettendo insieme tutti i pezzi, ecco un'applicazione console completa che puoi copiare, compilare ed eseguire: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Output previsto** quando esegui il programma: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Aprendo `output.pdf` si vede una singola pagina con il testo **Important note** posizionato alle coordinate specificate. + +## Variazioni comuni e casi limite + +| Scenario | Cosa cambiare | Perché è importante | +|----------|----------------|----------------| +| **Dimensione pagina diversa** | `pdfDocument.Pages.Add(PageSize.A5)` | Pagine più piccole riducono le dimensioni del file e si adattano a schermi mobili. | +| **Note multiple** | Loop over a collection of strings and create a `Paragraph` for each, incrementing the `Y` coordinate. | Consente la generazione batch di note in stile elenco puntato. | +| **Caratteri Unicode** | Ensure the source file is saved as UTF-8 and set `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf supporta Unicode nativamente, ma la codifica del file deve corrispondere. | +| **PDF protetto da password** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Aggiunge sicurezza per note riservate. | +| **Output ad alta risoluzione** | Set `pdfDocument.PageInfo.Width` and `Height` to larger values before adding content. | Utile per stampare PDF di grandi dimensioni. | + +## Consigli per l'uso in produzione + +* **Riutilizza l'istanza `Document`** quando generi molti PDF in una singola richiesta per ridurre la pressione sul GC. +* **Dispose gli oggetti** (`pdfDocument.Dispose()`) se crei molti documenti in un ciclo. +* **Convalida le coordinate**: il valore `Y` non può superare l'altezza della pagina; altrimenti il testo verrà tagliato. +* **Usa `TextFragmentAbsorber`** per estrarre in seguito la nota tramite il suo tag (`/P`) se hai bisogno di leggere nuovamente il contenuto. + +## Conclusione + +Ora sai come **creare documento pdf** con Aspose.Pdf, **aggiungere pagina pdf vuota**, **aggiungere paragrafo a pdf**, **come aggiungere nota pdf**, e **posizionare testo in pdf** con precisione. L'esempio completo dimostra un flusso di lavoro pulito e ripetibile che puoi estendere per fatture, report o qualsiasi scenario di automazione dei documenti. + +Successivamente, esplora argomenti correlati come **aggiungere immagini a pdf**, **creare tabelle con Aspose.Pdf**, o **applicare firme digitali**. Ognuno di questi si basa sugli stessi concetti fondamentali trattati qui, così sarai pronto ad affrontare compiti di generazione PDF più sofisticati. + +Buona programmazione! + +## Cosa dovresti imparare dopo? + +I seguenti tutorial coprono argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Crea documento PDF con Aspose.PDF – Aggiungi pagina, forma e salva](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Come aggiungere una pagina vuota alla fine di un PDF usando Aspose.PDF per .NET | Guida passo‑passo](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Come aggiungere un timbro di testo a PDF usando Aspose.PDF .NET: Guida 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/italian/net/images-graphics/_index.md b/pdf/italian/net/images-graphics/_index.md index c05bef3bf9..a2460958ef 100644 --- a/pdf/italian/net/images-graphics/_index.md +++ b/pdf/italian/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Scopri come trasformare script LaTeX complessi in documenti PDF utilizzando Aspo ### [Impostare gli sfondi delle immagini nei PDF utilizzando Aspose.PDF per .NET: una guida completa](./aspose-pdf-net-set-image-backgrounds/) Scopri come migliorare i tuoi documenti PDF impostando sfondi con immagini utilizzando Aspose.PDF per .NET. Questa guida include suggerimenti per la configurazione, l'implementazione e l'ottimizzazione. +### [Impostare l'opacità PDF in C# con Aspose.PDF – guida completa](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Scopri come impostare l'opacità dei PDF usando Aspose.PDF per .NET in C#, con esempi pratici e consigli di ottimizzazione. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/italian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..3ed3b98ae5 --- /dev/null +++ b/pdf/italian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-08-08 +description: Imposta l'opacità del PDF in C# usando Aspose.PDF – scopri come regolare + la trasparenza del tratto e del riempimento con poche righe di codice. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: it +lastmod: 2026-08-08 +og_description: Imposta l'opacità del PDF in C# rapidamente. Questa guida ti mostra + come modificare la trasparenza del tratto e del riempimento usando l'API di stato + grafico di Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Imposta l'opacità del PDF in C# con Aspose.PDF – tutorial passo‑passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Imposta l'opacità del PDF in C# con Aspose.PDF – guida completa +url: /it/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Imposta l'opacità PDF in C# con Aspose.PDF – guida completa + +Se hai bisogno di **impostare l'opacità PDF** per operazioni di disegno specifiche, questo tutorial ti mostra esattamente come farlo con Aspose.PDF per .NET. Che tu stia creando filigrane, sovrapposizioni semitrasparenti o grafica personalizzata, imparerai un approccio conciso e pronto per la produzione. + +Nelle sezioni seguenti copriremo tutto, dal caricamento di un PDF alla modifica del suo stato grafico, aggiungendo una nuova definizione di opacità e salvando il risultato. Non è necessaria alcuna documentazione esterna—basta il codice qui sotto e una breve spiegazione di ogni passaggio. + +## Prerequisiti + +* .NET 6.0 o versioni successive (il codice funziona anche con .NET Framework 4.7+) +* Una licenza valida di Aspose.PDF per .NET (la versione di prova gratuita è sufficiente per la valutazione) +* Un file PDF di input (`input.pdf`) situato in una cartella con permessi di lettura/scrittura +* Visual Studio 2022 o qualsiasi IDE C# che preferisci + +## Passo 1 – Carica il documento PDF (Aspose.PDF per .NET) + +Il primo compito è aprire il PDF esistente. Aspose.PDF rappresenta un file PDF con la classe `Document`, che ti offre pieno accesso a pagine, risorse e oggetti a basso livello. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Perché è importante*: Caricare il documento crea un modello in memoria che puoi modificare in sicurezza. L'istruzione `using` garantisce che il handle del file venga rilasciato automaticamente al termine. + +## Passo 2 – Ottieni la prima pagina da modificare + +L'opacità è definita per pagina tramite il dizionario delle risorse della pagina. Qui puntiamo alla prima pagina, ma puoi iterare su `doc.Pages` per un'operazione batch. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Perché è importante*: Ogni pagina ha la propria collezione `Resources`, che memorizza stati grafici, font, immagini, ecc. Modificare la pagina corretta garantisce che l'effetto di opacità appaia dove previsto. + +## Passo 3 – Apri il dizionario delle risorse della pagina per la modifica + +Aspose.PDF fornisce un helper `DictionaryEditor` per manipolare i dizionari PDF a basso livello senza compromettere la struttura del file. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Perché è importante*: Modificare direttamente i dizionari COS (Content Object System) del PDF è l'unico modo per inserire uno stato grafico personalizzato. L'editor astrae la sintassi a basso livello mantenendo il PDF valido. + +## Passo 4 – Recupera il dizionario ExtGState esistente + +Il dizionario **ExtGState** (stato grafico esterno) contiene opacità, modalità di fusione, spessore della linea, ecc. Se non esiste, Aspose.PDF lo crea automaticamente quando aggiungi una nuova voce. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Perché è importante*: Senza una voce `ExtGState` non puoi fare riferimento a un'opacità personalizzata più tardi nel flusso di contenuto della pagina. Questo passaggio garantisce che il contenitore sia presente. + +## Passo 5 – Crea un nuovo stato grafico con l'opacità desiderata + +Uno stato grafico è una raccolta di parametri. Per l'opacità impostiamo `CA` (opacità del tratto) e `ca` (opacità del riempimento). Impostiamo anche una modalità di fusione (`BM`) per controllare come i pixel trasparenti interagiscono con il contenuto sottostante. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Perché è importante*: `CA` e `ca` accettano valori da 0 (completamente trasparente) a 1 (completamente opaco). Regola questi numeri per ottenere l'effetto visivo desiderato. La modalità di fusione `"Normal"` è la più comune, ma puoi sperimentare con `"Multiply"` o `"Screen"` per effetti artistici. + +## Passo 6 – Registra il nuovo stato grafico nella collezione ExtGState + +Ogni stato grafico deve avere un nome univoco (ad esempio `GS0`). Aggiungiamo il nostro dizionario alla collezione `ExtGState`, quindi aggiorniamo le risorse della pagina. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Perché è importante*: Assegnando un nome allo stato (`GS0`), puoi fare riferimento ad esso più tardi nel flusso di contenuto della pagina usando l'operatore `gs`. Se ti servono più livelli di opacità, crea voci aggiuntive (`GS1`, `GS2`, …). + +## Passo 7 – Applica lo stato grafico ai comandi di disegno (opzionale) + +Se vuoi applicare l'opacità immediatamente al contenuto esistente, devi modificare il flusso di contenuto della pagina. Di seguito un esempio semplice che disegna un rettangolo semitrasparente usando lo stato appena creato. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Perché è importante*: L'operatore `gs` (`SetGraphicsState`) indica al renderizzatore PDF di usare i valori di opacità definiti in `GS0` per tutti i comandi di disegno successivi. La coppia `grestore`/`gsave` garantisce che gli altri elementi della pagina rimangano inalterati. + +## Passo 8 – Salva il PDF modificato + +Infine, scrivi il documento aggiornato su disco. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Perché è importante*: Il salvataggio finalizza tutte le modifiche, incorpora il nuovo stato grafico e produce un PDF che qualsiasi visualizzatore (Adobe Acrobat, Chrome, ecc.) può mostrare con la trasparenza prevista. + +### Risultato atteso + +Apri `output.pdf` in un visualizzatore PDF. Dovresti vedere un rettangolo rosso il cui contorno è opaco all'80 % e il riempimento al 40 % di opacità, fondendosi dolcemente con qualsiasi contenuto di sfondo. Il resto della pagina rimane invariato. + +## Variazioni comuni e casi limite + +| Situazione | Cosa modificare | Motivo | +|------------|----------------|--------| +| **Livelli di opacità multipli** | Crea stati grafici aggiuntivi (`GS1`, `GS2`, …) con valori `CA`/`ca` diversi e riferiscili dove necessario | Consente un controllo dettagliato su elementi diversi | +| **Modalità di fusione diverse** | Usa `"Multiply"`, `"Screen"`, `"Overlay"` ecc., invece di `"Normal"` nella voce `BM` | Produce effetti di fusione artistici | +| **Applicazione a un flusso di contenuto esistente** | Inserisci `SetGraphicsState` prima degli operatori di disegno specifici che vuoi influenzare | Previene opacità indesiderata su oggetti non correlati | +| **PDF di grandi dimensioni** | Elabora le pagine in un ciclo `foreach (Page p in doc.Pages)` per evitare di caricare l'intero file in memoria contemporaneamente | Migliora le prestazioni e riduce il consumo di memoria | +| **Nessun ExtGState esistente** | Il codice nel Passo 4 crea già uno se manca, quindi non è necessaria alcuna gestione aggiuntiva | Garantisce che il dizionario sia presente | + +### Consiglio professionale + +Quando aggiungi molti stati grafici personalizzati, mantieni una nomenclatura coerente (`GS0`, `GS1`, …) e documenta lo scopo di ciascuno in un blocco di commenti. Questo rende la manutenzione futura più semplice, soprattutto nei progetti collaborativi. + +## Esempio completo, eseguibile + +Di seguito trovi il programma completo che puoi copiare, incollare ed eseguire. Include tutti i passaggi, le direttive `using` necessarie e i commenti. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Esegui il programma, + +## Cosa dovresti imparare dopo? + +I tutorial seguenti trattano argomenti strettamente correlati che si basano sulle tecniche illustrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo passo per aiutarti a padroneggiare funzionalità aggiuntive dell'API e a esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Imposta sfondi immagine nei PDF usando Aspose.PDF per .NET: Guida completa](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Come creare linee tratteggiate nei PDF usando Aspose.PDF per .NET: Guida passo passo](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Come personalizzare i PDF con Aspose.PDF per .NET: Imposta i margini di pagina e disegna linee](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..afb6598bb8 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. | +| [Salva documento PDF con Aspose.PDF – guida completa](./save-pdf-document-with-aspose-pdf-complete-guide/) | Scopri come salvare un documento PDF usando Aspose.PDF con questa guida passo passo completa. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/italian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..e62ef54f3b --- /dev/null +++ b/pdf/italian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Salva documento PDF usando Aspose.PDF, impara come aggiungere pagine + PDF, compilare i campi di un modulo PDF e creare PDF con campi modulo in un unico + tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: it +lastmod: 2026-08-08 +og_description: Salva documenti PDF con Aspose.PDF e scopri come aggiungere pagine + PDF, compilare campi modulo PDF e creare PDF con campi modulo in modo rapido e affidabile. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Salva documento PDF con Aspose.PDF – guida passo passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Salva documento PDF con Aspose.PDF – guida completa +url: /it/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salva documento PDF con Aspose.PDF – guida completa + +Se hai bisogno di **salvare un documento PDF** che contiene campi modulo interattivi, questo tutorial ti mostra esattamente come fare. Vedrai come aggiungere pagine PDF, creare un modulo PDF e popolare un campo modulo PDF—tutto con Aspose.PDF per .NET. + +Nelle sezioni seguenti imparerai a: + +* aggiungere più pagine a un nuovo PDF, +* creare un campo modulo di tipo casella di testo nella prima pagina, +* posizionare un'annotazione widget per lo stesso campo su una seconda pagina, +* impostare il valore del campo (popolare il campo modulo PDF), +* e infine **salvare il documento PDF** su disco. + +Non sono richiesti strumenti esterni; il codice completo e eseguibile è incluso. + +## Prerequisiti + +* .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.7.2+). +* Una licenza valida di Aspose.PDF per .NET o una chiave di valutazione gratuita. +* Visual Studio 2022 (o qualsiasi IDE C#). + +Add the NuGet package: + +```bash +dotnet add package Aspose.PDF +``` + +## Come aggiungere pagine PDF + +Il primo passo è creare un PDF vuoto e aggiungere le pagine necessarie. Aggiungere le pagine prima di definire i campi modulo garantisce che le coordinate del layout siano accurate. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Perché è importante:* Ogni oggetto `Page` rappresenta una tela stampabile. Aggiungendo le pagine in anticipo puoi fare riferimento a esse in seguito quando posizioni gli elementi del modulo. + +## Come creare un modulo PDF con Aspose.PDF + +Un modulo PDF è composto da una **definizione del campo** (il contenitore logico) e una o più **annotazioni widget** (la rappresentazione visiva). L'esempio crea un `TextBoxField` chiamato **Comments** nella prima pagina. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Perché è importante:* Le coordinate `Rectangle` sono espresse in punti (1 pt = 1/72 in). Regola i valori per adattarli al tuo design. + +## Popolare il campo modulo PDF + +Puoi impostare il valore del campo programmaticamente prima di salvare il documento. Questo è il fulcro di **popolare il campo modulo PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Se devi compilare il campo in un secondo momento (ad esempio, da input dell'utente), assegna semplicemente una nuova stringa a `commentsField.Value` prima di chiamare `Save`. + +## Aggiungere un'annotazione widget per lo stesso campo sulla seconda pagina + +Un'annotazione widget rende il campo modulo visibile su una pagina. Aggiungendo un secondo widget, lo stesso campo logico appare su entrambe le pagine, dimostrando **creare PDF con campi modulo** che si estendono su più pagine. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Perché è importante:* La collezione `Widgets` può contenere un numero qualsiasi di rappresentazioni visive. Gli utenti possono interagire con il campo su entrambe le pagine, e il valore inserito rimane sincronizzato. + +## Collegare il campo alle annotazioni della prima pagina + +I campi modulo devono essere aggiunti alla collezione di annotazioni di una pagina affinché il visualizzatore PDF possa renderizzarli. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Salva documento PDF + +Ora che il modulo è completamente definito, puoi **salvare il documento PDF** in una posizione a tua scelta. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Quando apri `output.pdf` in Adobe Acrobat Reader o in qualsiasi visualizzatore PDF, vedrai una casella di testo nella pagina 1 e una casella corrispondente nella pagina 2. Digitare in una delle due caselle aggiorna lo stesso campo sottostante. + +## Esempio completo e eseguibile + +Di seguito trovi il programma completo che puoi copiare‑incollare in un'applicazione console. Compila e produce il PDF descritto senza alcuna modifica. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Output previsto:** Un file chiamato `output.pdf` contenente due pagine. La pagina 1 mostra una casella di testo etichettata “Comments” alle coordinate (100, 600). La pagina 2 mostra lo stesso campo a (100, 400). Il campo è pre‑riempito con “Enter your feedback here”. Modificando il testo su una delle due pagine, il valore viene aggiornato quando il documento viene salvato nuovamente. + +## Domande comuni e gestione dei casi limite + +| Question | Answer | +|----------|--------| +| *Posso aggiungere più di un widget per lo stesso campo?* | Sì. Aggiungi ulteriori oggetti `WidgetAnnotation` a `commentsField.Widgets`. Ogni widget può essere posizionato su qualsiasi pagina. | +| *E se devo impostare l'aspetto del campo (font, bordo, sfondo)?* | Usa `commentsField.DefaultAppearance` per specificare un font e un colore, e imposta le proprietà `commentsField.Border` per lo stile della linea. | +| *Come posso rendere il campo di sola lettura?* | Imposta `commentsField.ReadOnly = true;`. Il campo mostrerà comunque il suo valore ma non potrà essere modificato dall'utente. | +| *È possibile popolare il campo dopo che il PDF è stato creato?* | Sì. Carica il PDF salvato con `new Document("output.pdf")`, individua il campo tramite `pdfDocument.Form["Comments"]`, assegna un nuovo `Value` e chiama nuovamente `Save`. | +| *E se il PDF deve conformarsi a PDF/A per l'archiviazione?* | Dopo aver costruito il documento, chiama `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` prima di salvare. | + +## Consigli dal campo + +* **Suggerimento professionale:** Mantieni il nome logico del campo breve e unico; è l'identificatore che utilizzerai per compilare programmaticamente il modulo in seguito. +* **Attenzione a:** Rettangoli widget sovrapposti. Le sovrapposizioni causano artefatti di rendering in alcuni visualizzatori. +* **Nota sulle prestazioni:** Aggiungere molte pagine o widget in un ciclo stretto può essere ottimizzato riutilizzando una singola istanza `Rectangle` e modificandone solo le coordinate. + +## Conclusione + +Ora sai come **salvare un documento PDF** che contiene un modulo completamente funzionale, come **popolare il campo modulo PDF**, e come **aggiungere pagine PDF** e **creare PDF con campi modulo** usando Aspose.PDF per .NET. L'esempio completo dimostra il flusso di lavoro end‑to‑end dalla creazione del documento al salvataggio finale. + +Successivamente, esplora argomenti correlati come **aggiungere caselle di controllo**, **creare liste a discesa**, o **appiattire il modulo** per la distribuzione in sola lettura. Ognuno di questi si basa sugli stessi principi trattati qui e amplia le tue capacità di automazione PDF. + +Buona programmazione! + +## Cosa dovresti imparare dopo? + +I seguenti tutorial coprono argomenti strettamente correlati che si basano sulle tecniche dimostrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [Come creare PDF con Aspose – Aggiungere campo modulo e pagine](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Creare documento PDF con Aspose – Aggiungere pagina, casella di testo e modulo](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Come aggiungere ed estrarre campi modulo PDF usando Aspose.PDF per .NET: Guida completa](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/italian/net/programming-with-pdf-pages/_index.md index cb878bc64e..5b8d7921a3 100644 --- a/pdf/italian/net/programming-with-pdf-pages/_index.md +++ b/pdf/italian/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ tutorial includono istruzioni dettagliate, esempi di codice dettagliati e spiega | [Aggiorna le dimensioni della pagina PDF](./update-dimensions/) | Scopri come aggiornare senza sforzo le dimensioni delle pagine PDF con Aspose.PDF per .NET in questa guida completa e dettagliata. | | [Zoom sul contenuto della pagina nel file PDF](./zoom-to-page-contents/) | Scopri come ingrandire il contenuto delle pagine nei file PDF utilizzando Aspose.PDF per .NET in questa guida completa. Ottimizza i tuoi documenti PDF in base alle tue esigenze specifiche. | | [Aggiungi numeri di pagina PDF con C# – Guida completa passo‑passo](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Guida passo passo per aggiungere numeri di pagina a un PDF usando C# e Aspose.PDF per .NET. | +| [Aggiungi numerazione Bates al PDF con Aspose – guida passo‑passo](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Guida passo passo per aggiungere la numerazione Bates ai file PDF utilizzando Aspose.PDF per .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/italian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..dba1799cb3 --- /dev/null +++ b/pdf/italian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Aggiungi numerazione Bates a un PDF usando Aspose.Pdf in C#. Questo tutorial + mostra anche come aggiungere una pagina vuota a un PDF e generare PDF programmaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: it +lastmod: 2026-08-08 +og_description: Aggiungi la numerazione Bates a un PDF con Aspose.Pdf in C#. Impara + ad aggiungere una pagina vuota al PDF, generare PDF programmaticamente e salvare + il documento finale in pochi minuti. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Aggiungi numerazione Bates a PDF con Aspose – guida completa C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Aggiungi la numerazione Bates a PDF con Aspose – guida passo passo +url: /it/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aggiungere numerazione Bates PDF con Aspose – guida passo‑passo + +Aggiungere numerazione Bates PDF con Aspose.Pdf è semplice una volta compresi i passaggi fondamentali. Se hai anche bisogno di aggiungere una pagina vuota PDF o generare PDF programmaticamente, questa guida copre tutto ciò di cui hai bisogno. + +In questo tutorial imparerai a: + +* Creare un nuovo documento PDF da zero. +* Aggiungere una pagina vuota PDF che ospiterà i numeri Bates. +* Configurare l’artefatto di numerazione Bates con un prefisso personalizzato. +* Salvare il PDF in modo che i numeri compaiano nel file generato. + +Al termine avrai un’applicazione console C# completamente funzionante che produce un PDF contenente numeri Bates come **CASE‑1000**, **CASE‑1001**, … – un requisito comune per i flussi di lavoro legali e di e‑discovery. + +## Prerequisiti + +* .NET 6.0 SDK o versioni successive (il codice funziona anche con .NET Framework 4.8). +* Visual Studio 2022 o qualsiasi IDE compatibile con C#. +* Una licenza valida di Aspose.Pdf per .NET (o una chiave di valutazione gratuita). +* Familiarità di base con la sintassi C#. + +> **Suggerimento:** Se esegui il codice senza licenza, Aspose aggiungerà una piccola filigrana al PDF di output. + +## Passo 1: Configurare il progetto e importare Aspose.Pdf + +Crea un nuovo progetto console e aggiungi il pacchetto NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Le direttive `using` necessarie per l’esempio sono: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Questi namespace ti danno accesso alle classi `Document`, `Page` e `BatesNumberingArtifact` utilizzate più avanti. + +## Passo 2: Aggiungere una pagina vuota PDF + +Un numero Bates deve essere associato a una pagina, quindi creiamo prima una pagina vuota che riceverà l’artefatto di numerazione. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +La classe `Document` rappresenta l’intero file PDF, mentre `Pages.Add()` inserisce una nuova pagina vuota alla fine della collezione di pagine del documento. Poiché il documento parte vuoto, questa chiamata crea anche la prima pagina. + +## Passo 3: Configurare l’artefatto di numerazione Bates + +Ora definiamo come dovranno apparire i numeri Bates. Il `BatesNumberingArtifact` ti consente di impostare il numero iniziale, il prefisso, il suffisso e le opzioni di formattazione. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Perché è importante:** +Impostare `StartNumber` a **1000** corrisponde alle convenzioni tipiche dei fascicoli legali. Il `Prefix` garantisce che ogni numero appaia come **CASE‑1000**, **CASE‑1001**, …, rendendo più semplice la ricerca e l’ordinamento. + +## Passo 4: Allegare l’artefatto alla pagina + +L’artefatto deve essere aggiunto alla collezione `Artifacts` della pagina affinché Aspose lo renderizzi su ogni pagina durante il salvataggio. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Quando il documento viene salvato, Aspose ripete automaticamente l’artefatto su tutte le pagine, incrementando il numero per ciascuna pagina successiva. + +## Passo 5: (Facoltativo) Aggiungere pagine aggiuntive + +Se ti servono più pagine, ripeti semplicemente `pdfDocument.Pages.Add()`. L’artefatto di numerazione Bates che hai allegato nel passaggio precedente apparirà automaticamente su ogni nuova pagina. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Passo 6: Salvare il PDF – generare PDF programmaticamente + +Infine, persisti il documento su disco. È in questo momento che i numeri Bates vengono renderizzati sulle pagine. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Risultato atteso:** +Apri *BatesNumberedDocument.pdf* e vedrai un PDF di tre pagine. Ogni pagina mostra un numero Bates nell’angolo in basso a destra: + +* Pagina 1 → **CASE‑1000** +* Pagina 2 → **CASE‑1001** +* Pagina 3 → **CASE‑1002** + +I numeri vengono incrementati automaticamente perché l’artefatto è collegato alla collezione di pagine. + +## Esempio completo, eseguibile + +Mettendo tutto insieme, ecco un programma console completo che puoi copiare, incollare ed eseguire: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Esegui il programma con `dotnet run`. Dopo l’esecuzione, individua il file sul desktop e verifica i numeri Bates. + +![Esempio di aggiunta numerazione Bates PDF](/images/bates-numbering.png "Add bates numbering pdf example") + +## Domande comuni e casi particolari + +### E se avessi bisogno di un font o di una posizione diversi? + +Il `BatesNumberingArtifact` espone proprietà come `FontSize`, `FontColor`, `HorizontalAlignment` e `VerticalAlignment`. Ad esempio: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Come escludere una pagina specifica dalla numerazione? + +Crea un `BatesNumberingArtifact` separato per le pagine che desideri numerare e aggiungilo solo a quelle pagine. Le pagine senza artefatto allegato rimarranno non numerate. + +### Funziona con PDF esistenti? + +Sì. Invece di `new Document()`, carica un file esistente: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Quindi allega l’artefatto alle pagine desiderate e salva. + +## Conclusione + +Ora sai come **aggiungere numerazione Bates PDF** usando Aspose.Pdf, come **aggiungere una pagina vuota PDF** e come **generare PDF programmaticamente** in una soluzione C# pulita e riutilizzabile. L’approccio funziona con qualsiasi numero di pagine, prefissi personalizzati e opzioni di stile, offrendoti il pieno controllo sul documento finale. + +Prossimi passi che potresti esplorare: + +* Usa **create pdf as + +## 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 e a esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 704b3c6e4a..a1d0059fd6 100644 --- a/pdf/italian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/italian/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ Questo tutorial offre una panoramica dettagliata di metodi e tecniche per garant | [Firma con la smart card utilizzando il campo firma](./sign-with-smart-card-using-signature-field/) | Scopri come firmare in modo sicuro i PDF utilizzando una smart card con Aspose.PDF per .NET. Segui la nostra guida passo passo per una facile implementazione. | | [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 la firma PDF in C# con Aspose.PDF – guida completa](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Scopri come verificare le firme PDF in C# usando Aspose.PDF con una guida completa passo passo. | +| [Tutorial firma PDF: convalidare una firma digitale PDF con Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Scopri come convalidare una firma digitale PDF usando Aspose.PDF per .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/italian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/italian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..89600a445e --- /dev/null +++ b/pdf/italian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: Tutorial sulla firma PDF che mostra come convalidare la firma digitale + PDF utilizzando le opzioni di convalida della firma e il codice C# – guida rapida + passo‑passo +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: it +lastmod: 2026-08-08 +og_description: Il tutorial sulla firma PDF ti guida nella convalida di una firma + digitale PDF con Aspose.PDF. Impara a configurare le opzioni di convalida della + firma e a verificare il risultato. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: Tutorial firma PDF – valida le firme digitali PDF in C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Tutorial sulla firma PDF: convalida di una firma digitale PDF con Aspose.PDF' +url: /it/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial sulla firma PDF – convalidare una firma digitale PDF in C# + +Se hai bisogno di un **pdf signature tutorial** che mostri esattamente come convalidare una firma digitale PDF, questa guida è ciò che fa per te. Vedrai come caricare un PDF firmato, configurare **signature validation options**, eseguire la convalida e visualizzare il risultato—tutto con codice C# chiaro e eseguibile. + +Convalidare una firma PDF è essenziale quando si elaborano contratti, fatture o qualsiasi documento legalmente vincolante. Questo tutorial guida attraverso l'intero flusso di lavoro, così potrai integrare i controlli di firma nelle tue applicazioni senza dover indovinare quali chiamate API siano necessarie. + +## Cosa otterrai + +* Caricare un file PDF firmato usando Aspose.PDF. +* Impostare **signature validation options** come l'algoritmo hash. +* Chiamare il metodo `Validate` per **validate pdf digital signature**. +* Stampare un chiaro messaggio “Signature valid” sulla console. + +**Prerequisiti** + +* .NET 6.0 (o successivo) installato. +* Visual Studio 2022 (o qualsiasi IDE C#). +* Pacchetto NuGet Aspose.PDF per .NET (`Aspose.Pdf`). + +> **Consiglio professionale:** Usa l'ultima versione di Aspose.PDF per ottenere il supporto per gli algoritmi SHA‑3 e migliorare le prestazioni di convalida. + +## Passo 1: Installare il pacchetto NuGet Aspose.PDF + +Apri il tuo progetto in Visual Studio ed esegui il seguente comando nella Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Il pacchetto aggiunge lo spazio dei nomi `Aspose.Pdf`, che contiene la classe `Document` e le API correlate alle firme che utilizzerai. + +## Passo 2: Caricare il documento PDF firmato + +La prima riga di codice crea un oggetto `Document` che rappresenta il file PDF su disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Perché è importante:* La classe `Document` analizza la struttura del PDF, esponendo la collezione `Signatures` che contiene tutte le firme digitali incorporate. Se il percorso del file è errato, viene generata un'eccezione, quindi verifica il percorso prima di eseguire il programma. + +## Passo 3: Configurare le opzioni di convalida della firma + +Puoi personalizzare il processo di convalida con la classe `SignatureValidationOptions`. In questo tutorial specifichiamo l'algoritmo hash, ma è possibile impostare anche controlli di revoca del certificato, verifica del timestamp e altro. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Perché è importante:* L'algoritmo hash deve corrispondere a quello usato quando la firma è stata creata. L'uso di un algoritmo non corrispondente provoca il fallimento della convalida anche se la firma è altrimenti corretta. + +## Passo 4: Convalidare la prima firma + +La maggior parte dei PDF contiene una singola firma, ma la collezione `Signatures` può contenerne molte. Questo esempio convalida la prima voce (`[0]`). Il metodo `Validate` restituisce un Boolean che indica il successo. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Caso limite:* Se il PDF non contiene firme, `document.Signatures.Count` sarà `0` e l'accesso a `[0]` genera un `IndexOutOfRangeException`. Proteggi il codice con un semplice controllo: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Passo 5: Visualizzare il risultato della convalida + +Infine, scrivi il risultato sulla console. Questo passo dimostra il risultato di **check pdf signature** in un formato leggibile dall'uomo. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Quando esegui il programma, dovresti vedere: + +``` +Signature valid: True +``` + +Se la firma è corrotta, utilizza un algoritmo non supportato o il certificato è revocato, l'output sarà `False`. + +## Esempio completo e eseguibile + +Copia il codice seguente in un nuovo progetto console (`dotnet new console`) e sostituisci `YOUR_DIRECTORY/signed.pdf` con il percorso del tuo file PDF firmato. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Output previsto + +``` +Signature valid: True +``` + +Se la firma non supera la convalida, la console visualizzerà `Signature valid: False`. + +## Domande frequenti e risoluzione dei problemi + +| Question | Answer | +|----------|--------| +| **E se il PDF utilizza un algoritmo hash diverso?** | Modifica `HashAlgorithm` in `SignatureValidationOptions` per farlo corrispondere, ad esempio `HashAlgorithm.SHA256`. | +| **Come convalidare tutte le firme in un PDF con firme multiple?** | Itera su `document.Signatures` e chiama `Validate` per ogni voce. | +| **Posso verificare la catena di fiducia del certificato di firma?** | Imposta `validationOptions.CheckCertificateRevocation = true` e, facoltativamente, fornisci un `CertificateStore` personalizzato per includere i certificati radice attendibili. | +| **E se devo supportare la convalida del timestamp?** | Abilita `validationOptions.CheckTimestamp = true`. Aspose.PDF verificherà quindi il token di timestamp incorporato. | +| **Esiste un modo per ottenere errori di convalida dettagliati?** | Usa `ValidateEx(validationOptions, out ValidationResult result)`; `result` contiene `ErrorMessage` e `ErrorCode` per ogni errore. | + +## Prossimi passi + +* Esplora **validate pdf signature** per più firme iterando su `document.Signatures`. +* Combina questo tutorial con **check pdf signature** in una Web API per fornire verifica in tempo reale dei contratti caricati. +* Approfondisci **signature validation options** come controlli CRL/OCSP, convalida del timestamp e archivi di fiducia personalizzati. + +Ora hai un **pdf signature tutorial** completo che mostra come **validate pdf digital signature** usando Aspose.PDF in C#. Sentiti libero di adattare il codice al tuo flusso di lavoro, aggiungere logging o integrarlo in pipeline di elaborazione documenti più ampie. Buona programmazione! + +## Cosa dovresti imparare dopo? + +I seguenti tutorial coprono argomenti strettamente correlati che si basano sulle tecniche illustrate in questa guida. Ogni risorsa include esempi di codice completi e funzionanti con spiegazioni passo‑passo per aiutarti a padroneggiare funzionalità API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/italian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0285d55d3f --- /dev/null +++ b/pdf/italian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Verifica la firma PDF in C# usando Aspose.PDF. Scopri come convalidare + la firma digitale PDF e elencare le firme PDF in poche righe di codice. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: it +lastmod: 2026-08-08 +og_description: Verifica la firma PDF in C# con Aspose.PDF. Questa guida mostra come + convalidare la firma digitale PDF, elencare le firme PDF e gestire in modo efficiente + le firme compromesse. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Verifica la firma PDF in C# – rapido tutorial Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Verifica della firma PDF in C# con Aspose.PDF – guida completa +url: /it/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifica della firma PDF in C# con Aspose.PDF – guida completa + +Se devi **verificare la firma PDF** in un'applicazione .NET, questa guida ti mostra un modo conciso per farlo con Aspose.PDF. Imparerai come **validare la firma digitale PDF**, **elencare le firme PDF** e rilevare firme compromesse in poche righe di codice. + +Il tutorial copre tutto, dall'installazione della libreria alla gestione di casi particolari come documenti non firmati o PDF crittografati. Alla fine sarai in grado di integrare la verifica delle firme in qualsiasi progetto C#, garantendo l'autenticità dei file PDF in ingresso. + +**Prerequisiti** + +- .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.6+). +- Familiarità di base con C# e Visual Studio (o qualsiasi IDE preferisci). +- Una licenza Aspose.PDF per .NET (la versione di prova gratuita è sufficiente per la valutazione). + +Se soddisfi questi requisiti, sei pronto per iniziare a verificare le firme PDF. + +## Verifica della firma PDF – configura il progetto + +1. **Aggiungi il pacchetto NuGet Aspose.PDF** + Apri la Console di Gestione Pacchetti ed esegui: + + ```bash + Install-Package Aspose.PDF + ``` + + Questo aggiunge l'assembly `Aspose.Pdf` e le relative dipendenze. + +2. **Importa gli spazi dei nomi richiesti** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` fornisce l'estensione `Any` usata più avanti, mentre `Aspose.Pdf` contiene le classi `Document` e `Signature`. + +## Carica il documento PDF + +Il primo passo funzionale è aprire il PDF che desideri ispezionare. Aspose.PDF legge il file in memoria, consentendoti di interrogare le sue firme. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Perché è importante** – Caricare il documento all'interno di un blocco `using` garantisce che il handle del file venga rilasciato tempestivamente, evitando problemi di blocco del file in servizi a lunga esecuzione. + +## Elenca le firme PDF + +Prima di validare una firma, potresti voler sapere quante firme sono presenti. Questo passaggio dimostra la capacità di **elencare le firme PDF**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Spiegazione** + +- `document.Signatures` restituisce una collezione di oggetti `Signature`. +- `Count` indica quante firme esistono. +- Ogni `Signature` espone metadati come `Id`, `SignatureType` e `Reason`, utili per i log di audit. + +**Caso limite** – Se il PDF non contiene firme, `Count` sarà `0` e il ciclo non verrà eseguito. Puoi gestire questo scenario in modo elegante: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Valida la firma digitale PDF – rileva firme compromesse + +Ora che puoi enumerare le firme, il compito principale è **verificare l'integrità della firma PDF**. Aspose.PDF fornisce la proprietà `IsCompromised`, che restituisce `true` quando l'hash crittografico della firma non corrisponde più al contenuto del documento. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Perché funziona** + +- `Signature.IsCompromised` esegue una validazione crittografica completa usando la catena di certificati incorporata. +- L'operatore LINQ `Any` si interrompe alla prima firma compromessa, rendendo il controllo efficiente anche per documenti con molte firme. + +### Gestione delle firme multiple singolarmente + +Se devi sapere quale firma specifica è fallita, itera invece di usare `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Suggerimento professionale:** Memorizza il risultato della validazione insieme a `sig.Id` in un database per analisi forense successive. + +## Output dei risultati e considerazione dei casi limite + +Di seguito trovi un programma completo, eseguibile, che combina i passaggi precedenti. Carica un PDF, elenca tutte le firme, le valida e stampa un risultato chiaro. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Output previsto (firme valide)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Output previsto (firma compromessa)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Problemi comuni e come evitarli + +| Problema | Soluzione | +|----------|-----------| +| Il PDF è protetto da password. | Passa la password tramite `document.Encrypt.Decrypt(password)` prima di accedere a `Signatures`. | +| Nessuna licenza Aspose.PDF è impostata. | Usa `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` per evitare filigrane di valutazione. | +| PDF di grandi dimensioni causano alto consumo di memoria. | Processa il file in modalità streaming (`Document.Load(stream)`) invece di caricare l'intero file in una volta. | + +## Conclusione + +Ora sai come **verificare la firma PDF** in C# usando Aspose.PDF, come **validare la firma digitale PDF** e come **elencare le firme PDF** per scopi di reporting o audit. L'esempio completo dimostra come caricare un documento, enumerare le sue firme, controllare ciascuna per compromissione e gestire i tipici casi limite. + +Passi successivi che potresti esplorare: + +- **Validare i token di timestamp** per assicurarti che una firma sia stata creata prima della scadenza del certificato. +- **Estrarre i certificati del firmatario** (`sig.Certificate`) per una validazione personalizzata del trust‑store. +- **Integrare con ASP.NET Core** per rifiutare automaticamente i PDF caricati che non superano la verifica. + +Sentiti libero di sperimentare con firme multiple, logiche di validazione personalizzate o librerie PDF alternative. Se questa guida ti è stata utile, condividila con i colleghi o aggiungi i tuoi consigli nei commenti. + +## 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. + +- [Come verificare PDF – Convalidare la firma PDF con Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verifica firma PDF in C# – Guida completa per convalidare la firma digitale PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verifica firma digitale](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/italian/net/text-operations/_index.md index f584f09da2..8392e32d62 100644 --- a/pdf/italian/net/text-operations/_index.md +++ b/pdf/italian/net/text-operations/_index.md @@ -164,6 +164,9 @@ Un tutorial sul codice per Aspose.PDF Net ### [Formattare il testo nei PDF con tag utilizzando Aspose.PDF per .NET | Guida per la creazione di PDF accessibili ed estetici](./style-text-tagged-pdfs-aspose-pdf-net/) Scopri come formattare il testo nei documenti PDF con tag con Aspose.PDF per .NET. Questa guida illustra l'installazione, le tecniche e le applicazioni pratiche per migliorare l'accessibilità. +### [Come riassumere PDF con Aspose.Pdf.AI – guida](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Scopri come riassumere automaticamente i contenuti di un PDF usando Aspose.Pdf.AI con esempi di codice C#. + ## Risorse aggiuntive - [Aspose.PDF per la documentazione di rete](https://docs.aspose.com/pdf/net/) diff --git a/pdf/italian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/italian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..8c46652e9e --- /dev/null +++ b/pdf/italian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-08 +description: Come riassumere PDF con Aspose.Pdf.AI – impara a riassumere PDF con l'IA, + genera un riassunto PDF e salva il riassunto come PDF. Codice completo e migliori + pratiche. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: it +lastmod: 2026-08-08 +og_description: Come riassumere un PDF con Aspose.Pdf.AI. Questo tutorial ti mostra + come riassumere un PDF con l'IA, generare un riepilogo PDF e salvare il riepilogo + come PDF in poche righe di C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Come riassumere PDF con Aspose.Pdf.AI – guida passo‑passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Come riassumere PDF con Aspose.Pdf.AI – guida +url: /it/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come riassumere PDF con Aspose.Pdf.AI – guida + +Se hai bisogno di **riassumere PDF** in modo rapido e affidabile, puoi lasciare che un modello di IA faccia il lavoro pesante. Questo tutorial ti mostra esattamente come riassumere PDF con IA, generare un riepilogo PDF e salvare il riepilogo come PDF utilizzando l'SDK Aspose.Pdf.AI per .NET. Avrai a disposizione un esempio completo, eseguibile, e una spiegazione di ogni riga così da poter adattare la soluzione ai tuoi progetti. + +La guida copre: + +* Preparazione della cartella sorgente e della chiave API +* Creazione di un `OpenAIClient` che comunica con il modello +* Configurazione delle opzioni di riepilogo come temperature e percorso del documento +* Costruzione di un `SummaryCopilot` e recupero del testo del riepilogo in modo asincrono +* Salvataggio del riepilogo generato in un file PDF + +Non sono richiesti servizi esterni oltre al endpoint OpenAI, e il codice funziona con .NET 6+ e Aspose.Pdf.AI 23.7 (o versioni successive). + +## Prerequisiti + +* **.NET 6 SDK** (o qualsiasi versione .NET più recente) +* **Aspose.Pdf.AI per .NET** – installa via NuGet: `dotnet add package Aspose.Pdf.AI` +* Una **chiave API OpenAI** con accesso al modello che desideri utilizzare (ad es., `gpt‑4o`) +* Un file PDF che vuoi riassumere (l'esempio utilizza `SampleDocument.pdf`) + +Assicurati che la cartella specificata in `dataDirectory` esista e che l'applicazione abbia i permessi di lettura/scrittura. + +## Passo 1: Configura la struttura del progetto + +Crea un progetto console (o integra il codice in qualsiasi app .NET esistente). Il `Program.cs` minimale è il seguente: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Perché questa struttura è importante + +* **`await using`** rilascia automaticamente l'`OpenAIClient`, chiudendo le connessioni HTTP. +* **`Path.Combine`** costruisce percorsi indipendenti dal sistema operativo, evitando bug su Windows vs. Linux. +* **Temperature** controlla la creatività; `0.5` fornisce un riepilogo equilibrato e fattuale. +* **`GetSummaryAsync`** restituisce testo semplice, mentre `SaveSummaryAsync` crea un PDF corretto che preserva caratteri e layout. + +## Passo 2: Comprendere le opzioni di riepilogo + +La classe `OpenAISummaryCopilotOptions` ti consente di affinare il processo di sintesi: + +| Opzione | Scopo | Valori tipici | +|--------|---------|----------------| +| `WithTemperature(double)` | Controlla la casualità. `0.0` = deterministico, `1.0` = molto creativo. | `0.3‑0.7` per documenti aziendali | +| `WithDocument(string)` | Percorso del PDF sorgente. Deve essere un file leggibile. | Qualsiasi percorso assoluto o relativo | +| `WithPrompt(string)` *(opzionale)* | Prompt personalizzato per guidare il modello. | “Summarize the key findings in 150 words.” | + +Se hai **PDF di grandi dimensioni** (oltre 10 MB o molte pagine), considera di suddividere il documento in blocchi più piccoli prima della sintesi per evitare errori di limite token. L'SDK non effettua lo chunking automaticamente; puoi usare `PdfDocument` da `Aspose.Pdf` per estrarre le pagine e fornirle una alla volta. + +## Passo 3: Esegui il codice e verifica l'output + +1. Posiziona `SampleDocument.pdf` nella cartella `Data` che hai indicato. +2. Sostituisci `"YOUR_API_KEY"` con la tua chiave OpenAI reale. +3. Esegui `dotnet run`. + +Dovresti vedere due sezioni nella console: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Apri `Summary_out.pdf` con qualsiasi visualizzatore PDF – conterrà lo stesso testo del riepilogo, formattato con un font predefinito. Il PDF è completamente ricercabile perché l'SDK incorpora il testo come una pagina PDF standard. + +## Passo 4: Varianti comuni e gestione dei casi limite + +### Riassumere solo una parte del documento + +Se devi **riassumere pdf con ai** per un capitolo specifico, estrai prima quell'intervallo: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Quindi punta `WithDocument` a `Chapter5.pdf`. + +### Regolare la lunghezza del riepilogo + +Puoi influenzare la lunghezza aggiungendo un prompt personalizzato: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Gestione degli errori API + +Interruzioni di rete o limiti di quota generano `Aspose.Pdf.AI.Exceptions.AIException`. Avvolgi la chiamata in un blocco `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Salvataggio del riepilogo con layout personalizzato + +`SaveSummaryAsync` scrive testo semplice. Per stilizzare il PDF (aggiungere titolo, intestazione o branding), crea un nuovo `PdfDocument` e inserisci manualmente il riepilogo: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Passo 5: Consigli sulle prestazioni e best practice + +* **Riutilizza l'`OpenAIClient`** per più riepiloghi nello stesso processo – creare un client è poco costoso, ma riutilizzare l'`HttpClient` sottostante riduce l'esaurimento dei socket. +* **Cachea il riepilogo** se il PDF sorgente non cambia; puoi memorizzare il testo in un database e saltare la chiamata API. + +## 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à API aggiuntive ed esplorare approcci di implementazione alternativi nei tuoi progetti. + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/conversion-export/_index.md b/pdf/japanese/net/conversion-export/_index.md index f25e5ee230..b41b60b788 100644 --- a/pdf/japanese/net/conversion-export/_index.md +++ b/pdf/japanese/net/conversion-export/_index.md @@ -227,6 +227,8 @@ Aspose.PDF Net のコードチュートリアル ### [Aspose.PDF を使用した .NET での PDF から TIFF への変換: ステップバイステップ ガイド](./pdf-to-tiff-conversion-aspose-pdf-net/) Aspose.PDF for .NET を使用して PDF ドキュメントを TIFF 画像に変換する方法を学びます。カスタム色深度と高度な画像処理テクニックを習得します。 +### [Aspose.PDF で PDF を HTML として保存する – ステップバイステップ ガイド](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/japanese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..39eadbaedd --- /dev/null +++ b/pdf/japanese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF を使用して C# で PDF を HTML に保存します。PDF を HTML に変換する方法、ラスター画像をスキップする方法、一般的なエッジケースの対処方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: ja +lastmod: 2026-08-08 +og_description: Aspose.PDF を使用して PDF を HTML に保存します。このガイドでは、PDF を HTML に変換する方法、ラスター画像をスキップする方法、そして一般的な落とし穴を回避する方法を紹介します。 +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Aspose.PDFでPDFをHTMLに保存 – 完全なC#チュートリアル +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Aspose.PDFでPDFをHTMLとして保存する – ステップバイステップガイド +url: /ja/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF を使用して PDF を HTML に保存する – ステップバイステップガイド + +PDF を **HTML にすばやく保存** したい場合は、このチュートリアルで Aspose.PDF for .NET を使った手順を詳しく解説します。ドキュメントビューアの Web アプリを構築する場合や、SEO フレンドリーなインデックス用にレポートをエクスポートする場合など、PDF を HTML に変換しつつラスタ画像を細かく制御できる完全な実装例をご覧いただけます。 + +本ガイドでは、主なタスクに加えて **aspose pdf html conversion** のオプションも取り上げ、ラスタ画像を除外したり CSS の取り扱いを調整したり、大容量ドキュメントを効率的に処理する方法を紹介します。最後まで読むと、任意の .NET プロジェクトに組み込める自己完結型プログラムが手に入ります。 + +## 前提条件 + +開始する前に以下を用意してください。 + +* .NET 6.0 SDK 以降(コードは .NET Core や .NET Framework でも動作します) +* Visual Studio 2022 または C# に対応した任意の IDE +* Aspose.PDF for .NET のライセンス(評価用の無料トライアルでも可) +* `report.pdf` という名前の PDF ファイルを、コードから参照できるフォルダーに配置しておくこと + +`Aspose.Pdf` 以外の NuGet パッケージは必要ありません。 + +## 手順 1: Aspose.PDF NuGet パッケージをインストール + +プロジェクトフォルダーでターミナルを開き、次のコマンドを実行します。 + +```bash +dotnet add package Aspose.Pdf +``` + +このパッケージにより `Aspose.Pdf` 名前空間が追加され、**convert pdf to html** 操作に使用する `Document` クラスと `HtmlSaveOptions` 型が利用可能になります。 + +## 手順 2: コンソールプロジェクトを作成し using ディレクティブを追加 + +まだコンソールアプリがない場合は新規作成します。 + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +続いて `Program.cs` を開き、必要な名前空間を追加します。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +これらのディレクティブにより、コア PDF API と HTML 保存オプション(**aspose convert pdf html** プロセスを制御)へアクセスできるようになります。 + +## 手順 3: PDF ドキュメントを読み込む + +最初の実装行で、ソース PDF を `Aspose.Pdf.Document` オブジェクトに読み込みます。このオブジェクトは PDF 全体をメモリ上に表現し、保存・編集・コンテンツ抽出のメソッドを提供します。 + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*重要ポイント*: ドキュメントを一度だけロードすれば、特に大容量 PDF の場合でもメモリ使用量を予測しやすくなります。ファイルが見つからないと Aspose は `FileNotFoundException` をスローするので、パスが正しいことを確認してください。 + +## 手順 4: HTML 保存オプションを設定 + +`HtmlSaveOptions` で PDF の変換方法を細かく調整できます。本チュートリアルでは出力を軽量化するためラスタ画像をスキップしますが、必要に応じて `EmbedAll` に変更可能です。 + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**主なポイント**: + +* `RasterImagesSavingMode.Skip` は変換時にビットマップ画像(JPEG、PNG)を無視させます。スキャンページが不要な場合に最適です。 +* 画像を別ファイルとして保存したい場合は `EmbedAll` または `External` に切り替えます。 +* `ResourcesFolder` プロパティは画像を外部保存する場合にのみ有効です。 + +## 手順 5: ドキュメントを HTML として保存 + +設定したオプションを使って HTML ファイルを書き出します。 + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +この呼び出しが完了すると、`report.html` に元の PDF から抽出されたテキスト、ベクターグラフィック、レイアウトが保持されますが、ラスタ画像は含まれません。ブラウザーで開いて結果を確認してください。 + +## 期待される出力 + +Chrome や Edge で `report.html` を開くと、以下が確認できるはずです。 + +* すべての見出し、段落、ベクタ形状が正しく描画される +* ラスタ画像用の `` タグは出力されていない(`Skip` モードのため除外) +* オプションに応じてインラインまたは別スタイルシートの、クリーンで最小限の CSS が生成される + +画像が除外されたことを確認したい場合は、ページソース(`Ctrl+U`)をチェックし、`` が存在しないことを確認してください。 + +## 手順 6: よくあるエッジケースへの対処 + +### 6.1 大容量 PDF(> 100 MB) + +非常に大きなファイルの場合は、ストリーミングを有効にしてメモリ負荷を軽減します。 + +```csharp +htmlOpts.Streaming = true; +``` + +ストリーミングにより HTML のチャンクが直接ディスクに書き込まれ、ドキュメント全体がメモリに保持されることを防ぎます。 + +### 6.2 パスワード保護された PDF + +ソース PDF が暗号化されている場合は、保存前にパスワードを設定します。 + +```csharp +doc.Decrypt("yourPassword"); +``` + +復号せずに保存しようとすると `InvalidPasswordException` がスローされます。 + +### 6.3 Unicode 文字 + +Aspose.PDF は Unicode フォントを自動で埋め込みますが、表示を統一したい場合は特定のフォントを強制指定できます。 + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 複数ページのカスタムファイル命名 + +各 PDF ページを個別の HTML ファイルにしたい場合は次のように設定します。 + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +これにより `report_page_1.html`、`report_page_2.html` … といったファイルが生成され、Web アプリでのページングに便利です。 + +## 完全な実行可能サンプル + +以下は本稿で説明したすべての手順を組み込んだ完全プログラムです。`Program.cs` に貼り付け、パスを調整したうえで `dotnet run` を実行してください。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**検証**: 実行後、コンソールに成功メッセージが表示されます。生成された HTML をブラウザーで開き、テキストとベクターグラフィックが正しく表示され、ラスタ画像が除外されていることを確認してください。 + +## プロのコツと落とし穴 + +* **プロのコツ**: 後でラスタ画像が必要になったら、`RasterImagesSavingMode` を `External` に変更し `ResourcesFolder` を設定します。これにより抽出されたビットマップが `images` フォルダーに保存されます。 +* **注意点**: デフォルトの `Skip` モードは、スキャン画像に依存する PDF では画像領域が空白になる可能性があります。必ず代表的なサンプルでテストしてください。 +* **パフォーマンスのヒント**: バッチ変換時に `HtmlSaveOptions` インスタンスを再利用すると、オブジェクト生成コストが削減されます。 +* **バージョン確認**: 本 API は Aspose.PDF for .NET バージョン 23.9 以降で動作します。以前のバージョンでは `HtmlSaveOptions.RasterImagesSavingMode` の列挙子名が若干異なる場合があります。 + +## 結論 + +これで Aspose.PDF を使って **PDF を HTML に保存** する方法、ラスタ画像の取り扱いを制御する方法、そして大容量ファイル・パスワード保護・ページ単位出力といった典型的な課題への対処法が分かりました。この完全なソリューションを利用すれば、任意の C# アプリケーションに PDF‑to‑HTML 変換機能を自信を持って組み込めます。 + +### 次にやることは? + +* **aspose pdf html conversion** を活用してフォント埋め込みや CSS カスタマイズを試す +* この変換ロジックを Web API と組み合わせ、オンデマンドで HTML を配信 +* 逆方向の変換—**convert pdf to html** から再度 PDF へ—を行い、ラウンドトリップの忠実度を検証 + +オプションをいろいろ試してみて、感想や質問はコメントや Aspose フォーラムで共有してください。Happy coding! + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示した手法を発展させた関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれているので、API の追加機能習得や別実装アプローチの検討に役立ちます。 + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/japanese/net/digital-signatures/_index.md index cdbd9f70da..4b8a30b204 100644 --- a/pdf/japanese/net/digital-signatures/_index.md +++ b/pdf/japanese/net/digital-signatures/_index.md @@ -53,6 +53,9 @@ Aspose.PDF for .NET を使用して PDF ファイルのデジタル署名を検 ### [C# で PDF 署名を検証する – デジタル署名 PDF の検証完全ガイド](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) C# を使用して PDF のデジタル署名を検証する手順を詳細に解説します。安全な検証プロセスを実装しましょう。 +### [Aspose.PDF を使用して PDF を検証する – C# で PDF 署名の有効性を確認する](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +C# で Aspose.PDF を利用し、PDF のデジタル署名が有効かどうかを検証する手順を解説します。 + ### [PDF ドキュメントの読み込み C# – PDF/X‑4 へ変換 & 署名の一覧表示](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) PDF ドキュメントを読み込み、PDF/X‑4 に変換し、署名情報を一覧表示する方法を学びます。 diff --git a/pdf/japanese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/japanese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..d9819dfcb4 --- /dev/null +++ b/pdf/japanese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF を使用して PDF を検証し、PDF デジタル署名を検証する方法。ステップバイステップのガイドに従って、PDF 署名を迅速にチェックしてください。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: ja +lastmod: 2026-08-08 +og_description: Aspose.PDF を使用して PDF を検証する方法。C# の数行で PDF のデジタル署名を検証し、署名の有効性を確認できます。 +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: PDFの検証方法 – C#でAspose.PDFを使用してPDF署名の有効性を確認する +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Aspose.PDFでPDFを検証する方法 – C#でPDF署名の有効性をチェック +url: /ja/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDFでPDFを検証する方法 – C#でPDF署名の有効性をチェック + +デジタル署名が含まれる **PDFの検証方法** が必要な場合、このチュートリアルでは完全なソリューションを示します。PDFの読み込み、証明書バリデータの作成、そして Aspose.PDF for .NET を使用した PDF 署名の有効性チェックを学びます。 + +PDF のデジタル署名を検証することは、コンプライアンス、請求書処理、セキュアな文書交換において一般的な要件です。本ガイドを終える頃には、署名された PDF が信頼できるかどうかを自信を持って確認できるようになり、証明書が欠落している場合や複数署名がある場合といった典型的なエッジケースの対処方法も理解できるようになります。 + +## 前提条件 + +開始する前に、以下が揃っていることを確認してください。 + +- .NET 6.0 以降がインストール済み +- Visual Studio 2022 などの IDE(C# をサポートするエディタであれば可) +- **Aspose.PDF for .NET** のライセンス版(評価用に無料トライアルでも可) +- 署名済み PDF ファイル(`signed.pdf`)と、署名がプライベート CA に依存している場合は対応する信頼できる証明書(`trustedCertificate.pfx`) + +`Aspose.PDF` 以外に追加の NuGet パッケージは必要ありません。 + +## 手順 1: Aspose.PDF のインストール + +プロジェクト フォルダーでターミナルを開き、次のコマンドを実行します。 + +```bash +dotnet add package Aspose.PDF +``` + +このコマンドは、後で使用する `Document` と `CertificateValidator` クラスを含む最新の Aspose.PDF ライブラリをプロジェクトに追加します。 + +## 手順 2: PDF ドキュメントの読み込み + +PDF をプログラムで **PDF を読み込む方法** で読み込む最初の操作です。`Document` コンストラクタはファイル パス、ストリーム、またはバイト配列のいずれかを受け取ります。例としてフルパスを使用すると分かりやすくなります。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**重要ポイント:** `Document` オブジェクトは PDF 全体をメモリ上に表します。ファイルを読み込まなければ、**PDF 署名をチェック** するために必要な `Signatures` コレクションにアクセスできません。 + +## 手順 3: 証明書バリデータの準備 + +デジタル署名は、署名証明書が信頼できるルートにチェーンされている場合にのみ信頼されます。`CertificateValidator` を使用すると、Aspose.PDF に信頼できる証明書ストアまたは特定の PFX ファイルを指定できます。 + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +PDF が Windows ですでに信頼しているパブリック CA を使用している場合は、`certPath` を省略し、デフォルト コンストラクタで `CertificateValidator` をインスタンス化できます。カスタム PFX を指定するのは、社内 PKI 環境で有用です。 + +## 手順 4: 最初のデジタル署名を検証 + +PDF には複数の署名が含まれることがありますが、ここではシンプルに最初の署名(`Signatures[0]`)を検証します。`Validate` メソッドは、署名が暗号的に完全で **かつ** 署名証明書が信頼できる場合に `true` を返します。 + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**内部での処理:** +- 署名されたコンテンツのハッシュと署名値を比較します。 +- 提供されたバリデータを使って証明書チェーンを構築します。 +- バリデータが設定されていれば、失効ステータス(CRL/OCSP)も評価します。 + +### 複数署名の取り扱い + +PDF に複数の署名がある場合は、`Signatures` コレクションをループします。 + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +このパターンにより、**PDF 署名をチェック** して各ページごとに個別の結果を報告できます。 + +## 手順 5: 検証結果の出力 + +最後に結果をコンソールに書き出します。実運用コードでは、結果をログに残すか、無効な署名の場合は例外をスローすることが一般的です。 + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### 期待されるコンソール出力 + +``` +Valid +``` + +または + +``` +Invalid +``` + +`Validate` が返すブール値に応じたメッセージが表示されます。`Invalid` が返された場合、文書が改ざんされている、証明書が信頼できない、または署名証明書が期限切れである可能性があります。 + +## 手順 6: よくある落とし穴とベストプラクティス + +### 1. 信頼できる証明書が欠如している +`Invalid` が返り、署名は本来信頼できるはずだと分かっている場合は、`CertificateValidator` に正しいルート証明書が渡されているか確認してください。複数ルートが必要な場合は `X509Certificate2Collection` を受け取るオーバーロードを使用します。 + +### 2. 外部参照を含む署名 +一部の署名は外部コンテンツ(例: 添付ファイル)をカバーします。外部リソースにアクセスできないとハッシュ検証が失敗します。 + +### 3. タイムスタンプの検証 +署名にタイムスタンプ トークンが含まれる場合は、バリデータを構成してタイムスタンプ認証局(TSA)証明書をチェックさせます。 + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. 大容量 PDF のパフォーマンス +数百ページに及ぶ PDF を読み込むとメモリを大量に消費します。署名情報だけが必要な場合は、`PdfFileEditor` を使ってページをレンダリングせずに署名ディクショナリだけを抽出してください。 + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. スレッド安全性 +`Document` インスタンスはスレッド セーフではありません。複数 PDF を並列で検証する場合は、スレッドごとに新しい `Document` を作成してください。 + +## 完全な実行可能サンプル + +以下は、ファイル パスを適切に置き換えた後にコピー&ペーストして実行できる完全プログラムです。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**プログラムを実行すると**、各署名について 1 行ずつ出力され、PDF が **PDF デジタル署名を検証** に合格したかどうかが明確に示されます。 + +## まとめ + +これで、Aspose.PDF for .NET を使用してデジタル署名付き PDF を **検証する方法** が分かりました。本チュートリアルでは、PDF の読み込み、証明書バリデータの設定、PDF 署名の有効性チェック、複数署名の取り扱い、そして一般的な問題のトラブルシューティングを網羅しました。 + +次は、**PDF に署名する方法**、**タイムスタンプ トークンを追加する方法**、**署名されたコンテンツを抽出する方法** などの関連トピックを探求してください。これらの拡張機能を組み合わせることで、C# におけるエンドツーエンドの安全な文書ワークフローを構築できます。 + +--- + + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を応用した密接に関連するトピックを取り上げています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能を習得したり、プロジェクトで代替実装を検討したりする際に役立ちます。 + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/japanese/net/document-conversion/_index.md index 53ec465b2a..c5279ec276 100644 --- a/pdf/japanese/net/document-conversion/_index.md +++ b/pdf/japanese/net/document-conversion/_index.md @@ -56,7 +56,8 @@ Aspose.PDF の .NET 向けドキュメント変換チュートリアルでは、 | [XMLからPDFへ](./xml-to-pdf/) コード例と詳細な説明を含む包括的なステップバイステップのチュートリアルで、Aspose.PDF for .NET を使用して XML を PDF に変換する方法を学習します。 | | [XMLからPDFへの画像パスの設定](./xml-to-pdfset-image-path/) Aspose.PDF for .NET を使って、XML を PDF に簡単に変換する方法を学びましょう。この詳細なガイドでは、セットアップから完了まで、プロセスをステップごとに詳しく説明します。 | | [XPSからPDFへ](./xps-to-pdf/) Aspose.PDF for .NET を使用してXPSファイルをPDFに変換する方法を、ステップバイステップのチュートリアルで学びましょう。開発者やドキュメント作成に興味のある方に最適です。 | -| [C#でPDFをPDF/X‑4に変換 – ステップバイステップ ASP.NET PDF チュートリアル](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) PDF を PDF/X‑4 形式に変換する方法を、C# と Aspose.PDF for .NET で学びます。 | +| [C#でPDFをPDF/X‑4に変換 – ステップバイステップ ASP.NET PDF チュートリアル](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) PDF を PDF/X‑4 形式に変換する方法を、C# と Aspose.PDF for .NET で学びます。 | +| [pdfx4 変換チュートリアル – PDF 標準を設定し、Aspose で PDF を変換](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) PDF 標準を設定し、Aspose.PDF for .NET で PDF を変換する方法を学びます。 | | [PDFからPNGへのチュートリアル – C#でPDFページをPNGに変換](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) Aspose.PDF for .NET を使用して、C#でPDFページをPNG画像に変換する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/japanese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..ecc5f02823 --- /dev/null +++ b/pdf/japanese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,226 @@ +--- +category: general +date: 2026-08-08 +description: PDF/X‑4 変換チュートリアル:PDF 標準を PDF/X‑4 に設定し、Aspose を使用して PDF を変換し、信頼性の高いフォーマット変換を実現する方法を紹介します。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: ja +lastmod: 2026-08-08 +og_description: pdfx4 変換チュートリアルでは、PDF 標準を PDF/X‑4 に設定し、C# で Aspose を使用して信頼性の高い PDF + 変換を実行する方法を解説しています。 +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 変換チュートリアル – PDF 標準を設定し、Aspose を使用して PDF を変換する +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 変換チュートリアル – PDF 標準を設定し、Aspose を使用して PDF を変換する +url: /ja/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 変換チュートリアル – PDF 標準を設定し Aspose で PDF を変換する方法 + +**pdfx4 変換チュートリアル** が必要な方へ。本ガイドでは PDF 標準を PDF/X‑4 に設定し、Aspose を使用して PDF を変換する手順をすべて解説します。印刷用ファイルの準備や長期保存のコンプライアンス確保に役立つ、.NET 6 以降で動作する信頼性の高い **aspose pdf format conversion** ワークフローを学べます。 + +プロジェクトのセットアップから、ソースファイルが見つからない場合や未対応機能の扱いといったエッジケースまで網羅しています。記事の最後まで読むと、下流のワークフローで使用できる PDF/X‑4 準拠ファイルを生成する自己完結型 C# プログラムが手に入ります。 + +## 前提条件 + +開始する前に以下を用意してください。 + +- .NET 6 SDK 以上がインストール済み([ここからダウンロード](https://dotnet.microsoft.com/download)) +- 有効な Aspose.PDF for .NET ライセンス(無料トライアルでもテスト可能) +- Visual Studio 2022、VS Code、または .NET 開発に対応した任意の IDE +- 変換したいソース PDF ファイル(既知のフォルダーに配置しておくこと) + +これらの要件を満たせば、追加設定なしでコードを実行できます。 + +## 手順 1: 新しい .NET コンソールプロジェクトを作成 + +ターミナルを開き、以下のコマンドで `PdfX4Converter` という名前のコンソール アプリを作成します。 + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Aspose.PDF の NuGet パッケージを追加します。 + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` パッケージは **convert pdf pdfx4** 操作に必要な `Document` クラスと `PdfFormatConversionOptions` を提供します。 + +## 手順 2: 変換コードを記述 + +`Program.cs`(または新しいトップレベル ステートメントを使用している場合は `Program.cs`)を開き、内容を以下のサンプルに置き換えます。コードは PDF/X‑4 への **set pdf standard**、変換処理、一般的な落とし穴に対するエラーハンドリングを示しています。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### 各部分が重要な理由 + +- **引数の検証** により、ユーザーがファイル パスを忘れたときにプログラムがクラッシュするのを防ぎます。 +- **`Document` の読み込み** は、ソース PDF が存在しない、または破損している場合に明確な例外をスローし、堅牢な **convert pdf using aspose** 体験に不可欠です。 +- **`PdfFormatConversionOptions`** が **set pdf standard** を行う場所です。`PdfStandard.PdfX4` を設定すると、Aspose が自動的にカラースペースを調整し、必要なフォントを埋め込み、PDF/X‑4 用メタデータを書き込みます。 +- **`FontEmbeddingMode.EmbedAll`** は、ソース PDF で使用されたすべてのフォントを埋め込むことを保証し、印刷用 PDF の一般的な要件を満たします。 +- **`doc.Convert`** が実際の **aspose pdf format conversion** を実行します。このメソッドは一度の呼び出しで新しいファイルを書き出し、ワークフローをシンプルにします。 + +## 手順 3: コンバータを実行 + +プロジェクトをビルドし、ソース パスと出力パスを指定して実行します。 + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +すべて正常に動作すれば、コンソールに次のように表示されます。 + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +これで `output_pdfx4.pdf` を PDF/X‑4 に対応した任意のビューア(例: Adobe Acrobat Pro)で開き、*ファイル → プロパティ → 標準* からコンプライアンスを確認できます。 + +## 手順 4: PDF/X‑4 コンプライアンスを検証(任意) + +本番パイプラインでは、出力をプログラムで検証したい場合があります。Aspose の `PdfComplianceChecker` クラス(`Aspose.Pdf` パッケージに含まれる)を以下のように使用できます。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +変換後にこのスニペットを実行すると、合格/不合格の結果が明示的に得られ、CI/CD パイプラインの自動化に便利です。 + +## 手順 5: よくある落とし穴とベストプラクティス + +| 問題 | 発生理由 | 回避方法 | +|------|----------|----------| +| ソース PDF にフォントが埋め込まれていない | フォントが参照のみで埋め込まれておらず、変換時に警告が出る | 上記のように `FontEmbeddingMode.EmbedAll` を使用 | +| PDF/X‑4 で許可されていない透明オブジェクトが含まれている | PDF/X‑4 は特定の透明ブレンドを禁止している | 変換前に `doc.ProcessTransparentObjects()` で前処理 | +| 大容量ファイルで OutOfMemoryException が発生 | ドキュメント全体をメモリに読み込んでいるため | `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` でストリーミング | +| ライセンスが適用されていない | トライアル版は透かしが付く | Aspose API 使用前に `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` を呼び出す | + +これらのポイントを守れば、**convert pdf pdfx4** の本番環境での体験がスムーズになります。 + +## 手順 6: チュートリアルの拡張 + +基本的な **pdfx4 conversion tutorial** をマスターしたら、次のような拡張が可能です。 + +- **バッチ変換**: フォルダー内の PDF をすべて走査し、PDF/X‑4 に変換 +- **メタデータ注入**: 特定の印刷所が要求する XMP メタデータを追加 +- **カラープロファイル管理**: 変換前に `doc.ColorSpace = ColorSpace.DeviceRGB;` で ICC プロファイルを付与 + +これらすべては、本稿で示した **aspose pdf format conversion** の土台の上に構築できます。 + +## 結論 + +本 **pdfx4 conversion tutorial** では、PDF 標準を PDF/X‑4 に **set pdf standard** し、Aspose を用いた信頼性の高い **convert pdf using Aspose** を実行し、結果を検証する方法を解説しました。これで、ドキュメント処理パイプラインに組み込める完全な C# プログラムが手に入りました。バッチ処理やメタデータ操作、別の PDF 標準(PDF/A‑2b、PDF/UA)への変換にも挑戦し、**aspose pdf format conversion** のスキルをさらに深めてください。 + +Happy coding, and enjoy the confidence that comes with PDF/X‑4 compliant output! + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示した手法を応用した関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能習得や代替実装アプローチの探求に役立ちます。 + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/japanese/net/document-creation/_index.md b/pdf/japanese/net/document-creation/_index.md index 14efe1669f..e83fb58e8c 100644 --- a/pdf/japanese/net/document-creation/_index.md +++ b/pdf/japanese/net/document-creation/_index.md @@ -76,9 +76,13 @@ Aspose.PDF Net のコードチュートリアル ### [Aspose.PDF を使用して PDF ドキュメントを作成 – ページ、シェイプの追加と保存](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Aspose.PDF の API を利用し、ページや図形を追加して PDF を保存する手順を解説します。 + ### [Aspose.PDF を使用した PDF ドキュメントの作成: ステップバイステップ ガイド](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aspose.PDF を使用して、.NET で PDF ドキュメントを最初から作成する方法をステップバイステップで学びます。 +### [Aspose.Pdf を使用して C# で PDF ドキュメントを作成する](./create-pdf-document-in-c-with-aspose-pdf/) +Aspose.Pdf を使用して C# で PDF ドキュメントを作成する方法を解説します。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/japanese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..3f627cd6fd --- /dev/null +++ b/pdf/japanese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-08-08 +description: C#でAspose.Pdfを使用してPDFドキュメントを作成します。空白ページの追加方法、PDFへの段落の追加方法、そして正確な座標でテキストを配置する方法を学びます。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: ja +lastmod: 2026-08-08 +og_description: C#でPDFドキュメントを素早く作成します。このチュートリアルでは、空白ページのPDFを追加する方法、PDFに段落を追加する方法、そしてAspose.Pdfを使用してPDF内のテキストの位置を指定する方法を示します。 +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Aspose.Pdf を使用した C# での PDF ドキュメント作成 – 完全ガイド +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Aspose.Pdf を使用して C# で PDF ドキュメントを作成する +url: /ja/net/document-creation/create-pdf-document-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 ドキュメントを作成** したい場合は、このガイドが手順をすべて示します。Aspose.Pdf for .NET を使用すれば、空白ページの PDF を追加したり、段落を PDF に挿入したり、ピクセル単位で正確にテキストを配置したり、数行の C# コードだけで実現できます。 + +チュートリアルを終えると、指定した座標にノートが配置された完全に機能する PDF ファイルが得られます。外部ツールや手動編集は不要で、どの .NET プロジェクトにもそのまま組み込めるクリーンで再利用可能なコードです。 + +## 学べること + +* Aspose.Pdf を使って **PDF ドキュメントを作成** する方法 +* 正しい **空白ページ PDF の追加** 手順と、コンテンツを追加する前にページが必要な理由 +* **PDF に段落を追加** し、カスタムタグを付与する方法(後で抽出やスタイリングに便利) +* `Position` クラスを使って **PDF 内のテキストを正確に配置** するテクニック +* 結果をディスクに保存し、出力を検証する方法 + +**前提条件** + +* .NET 6.0 以降(コードは .NET Framework 4.7+ でも動作します) +* 有効な Aspose.Pdf for .NET ライセンスまたは無料評価キー +* Visual Studio 2022 や C# 拡張機能付き VS Code などの IDE + +> **プロのコツ:** 無料評価版を使用すると、生成された PDF に小さな透かしが入ります。透かしを除去するにはライセンスを登録してください。 + +## Aspose.Pdf で PDF ドキュメントを作成する手順 + +最初のステップは `Document` クラスのインスタンスを作成することです。このオブジェクトは PDF 全体を表し、ページ、リソース、保存オプションへのアクセスを提供します。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +ドキュメントの作成だけではまだディスクに何も書き込まれません。メモリ上の表現を準備するだけなので、API が高速でメモリ効率が良くなります。 + +## Aspose.Pdf で空白ページ PDF を追加する + +PDF にはコンテンツを配置する前に、最低でも 1 ページが必要です。空白ページの追加は次の 1 行で完了します。 + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` メソッドはデフォルトサイズ(A4)・向き(縦)でページを作成します。別サイズが必要な場合は、`Add()` に `PageSize` インスタンスを渡してください。 + +## PDF に段落を追加し、ノートを設定する + +ページが存在したら、表示テキストを保持する `Paragraph` オブジェクトを作成できます。段落にはカスタムタグを付与でき、後でプログラムから要素を検索したりスタイルを適用したりする際に便利です。 + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### なぜタグを使うのか? + +タグは PDF 要素に付随するメタデータです。後で `Document.FindObject()` で検索したり、アクセシビリティやインデックス作成のためにタグを利用する PDF プロセッサに渡したりできます。 + +## 正確な座標で PDF のテキストを配置する + +段落のデフォルト配置はページ余白の左上です。テキストを正確な位置に移動するには、段落のタグに `Position` プロパティを設定します。 + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +座標はポイント単位で測定されます(1 ポイント = 1/72 インチ)。原点 (0,0) はページ左下にあり、ほとんどの PDF レンダリングエンジンと一致します。`X` と `Y` の値を調整してレイアウトに合わせてください。 + +配置が完了したら、段落をページのコレクションに追加します。 + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## PDF ドキュメントを保存する + +最後に、メモリ上の PDF をファイルに書き出します。出力パス、フォーマット、暗号化オプションなども指定可能です。 + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +プログラムが終了すると、`output.pdf` にはテキスト **Important note** が右上付近(X = 50、Y = 750)に配置された 1 ページが保存されます。任意の PDF ビューアで開き、配置を確認してください。 + +![Generated PDF document created with C# Aspose.Pdf showing positioned note](https://example.com/images/generated-pdf.png) + +*画像の代替テキスト: C# Aspose.Pdf で作成された PDF ドキュメント(配置されたノートを表示)*(主要キーワードを含む)。 + +## 完全な実行可能サンプル + +すべての要素を組み合わせたコンソール アプリケーションの例です。コピーしてビルド、実行できます。 + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**期待される出力**(プログラム実行時): + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +`output.pdf` を開くと、指定した座標に **Important note** が配置された 1 ページが表示されます。 + +## よくあるバリエーションとエッジケース + +| シナリオ | 変更点 | 重要な理由 | +|----------|--------|------------| +| **異なるページサイズ** | `pdfDocument.Pages.Add(PageSize.A5)` | 小さいページはファイルサイズを削減し、モバイル画面に適合します。 | +| **複数のノート** | 文字列コレクションをループし、各文字列で `Paragraph` を作成し、`Y` 座標をインクリメント | バレットスタイルのノートを一括生成できます。 | +| **Unicode 文字** | ソース ファイルを UTF‑8 で保存し、`noteParagraph.Text = "重要なメモ"` を設定 | Aspose.Pdf は Unicode を標準でサポートしますが、ファイルエンコーディングが一致している必要があります。 | +| **パスワード保護 PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | 機密ノートにセキュリティを追加します。 | +| **高解像度出力** | コンテンツ追加前に `pdfDocument.PageInfo.Width` と `Height` を大きな値に設定 | 大判印刷用 PDF に便利です。 | + +## 本番環境での利用ヒント + +* 多数の PDF を単一リクエストで生成する場合は、**`Document` インスタンスを再利用** して GC の負荷を減らす。 +* ループ内で多数のドキュメントを作成する場合は、**オブジェクトを破棄**(`pdfDocument.Dispose()`)する。 +* **座標の検証**: `Y` 値がページ高さを超えるとテキストが切り取られます。 +* 後でタグ(`/P`)でノートを抽出したい場合は、**`TextFragmentAbsorber`** を使用して内容を取得できます。 + +## 結論 + +これで **Aspose.Pdf で PDF ドキュメントを作成**、**空白ページ PDF を追加**、**PDF に段落を追加**、**PDF にノートを追加**、そして **PDF 内のテキストを正確に配置** する方法が分かりました。完全なサンプルは、請求書、レポート、各種ドキュメント自動化シナリオに拡張できるクリーンで再利用可能なワークフローを示しています。 + +次は、**PDF に画像を追加**、**Aspose.Pdf でテーブルを作成**、**デジタル署名を適用** などの関連トピックを探求してください。これらはすべて本稿で扱ったコア概念に基づいているため、より高度な PDF 生成タスクにもすぐに取り組めます。 + +Happy coding! + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示したテクニックを基にした、密接に関連するトピックをカバーしています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能を習得したり、独自プロジェクトで代替実装を検討したりするのに役立ちます。 + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/japanese/net/images-graphics/_index.md b/pdf/japanese/net/images-graphics/_index.md index e19b9d0ae8..e4e3076a17 100644 --- a/pdf/japanese/net/images-graphics/_index.md +++ b/pdf/japanese/net/images-graphics/_index.md @@ -164,6 +164,9 @@ Aspose.PDF for .NET を使用してPDFドキュメント内の画像を圧縮・ ### [Aspose.PDF for .NET を使用して PDF に画像の背景を設定する: 包括的なガイド](./aspose-pdf-net-set-image-backgrounds/) Aspose.PDF for .NET を使用して画像背景を設定し、PDFドキュメントの魅力を高める方法を学びましょう。このガイドでは、セットアップ、実装、最適化のヒントを解説します。 +### [Aspose.PDF for .NET を使用して C# で PDF の不透明度を設定する:完全ガイド](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Aspose.PDF for .NET を使い、C# で PDF の不透明度を設定する方法をステップバイステップで解説します。 + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/japanese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..2457c356b0 --- /dev/null +++ b/pdf/japanese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF を使用して C# で PDF の不透明度を設定する – 数行のコードでストロークと塗りの透明度を調整する方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: ja +lastmod: 2026-08-08 +og_description: C#でPDFの不透明度をすばやく設定する。このガイドでは、Aspose.PDF のグラフィックスステート API を使用して、ストロークと塗りの透明度を変更する方法を示します。 +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Aspose.PDF を使用した C# で PDF の不透明度を設定する – ステップバイステップチュートリアル +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: C# と Aspose.PDF で PDF の不透明度を設定する – 完全ガイド +url: /ja/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#でPDFの不透明度を設定する – Aspose.PDF 完全ガイド + +特定の描画操作に対して **PDF の不透明度を設定** する必要がある場合、このチュートリアルでは Aspose.PDF for .NET を使用した正確な方法を示します。透かしや半透明オーバーレイ、カスタムグラフィックを作成する場合でも、簡潔で本番環境向けのアプローチを学べます。 + +以下のセクションでは、PDF の読み込みからグラフィックスステートの編集、新しい不透明度定義の追加、結果の保存までをすべてカバーします。外部ドキュメントは不要です—以下のコードと各手順の簡単な説明だけで完了します。 + +## 前提条件 + +開始する前に、以下を用意してください。 + +* .NET 6.0 以降(コードは .NET Framework 4.7+ でも動作します) +* 有効な Aspose.PDF for .NET ライセンス(評価用の無料トライアルでも可) +* 読み書き可能なフォルダーに配置した入力 PDF ファイル(`input.pdf`) +* Visual Studio 2022 またはお好みの C# IDE + +## 手順 1 – PDF ドキュメントの読み込み (Aspose.PDF for .NET) + +最初のタスクは既存の PDF を開くことです。Aspose.PDF は PDF ファイルを `Document` クラスで表現し、ページ、リソース、低レベルオブジェクトへのフルアクセスを提供します。 + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*この点が重要な理由*: ドキュメントを読み込むことで、メモリ上に安全に変更できるモデルが作成されます。`using` 文により、処理完了後にファイルハンドルが自動的に解放されます。 + +## 手順 2 – 編集したい最初のページを取得 + +不透明度はページごとのリソース辞書で定義されます。ここでは最初のページを対象にしますが、バッチ処理が必要な場合は `doc.Pages` をループしてください。 + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*この点が重要な理由*: 各ページは独自の `Resources` コレクションを持ち、グラフィックスステート、フォント、画像などが格納されています。正しいページを変更することで、期待通りの不透明度効果が得られます。 + +## 手順 3 – ページのリソース辞書を編集用に開く + +Aspose.PDF は低レベルの PDF 辞書を壊さずに操作できる `DictionaryEditor` ヘルパーを提供します。 + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*この点が重要な理由*: PDF の COS(Content Object System)辞書を直接編集することが、カスタムグラフィックスステートを注入する唯一の方法です。エディタは低レベル構文を抽象化しつつ、PDF の有効性を保ちます。 + +## 手順 4 – 既存の ExtGState 辞書を取得 + +**ExtGState**(外部グラフィックスステート)辞書には不透明度、ブレンドモード、線幅などが格納されます。存在しない場合、Aspose.PDF は新しいエントリを追加したときに自動的に作成します。 + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*この点が重要な理由*: `ExtGState` エントリが無いと、ページのコンテンツストリームでカスタム不透明度を参照できません。この手順でコンテナの存在を保証します。 + +## 手順 5 – 目的の不透明度で新しいグラフィックスステートを作成 + +グラフィックスステートはパラメータの集合です。不透明度のために `CA`(ストローク不透明度)と `ca`(塗りつぶし不透明度)を設定します。また、透明ピクセルが下層コンテンツとどのように相互作用するかを制御するブレンドモード(`BM`)も設定します。 + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*この点が重要な理由*: `CA` と `ca` は 0(完全に透明)から 1(完全に不透明)までの値を受け取ります。必要な視覚効果に合わせて数値を調整してください。ブレンドモード `"Normal"` が最も一般的ですが、芸術的効果を狙うなら `"Multiply"` や `"Screen"` も試せます。 + +## 手順 6 – ExtGState コレクションに新しいグラフィックスステートを登録 + +各グラフィックスステートには一意の名前(例:`GS0`)が必要です。辞書を `ExtGState` コレクションに追加し、ページのリソースを更新します。 + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*この点が重要な理由*: ステートに名前(`GS0`)を付けることで、ページのコンテンツストリーム内で `gs` 演算子を使って後から参照できます。複数の不透明度レベルが必要な場合は、`GS1`、`GS2` … といった追加エントリを作成します。 + +## 手順 7 – 描画コマンドにグラフィックスステートを適用(オプション) + +既存のコンテンツに即座に不透明度を適用したい場合は、ページのコンテンツストリームを編集する必要があります。以下は新しく作成したステートを使用して半透明の矩形を描画するシンプルな例です。 + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*この点が重要な理由*: `gs` 演算子(`SetGraphicsState`)は、以降の描画コマンドに対して `GS0` で定義した不透明度値を使用するよう PDF レンダラに指示します。`gsave`/`grestore` のペアにより、他のページ要素への影響を防ぎます。 + +## 手順 8 – 変更後の PDF を保存 + +最終的に、更新されたドキュメントをディスクに書き出します。 + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*この点が重要な理由*: 保存によりすべての変更が確定し、新しいグラフィックスステートが埋め込まれます。Adobe Acrobat、Chrome など任意のビューアで意図した透明度が正しく表示されます。 + +### 期待される結果 + +`output.pdf` を PDF ビューアで開きます。赤い矩形の輪郭が 80 % の不透明度、塗りが 40 % の不透明度で表示され、背景コンテンツと滑らかにブレンドされているはずです。ページのその他の部分は変更されていません。 + +## 一般的なバリエーションとエッジケース + +| 状況 | 変更点 | 理由 | +|-----------|----------------|--------| +| **複数の不透明度レベル** | 異なる `CA`/`ca` 値を持つ追加のグラフィックスステート(`GS1`、`GS2` …)を作成し、必要に応じて参照する | 要素ごとに細かい制御が可能になる | +| **異なるブレンドモード** | `BM` エントリで `"Normal"` の代わりに `"Multiply"`、`"Screen"`、`"Overlay"` などを使用する | 芸術的なブレンド効果が得られる | +| **既存のコンテンツストリームへの適用** | 影響させたい描画演算子の直前に `SetGraphicsState` を挿入する | 関係のないオブジェクトへの不要な不透明度付与を防止 | +| **大容量 PDF** | `foreach (Page p in doc.Pages)` ループでページを順次処理し、ファイル全体を一度にメモリに読み込まないようにする | パフォーマンス向上とメモリ圧迫の軽減 | +| **ExtGState が存在しない** | 手順 4 のコードが自動的に作成するため、追加の処理は不要 | 辞書が確実に存在することを保証 | + +### プロのコツ + +多数のカスタムグラフィックスステートを追加する場合は、命名規則(`GS0`、`GS1` …)を統一し、各ステートの目的をコメントブロックで文書化しておくと、特に共同プロジェクトでの保守が楽になります。 + +## 完全な実行可能サンプル + +以下はコピーして貼り付け、実行できる完全なプログラムです。すべての手順、必要な `using` ディレクティブ、コメントが含まれています。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +プログラムを実行します。 + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を応用した関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、追加の API 機能習得や代替実装アプローチの探求に役立ちます。 + +- [Aspose.PDF for .NET を使用した PDF の画像背景設定:包括的ガイド](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Aspose.PDF for .NET を使用した PDF の破線作成:ステップバイステップガイド](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF for .NET で PDF をカスタマイズする方法:ページ余白設定と線の描画](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..551ea924ec 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 にフォームフィールドとページを追加する手順をステップバイステップで解説します。 | +| [Aspose.PDF で PDF ドキュメントを保存する – 完全ガイド](./save-pdf-document-with-aspose-pdf-complete-guide/) Aspose.PDF を使用して PDF ドキュメントを保存する完全な手順を解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/japanese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..e22a59893e --- /dev/null +++ b/pdf/japanese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF を使用して PDF ドキュメントを保存し、PDF にページを追加する方法、PDF フォームフィールドに入力する方法、そしてフォームフィールド付き + PDF を作成する方法をひとつのチュートリアルで学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: ja +lastmod: 2026-08-08 +og_description: Aspose.PDFでPDFドキュメントを保存し、PDFにページを追加する方法、PDFフォームフィールドに入力する方法、フォームフィールド付きPDFを迅速かつ確実に作成する方法をご紹介します。 +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Aspose.PDFでPDFドキュメントを保存する – ステップバイステップガイド +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Aspose.PDFでPDFドキュメントを保存する – 完全ガイド +url: /ja/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDFでPDFドキュメントを保存する – 完全ガイド + +インタラクティブなフォームフィールドを含む **PDFドキュメントを保存** したい場合、本チュートリアルで手順をすべて解説します。Aspose.PDF for .NET を使用して、PDF にページを追加し、PDF フォームを作成し、フォームフィールドに値を設定する方法を学びます。 + +以下のセクションで学べること: + +* 新しい PDF に複数ページを追加する方法 +* 1 ページ目にテキストボックス フィールドを作成する方法 +* 同じフィールドのウィジェット注釈を 2 ページ目に配置する方法 +* フィールドの値を設定(PDF フォームフィールドにデータを入力)する方法 +* 最後に **PDFドキュメントを保存** する方法 + +外部ツールは不要です。完全に実行可能なコードが同梱されています。 + +## 前提条件 + +* .NET 6.0 以降(.NET Framework 4.7.2+ でも動作) +* 有効な Aspose.PDF for .NET ライセンスまたは無料評価キー +* Visual Studio 2022(または任意の C# IDE) + +NuGet パッケージを追加: + +```bash +dotnet add package Aspose.PDF +``` + +## PDF にページを追加する方法 + +最初のステップは空の PDF を作成し、必要なページを追加することです。フォームフィールドを定義する前にページを追加しておくと、レイアウト座標が正確になります。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*ポイント*: 各 `Page` オブジェクトは印刷可能なキャンバスを表します。ページを早めに追加しておくことで、後でフォーム要素の位置指定に利用できます。 + +## Aspose.PDFでPDFフォームを作成する方法 + +PDF フォームは **フィールド定義**(論理コンテナ)と、1 つ以上の **ウィジェット注釈**(視覚的表現)で構成されます。以下の例では、1 ページ目に **Comments** という名前の `TextBoxField` を作成します。 + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*ポイント*: `Rectangle` の座標はポイント単位(1 pt = 1/72 in)で表されます。デザインに合わせて値を調整してください。 + +## PDF フォームフィールドにデータを入力する + +ドキュメントを保存する前に、プログラムからフィールドの値を設定できます。これが **populate PDF form field** の核心です。 + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +後から(例: ユーザー入力に基づいて)フィールドを埋める必要がある場合は、`Save` を呼び出す直前に `commentsField.Value` に新しい文字列を代入すれば完了です。 + +## 同じフィールドのウィジェット注釈を 2 ページ目に追加する + +ウィジェット注釈はフォームフィールドをページ上に表示させます。2 つ目のウィジェットを追加することで、同一の論理フィールドが複数ページにわたって表示され、**create PDF with form fields** が複数ページに跨ることを示します。 + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*ポイント*: `Widgets` コレクションは任意の数の視覚表現を保持できます。どちらのページでもフィールドにアクセスでき、入力された値は同期されます。 + +## フィールドを 1 ページ目の注釈コレクションに紐付ける + +フォームフィールドはページの注釈コレクションに追加しなければ、PDF ビューアが正しく描画できません。 + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDFドキュメントを保存する + +フォーム定義が完了したら、**PDFドキュメントを保存** して任意の場所に出力します。 + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +`output.pdf` を Adobe Acrobat Reader などのビューアで開くと、1 ページ目にテキストボックス、2 ページ目に同じフィールドが表示されます。どちらのボックスに入力しても、同一の基礎フィールドが更新されます。 + +## 完全な実行可能サンプル + +以下はコンソール アプリケーションにコピーペーストできるフルプログラムです。そのままコンパイルすれば、説明通りの PDF が生成されます。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**期待される出力**: `output.pdf` という名前のファイルが作成され、2 ページが含まれます。ページ 1 には座標 (100, 600) に「Comments」ラベル付きテキストボックスが表示され、ページ 2 には同じフィールドが (100, 400) に配置されます。フィールドは「Enter your feedback here」で事前入力されており、どちらのページでテキストを変更しても、再度保存した際に同じ値が保持されます。 + +## よくある質問とエッジケースの対処 + +| 質問 | 回答 | +|----------|--------| +| *同じフィールドに複数のウィジェットを追加できますか?* | はい。`commentsField.Widgets` に追加の `WidgetAnnotation` オブジェクトを追加してください。各ウィジェットは任意のページに配置可能です。 | +| *フィールドの外観(フォント、枠線、背景)を設定したい場合は?* | `commentsField.DefaultAppearance` でフォントと色を指定し、`commentsField.Border` プロパティで線種を設定します。 | +| *フィールドを読み取り専用にするには?* | `commentsField.ReadOnly = true;` と設定します。値は表示されますが、ユーザーは編集できません。 | +| *PDF 作成後にフィールドにデータを入力できますか?* | はい。`new Document("output.pdf")` で保存済み PDF をロードし、`pdfDocument.Form["Comments"]` でフィールドを取得、`Value` に新しい値を代入してから `Save` してください。 | +| *PDF/A 形式で保存する必要がある場合は?* | ドキュメント構築後、`pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` を呼び出してから保存します。 | + +## フィールドからのヒント + +* **プロのコツ**: 論理フィールド名は短くユニークに保ちましょう。後でプログラムからフィールドを埋める際の識別子になります。 +* **注意点**: ウィジェット矩形が重ならないようにしてください。重なりは一部ビューアで描画アーティファクトの原因になります。 +* **パフォーマンス**: 多数のページやウィジェットをループで追加する場合は、`Rectangle` インスタンスを再利用し座標だけを変更すると効率的です。 + +## 結論 + +これで **PDFドキュメントを保存** し、完全に機能するフォームを含む PDF を作成し、**populate PDF form field** を行い、**add pages PDF** と **create PDF with form fields** を Aspose.PDF for .NET で実装する方法が分かりました。完全なサンプルは、ドキュメント作成から最終保存までのエンドツーエンドのワークフローを示しています。 + +次は、**チェックボックスの追加**、**ドロップダウンリストの作成**、または **フォームのフラット化(読み取り専用配布用)** などの関連トピックを探求してください。これらはすべて本ガイドで扱った原則に基づき、PDF 自動化の可能性をさらに広げます。 + +Happy coding! + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示したテクニックを応用した関連トピックを扱っています。各リソースには完全な動作コード例とステップバイステップの解説が含まれており、API の追加機能を習得したり、独自プロジェクトで代替実装を検討したりするのに役立ちます。 + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/japanese/net/programming-with-pdf-pages/_index.md index 4a8bc8635c..c8cf95f19b 100644 --- a/pdf/japanese/net/programming-with-pdf-pages/_index.md +++ b/pdf/japanese/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Aspose.PDF for .NET の「PDF ページを使ったプログラミング」ド | [PDFページサイズの更新](./update-dimensions/) この包括的なステップバイステップ ガイドでは、Aspose.PDF for .NET を使用して PDF ページのサイズを簡単に更新する方法を説明します。 | | [PDFファイルのページコンテンツにズーム](./zoom-to-page-contents/) この包括的なガイドでは、Aspose.PDF for .NET を使用して PDF ファイルのページコンテンツを拡大する方法を学習します。特定のニーズに合わせて PDF ドキュメントを強化しましょう。 | | [C# で PDF にページ番号を追加 – 完全ステップバイステップガイド](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) Aspose.PDF for .NET を使用して、C# で PDF にページ番号を追加する手順をステップバイステップで解説します。 | +| [Aspose を使ったベーツ番号付け PDF の追加 – 完全ステップバイステップガイド](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) Aspose.PDF for .NET を使用して、PDF にベーツ番号を追加する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/japanese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..3485a75931 --- /dev/null +++ b/pdf/japanese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: C#でAspose.Pdfを使用してPDFにベーツ番号付けを追加する。このチュートリアルでは、空白ページのPDFを追加し、プログラムでPDFを生成する方法も示しています。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: ja +lastmod: 2026-08-08 +og_description: Aspose.Pdf を使用して C# でベーツ番号付き PDF を追加します。空白ページ PDF の追加方法、プログラムでの PDF + 生成、数分で最終ドキュメントを保存する方法を学びましょう。 +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: AsposeでPDFにベーツ番号付与 – 完全C#ガイド +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: AsposeでPDFにベーツ番号を追加 – ステップバイステップガイド +url: /ja/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose で bates numbering pdf を追加 – ステップバイステップガイド + +Aspose.Pdf を使用した bates numbering pdf の追加は、基本的な手順を理解すれば簡単です。blank page pdf の追加や pdf をプログラムで生成する必要がある場合も、このガイドですべてカバーしています。 + +このチュートリアルで行うこと: + +* 最初から新しい PDF ドキュメントを作成する。 +* Bates 番号を配置する blank page pdf を追加する。 +* カスタムプレフィックスで Bates numbering artifact を設定する。 +* PDF を保存し、生成されたファイルに番号が表示されるようにする。 + +最後まで実行すると、**CASE‑1000**、**CASE‑1001**、… のような Bates 番号が付いた PDF を生成する完全な C# コンソール アプリケーションが完成します。これは法務や e‑discovery ワークフローで一般的に求められる要件です。 + +## 前提条件 + +* .NET 6.0 SDK 以降(コードは .NET Framework 4.8 でも動作します)。 +* Visual Studio 2022 または任意の C# 対応 IDE。 +* 有効な Aspose.Pdf for .NET ライセンス(または無料評価キー)。 +* C# の基本的な構文に慣れていること。 + +> **プロのコツ:** ライセンスなしでコードを実行すると、Aspose は出力 PDF に小さな透かしを追加します。 + +## Step 1: Set up the project and import Aspose.Pdf + +新しいコンソール プロジェクトを作成し、Aspose.Pdf NuGet パッケージを追加します: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +サンプルで必要な `using` ディレクティブは次のとおりです: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +これらの名前空間により、後で使用する `Document`、`Page`、`BatesNumberingArtifact` クラスにアクセスできます。 + +## Step 2: Add a blank page pdf + +Bates 番号はページに付与する必要があるため、まず番号付けアーティファクトを受け取る blank page を作成します。 + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` クラスは PDF 全体を表し、`Pages.Add()` はドキュメントのページコレクションの末尾に新しい空白ページを挿入します。ドキュメントが空の状態から開始するため、この呼び出しで最初のページも作成されます。 + +## Step 3: Configure the Bates numbering artifact + +次に、Bates 番号の表示形式を定義します。`BatesNumberingArtifact` を使用すると、開始番号、プレフィックス、サフィックス、書式設定オプションを設定できます。 + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**重要なポイント:** +`StartNumber` を **1000** に設定すると、一般的な法務ケースファイルの慣例に合わせられます。`Prefix` により、各番号が **CASE‑1000**、**CASE‑1001**、… のように表示され、検索やソートが容易になります。 + +## Step 4: Attach the artifact to the page + +アーティファクトはページの `Artifacts` コレクションに追加する必要があり、保存時に Aspose が各ページに描画します。 + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +ドキュメントを保存すると、Aspose は自動的にすべてのページにアーティファクトを繰り返し配置し、次のページごとに番号をインクリメントします。 + +## Step 5: (Optional) Add additional pages + +さらにページが必要な場合は、`pdfDocument.Pages.Add()` を繰り返すだけです。前ステップで添付した Bates numbering artifact は新しいページにも自動的に表示されます。 + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Step 6: Save the PDF – generate pdf programmatically + +最後に、ドキュメントをディスクに永続化します。ここで初めて Bates 番号がページに描画されます。 + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**期待される結果:** +*BatesNumberedDocument.pdf* を開くと、3 ページの PDF が表示されます。各ページの右下に Bates 番号が表示されます: + +* ページ 1 → **CASE‑1000** +* ページ 2 → **CASE‑1001** +* ページ 3 → **CASE‑1002** + +アーティファクトがページコレクションに添付されているため、番号は自動的にインクリメントされます。 + +## Full, runnable example + +すべてをまとめた完全なコンソール プログラムは以下の通りです。コピーして貼り付け、実行できます: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +`dotnet run` でプログラムを実行します。実行後、デスクトップ上に作成されたファイルを確認し、Bates 番号が正しく付与されていることを確認してください。 + +![bates numbering pdf の例を追加](/images/bates-numbering.png "Add bates numbering pdf example") + +## Common questions and edge cases + +### 異なるフォントや位置が必要な場合は? + +`BatesNumberingArtifact` には `FontSize`、`FontColor`、`HorizontalAlignment`、`VerticalAlignment` などのプロパティが用意されています。例: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### 特定のページだけ番号付けを除外したい場合は? + +番号付けしたいページ用に別の `BatesNumberingArtifact` を作成し、対象ページにのみ追加します。アーティファクトが添付されていないページは番号が付与されません。 + +### 既存の PDF でも同様に機能しますか? + +はい。`new Document()` の代わりに既存ファイルを読み込みます: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +その後、目的のページにアーティファクトを添付して保存します。 + +## Conclusion + +これで **add bates numbering pdf** を Aspose.Pdf で実装する方法、**add blank page pdf** の手順、そして **generate pdf programmatically** の方法を、クリーンで再利用可能な C# ソリューションとして習得しました。このアプローチはページ数やカスタムプレフィックス、スタイリングオプションに関係なく機能し、最終ドキュメントを完全にコントロールできます。 + +次に検討できるステップ: + +* Use **create pdf as + +## What Should You Learn Next? + +以下のチュートリアルは、本ガイドで示したテクニックを基にした関連トピックを扱っています。各リソースには完全な動作コード例とステップバイステップの解説が含まれており、追加の API 機能を習得したり、プロジェクトで代替実装アプローチを探求したりするのに役立ちます。 + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 06d10a8643..64041ba7e2 100644 --- a/pdf/japanese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/japanese/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ | [PDFファイルの署名を使用してスマートカードで署名する](./sign-with-smart-card-using-pdf-file-signature/) Aspose.PDF for .NET を使ってスマートカードでPDFファイルに署名する方法を学びましょう。安全なデジタル署名を実現するには、このステップバイステップガイドに従ってください。 | | [署名フィールドを使用してスマートカードで署名する](./sign-with-smart-card-using-signature-field/) Aspose.PDF for .NET を使ってスマートカードで安全に PDF に署名する方法を学びましょう。ステップバイステップのガイドに従って簡単に実装できます。 | | [C# で PDF 署名を確認する – 署名済み PDF ファイルの読み取り方法](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) Aspose.PDF for .NET を使用して、C# で署名済み PDF の署名情報を取得し、検証する方法を学びます。 | +| [C# で PDF 署名を検証する – Aspose.PDF 完全ガイド](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) 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 ファイルを修復する方法を学びましょう。ステップバイステップのガイドで、破損した文書を復元できます。 | +| [Aspose.PDF を使用した PDF デジタル署名の検証](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) Aspose.PDF for .NET を使って PDF のデジタル署名を検証し、信頼性を確認する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/japanese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/japanese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..4cd879b378 --- /dev/null +++ b/pdf/japanese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-08-08 +description: PDF署名チュートリアル:署名検証オプションとC#コードを使用してPDFデジタル署名を検証する方法を示す、クイックステップバイステップガイド +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: ja +lastmod: 2026-08-08 +og_description: PDF署名チュートリアルでは、Aspose.PDFを使用したPDFデジタル署名の検証手順を案内します。署名検証オプションの設定方法と結果の確認方法を学びましょう。 +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF署名チュートリアル – C#でPDFデジタル署名を検証する +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: PDF署名チュートリアル:Aspose.PDFでPDFデジタル署名を検証する +url: /ja/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – validate a PDF digital signature in C# + +PDF デジタル署名の検証方法を正確に示す **pdf signature tutorial** が必要な方へ。本ガイドでは、署名済み PDF の読み込み、**signature validation options** の設定、検証の実行、結果の表示までを、分かりやすい実行可能な C# コードで解説します。 + +PDF 署名の検証は、契約書や請求書など法的に重要な文書を処理する際に不可欠です。本チュートリアルはワークフロー全体を網羅しているため、どの API 呼び出しが必要かを推測することなく、署名チェックを自分のアプリケーションに組み込めます。 + +## What you’ll accomplish + +このチュートリアルを完了すると、以下ができるようになります。 + +* Aspose.PDF を使用して署名済み PDF ファイルを読み込む。 +* ハッシュアルゴリズムなど、**signature validation options** を設定する。 +* `Validate` メソッドを呼び出して **validate pdf digital signature** を実行する。 +* コンソールに「Signature valid」メッセージを明確に出力する。 + +**Prerequisites** + +* .NET 6.0(またはそれ以降)がインストールされていること。 +* Visual Studio 2022(または任意の C# IDE)。 +* Aspose.PDF for .NET NuGet パッケージ(`Aspose.Pdf`)。 + +> **Pro tip:** SHA‑3 アルゴリズムのサポートや検証パフォーマンス向上のため、最新バージョンの Aspose.PDF を使用してください。 + +## Step 1: Install the Aspose.PDF NuGet package + +Visual Studio でプロジェクトを開き、Package Manager Console に以下のコマンドを実行します。 + +```bash +Install-Package Aspose.Pdf +``` + +このパッケージにより、`Aspose.Pdf` 名前空間が追加され、`Document` クラスや署名関連 API が利用可能になります。 + +## Step 2: Load the signed PDF document + +最初のコード行で、ディスク上の PDF ファイルを表す `Document` オブジェクトを作成します。 + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* `Document` クラスは PDF 構造を解析し、埋め込まれたすべてのデジタル署名を保持する `Signatures` コレクションを公開します。ファイルパスが間違っていると例外がスローされるため、実行前にパスを確認してください。 + +## Step 3: Configure signature validation options + +`SignatureValidationOptions` クラスを使って検証プロセスをカスタマイズできます。本チュートリアルではハッシュアルゴリズムを指定しますが、証明書失効チェックやタイムスタンプ検証なども設定可能です。 + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* ハッシュアルゴリズムは署名作成時に使用されたものと一致している必要があります。アルゴリズムが一致しないと、署名が正しくても検証に失敗します。 + +## Step 4: Validate the first signature + +多くの PDF は単一の署名しか持ちませんが、`Signatures` コレクションは複数保持できます。この例では最初のエントリ(`[0]`)を検証します。`Validate` メソッドは成功を示す Boolean を返します。 + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* PDF に署名が全くない場合、`document.Signatures.Count` は `0` となり、`[0]` へのアクセスで `IndexOutOfRangeException` が発生します。以下のように簡単なチェックで防止してください。 + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Step 5: Display the validation result + +最後に結果をコンソールに出力します。このステップで **check pdf signature** の結果を人間が読める形で示します。 + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +プログラムを実行すると、次のように表示されます。 + +``` +Signature valid: True +``` + +署名が破損している、サポート外のアルゴリズムが使用されている、または証明書が失効している場合は `False` が出力されます。 + +## Full, runnable example + +以下のコードを新しいコンソールプロジェクト(`dotnet new console`)に貼り付け、`YOUR_DIRECTORY/signed.pdf` を署名済み PDF のパスに置き換えてください。 + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Expected output + +``` +Signature valid: True +``` + +署名の検証に失敗した場合、コンソールは `Signature valid: False` と表示します。 + +## Common questions and troubleshooting + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | `SignatureValidationOptions` の `HashAlgorithm` を、例として `HashAlgorithm.SHA256` のように一致させてください。 | +| **How do I validate all signatures in a multi‑signature PDF?** | `document.Signatures` をループし、各エントリに対して `Validate` を呼び出します。 | +| **Can I verify the signing certificate’s trust chain?** | `validationOptions.CheckCertificateRevocation = true` を設定し、必要に応じてカスタム `CertificateStore` を提供して信頼できるルート証明書を含めます。 | +| **What if I need to support timestamp validation?** | `validationOptions.CheckTimestamp = true` を有効にします。Aspose.PDF が埋め込まれたタイムスタンプトークンを検証します。 | +| **Is there a way to get detailed validation errors?** | `ValidateEx(validationOptions, out ValidationResult result)` を使用します。`result` には各失敗の `ErrorMessage` と `ErrorCode` が含まれます。 | + +## Next steps + +* `document.Signatures` を反復処理して **validate pdf signature** を複数署名に対応させる。 +* 本チュートリアルと **check pdf signature** を組み合わせ、Web API でアップロードされた契約書のリアルタイム検証を提供する。 +* CRL/OCSP チェック、タイムスタンプ検証、カスタム信頼ストアなど、**signature validation options** の詳細機能をさらに掘り下げる。 + +これで、Aspose.PDF を使用した **pdf signature tutorial** が完成です。**validate pdf digital signature** の方法をマスターしたので、コードを自分のワークフローに合わせてカスタマイズしたり、ロギングを追加したり、より大規模な文書処理パイプラインに統合したりしてください。Happy coding! + +## What Should You Learn Next? + +以下のチュートリアルは、本ガイドで示した手法を応用した関連トピックを扱っています。各リソースには完全なコード例とステップバイステップの解説が含まれており、追加の API 機能習得や代替実装アプローチの探求に役立ちます。 + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/japanese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..927d82f9e4 --- /dev/null +++ b/pdf/japanese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: C#でAspose.PDFを使用してPDF署名を検証します。数行のコードでデジタル署名PDFの検証方法とPDF署名の一覧取得方法を学びましょう。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: ja +lastmod: 2026-08-08 +og_description: C# と Aspose.PDF で PDF の署名を検証します。このガイドでは、デジタル署名付き PDF の検証方法、PDF 署名の一覧取得方法、そして破損した署名の効率的な処理方法を示します。 +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: C#でPDF署名を検証する – 簡単Aspose.PDFチュートリアル +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: C# と Aspose.PDF で PDF 署名を検証する完全ガイド +url: /ja/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で Aspose.PDF を使用した PDF 署名の検証 – 完全ガイド + +.NET アプリケーションで **PDF 署名を検証** する必要がある場合、このガイドでは Aspose.PDF を使った簡潔な方法をご紹介します。**デジタル署名 PDF の検証**、**PDF 署名の一覧取得**、そして数行のコードで改ざんされた署名を検出する方法を学べます。 + +チュートリアルでは、ライブラリのインストールから、署名がないドキュメントや暗号化された PDF などのエッジケースの処理まで網羅しています。最後まで読めば、任意の C# プロジェクトに署名検証を組み込み、受信 PDF の真正性を保証できるようになります。 + +**前提条件** + +- .NET 6.0 以降(コードは .NET Framework 4.6+ でも動作します)。 +- C# と Visual Studio(またはお好みの IDE)に関する基本的な知識。 +- Aspose.PDF for .NET のライセンス(評価用の無料トライアルでも可)。 + +上記を満たしていれば、PDF 署名の検証を開始する準備が整っています。 + +## PDF 署名の検証 – プロジェクトのセットアップ + +1. **Aspose.PDF NuGet パッケージを追加** + パッケージ マネージャ コンソールで次を実行します。 + + ```bash + Install-Package Aspose.PDF + ``` + + これにより `Aspose.Pdf` アセンブリとその依存関係がプロジェクトに追加されます。 + +2. **必要な名前空間をインポート** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` は後で使用する `Any` 拡張メソッドを提供し、`Aspose.Pdf` には `Document` と `Signature` クラスが含まれます。 + +## PDF ドキュメントの読み込み + +最初の実装ステップは、検査対象の PDF を開くことです。Aspose.PDF はファイルをメモリに読み込み、署名を照会できるようにします。 + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **この重要性** – `using` ブロック内でドキュメントをロードすることで、ファイルハンドルが速やかに解放され、長時間稼働するサービスでのファイルロック問題を防止します。 + +## PDF 署名の一覧取得 + +署名を検証する前に、何個の署名が存在するかを確認したくなるでしょう。このステップでは **PDF 署名の一覧取得** 機能を示します。 + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**解説** + +- `document.Signatures` は `Signature` オブジェクトのコレクションを返します。 +- `Count` は署名の数を示します。 +- 各 `Signature` は `Id`、`SignatureType`、`Reason` などのメタデータを公開しており、監査ログに有用です。 + +**エッジケース** – PDF に署名が全くない場合、`Count` は `0` となりループは実行されません。次のように優雅に処理できます。 + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## デジタル署名 PDF の検証 – 改ざん署名の検出 + +署名を列挙できたら、次は **PDF 署名の検証** の本質的な作業です。Aspose.PDF の `IsCompromised` プロパティは、署名の暗号ハッシュがドキュメント内容と一致しなくなったときに `true` を返します。 + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**動作原理** + +- `Signature.IsCompromised` は埋め込まれた証明書チェーンを用いて完全な暗号検証を行います。 +- `Any` LINQ 演算子は最初に見つかった改ざん署名で処理を止めるため、署名が多数ある文書でも効率的です。 + +### 複数署名を個別に処理する方法 + +どの署名が失敗したかを特定したい場合は、`Any` の代わりにループで列挙します。 + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**プロのコツ:** 検証結果を `sig.Id` と共にデータベースに保存し、後でフォレンジック分析に活用しましょう。 + +## 結果の出力とエッジケースの考慮 + +以下は、上記手順をすべて組み合わせた完全な実行可能プログラムです。PDF を読み込み、すべての署名を一覧表示し、検証し、結果を明確に出力します。 + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**期待される出力(有効な署名の場合)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**期待される出力(改ざんされた署名の場合)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### よくある落とし穴と回避策 + +| 落とし穴 | 解決策 | +|---------|----------| +| PDF がパスワード保護されている | `document.Encrypt.Decrypt(password)` でパスワードを渡してから `Signatures` にアクセスします。 | +| Aspose.PDF のライセンスが設定されていない | `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` を使用して評価版の透かしを除去します。 | +| 大容量 PDF によるメモリ使用量の増大 | ファイル全体を読み込む代わりにストリーミングモード (`Document.Load(stream)`) で処理します。 | + +## 結論 + +これで C# と Aspose.PDF を使用した **PDF 署名の検証** 方法、**デジタル署名 PDF の検証**、そして **PDF 署名の一覧取得** がマスターできました。完全なサンプルは、ドキュメントの読み込み、署名の列挙、各署名の改ざんチェック、典型的なエッジケースの処理を示しています。 + +次に試すべきステップ: + +- **タイムスタンプトークンの検証** – 証明書が失効する前に署名が作成されたことを確認。 +- **署名者証明書の抽出** (`sig.Certificate`) – カスタム信頼ストアでの検証に利用。 +- **ASP.NET Core との統合** – 検証に失敗したアップロード PDF を自動的に拒否。 + +複数署名やカスタム検証ロジック、他の PDF ライブラリの使用など、自由に実験してみてください。このガイドが役立ったら、チームと共有したり、コメントで独自のヒントを追加してください。 + +## 次に学ぶべきこと + +以下のチュートリアルは、本ガイドで示したテクニックを基にした関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全なコード例が含まれており、API の追加機能習得や代替実装アプローチの探求に役立ちます。 + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/japanese/net/text-operations/_index.md index adb8d7eedb..a91c841179 100644 --- a/pdf/japanese/net/text-operations/_index.md +++ b/pdf/japanese/net/text-operations/_index.md @@ -164,6 +164,8 @@ Aspose.PDF Net のコードチュートリアル ### [Aspose.PDF for .NET を使用してタグ付き PDF のテキストにスタイルを設定する | アクセシビリティと美観に優れた PDF 作成ガイド](./style-text-tagged-pdfs-aspose-pdf-net/) Aspose.PDF for .NET を使って、タグ付き PDF ドキュメント内のテキストにスタイルを設定する方法を学びましょう。このガイドでは、インストール、テクニック、そしてアクセシビリティを向上させるための実践的な応用例を解説します。 +### [Aspose.Pdf.AI を使用して PDF を要約する方法 – ガイド](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## 追加リソース - [Aspose.PDF for Net ドキュメント](https://docs.aspose.com/pdf/net/) diff --git a/pdf/japanese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/japanese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..5a1de45419 --- /dev/null +++ b/pdf/japanese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf.AIでPDFを要約する方法 – AIを使ってPDFを要約し、PDF要約を生成し、要約をPDFとして保存する方法を学びます。完全なコードとベストプラクティス。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: ja +lastmod: 2026-08-08 +og_description: Aspose.Pdf.AI を使用して PDF を要約する方法。このチュートリアルでは、AI で PDF を要約し、PDF の要約を生成し、C# + の数行で要約を PDF として保存する方法を示します。 +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Aspose.Pdf.AIでPDFを要約する方法 – ステップバイステップガイド +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Aspose.Pdf.AIでPDFを要約する方法 – ガイド +url: /ja/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Pdf.AI を使用した PDF の要約方法 – ガイド + +PDF を **迅速かつ確実に要約**したい場合、AI モデルに重い処理を任せることができます。このチュートリアルでは、AI を使って PDF を要約し、PDF 要約を生成し、Aspose.Pdf.AI SDK for .NET を使用して要約を PDF として保存する方法をステップバイステップで示します。完全に実行可能なサンプルと、各行の説明が含まれているので、独自のプロジェクトに合わせてソリューションをカスタマイズできます。 + +このガイドで取り上げる内容: + +* ソースフォルダーと API キーの準備 +* モデルと通信する `OpenAIClient` の作成 +* 温度やドキュメントパスなどの要約オプションの設定 +* `SummaryCopilot` を構築し、非同期で要約テキストを取得 +* 生成された要約を PDF ファイルに保存 + +OpenAI エンドポイント以外の外部サービスは不要で、コードは .NET 6+ と Aspose.Pdf.AI 23.7(以降)で動作します。 + +## 前提条件 + +* **.NET 6 SDK**(またはそれ以降の .NET バージョン) +* **Aspose.Pdf.AI for .NET** – NuGet でインストール: `dotnet add package Aspose.Pdf.AI` +* 使用したいモデル(例: `gpt‑4o`)へのアクセス権を持つ **OpenAI API キー** +* 要約したい PDF ファイル(例では `SampleDocument.pdf` を使用) + +`dataDirectory` で指定するフォルダーが存在し、アプリケーションに読み書き権限があることを確認してください。 + +## 手順 1: プロジェクト構成の設定 + +コンソールプロジェクトを作成するか、既存の .NET アプリにコードを組み込みます。最小構成の `Program.cs` は以下の通りです: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### この構成が重要な理由 + +* **`await using`** は `OpenAIClient` を自動的に破棄し、HTTP 接続を解放します。 +* **`Path.Combine`** は OS に依存しないパスを生成し、Windows と Linux 間のバグを防止します。 +* **Temperature** は創造性を制御し、`0.5` はバランスの取れた事実ベースの要約を提供します。 +* **`GetSummaryAsync`** はプレーンテキストを返し、`SaveSummaryAsync` はフォントとレイアウトを保持した正しい PDF を作成します。 + +## 手順 2: 要約オプションの理解 + +`OpenAISummaryCopilotOptions` クラスを使用すると、要約プロセスを細かく調整できます: + +| オプション | 目的 | 典型的な値 | +|--------|------|------------| +| `WithTemperature(double)` | ランダム性を制御します。`0.0` = 決定的、`1.0` = 非常に創造的。 | ビジネス文書では `0.3‑0.7` | +| `WithDocument(string)` | ソース PDF のパス。読み取り可能なファイルである必要があります。 | 任意の絶対パスまたは相対パス | +| `WithPrompt(string)` *(任意)* | モデルに指示を与えるカスタムプロンプト。 | “150語で主要な所見を要約してください。” | + +**大容量 PDF**(10 MB 超やページ数が多い場合)は、トークン上限エラーを回避するために、要約前に文書を小さなチャンクに分割することを検討してください。SDK は自動でチャンク化しないため、`Aspose.Pdf` の `PdfDocument` を使ってページを抽出し、1 ページずつ処理できます。 + +## 手順 3: コードを実行し出力を確認 + +1. `SampleDocument.pdf` を `Data` フォルダーに配置します。 +2. `"YOUR_API_KEY"` を実際の OpenAI キーに置き換えます。 +3. `dotnet run` を実行します。 + +コンソールに以下の 2 つのセクションが表示されるはずです: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +任意の PDF ビューアで `Summary_out.pdf` を開くと、同じ要約テキストがデフォルトフォントで整形されて表示されます。SDK がテキストを標準的な PDF ページとして埋め込むため、PDF は完全に検索可能です。 + +## 手順 4: よくあるバリエーションとエッジケースの対処 + +### 文書の一部だけを要約する + +特定の章だけを **summarize pdf with ai** したい場合は、まずその範囲を抽出します: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +その後、`WithDocument` を `Chapter5.pdf` に指定します。 + +### 要約の長さを調整する + +カスタムプロンプトを追加して長さをコントロールできます: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API エラーの処理 + +ネットワーク障害やクォータ上限により `Aspose.Pdf.AI.Exceptions.AIException` がスローされます。呼び出しを `try / catch` ブロックでラップしてください: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### カスタムレイアウトで要約を保存する + +`SaveSummaryAsync` はプレーンテキストを書き込みます。PDF にタイトルやヘッダー、ブランディングを追加したい場合は、新しい `PdfDocument` を作成し、要約を手動で挿入します: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## 手順 5: パフォーマンスのヒントとベストプラクティス + +* **`OpenAIClient` を再利用** すると、同一プロセス内で複数の要約を行う際にクライアント生成コストを削減し、内部の `HttpClient` 再利用でソケット枯渇を防げます。 +* ソース PDF が変更されない場合は **要約結果をキャッシュ** し、テキストをデータベースに保存して API 呼び出しをスキップできます。 + +## 次に学ぶべきことは? + +以下のチュートリアルは、本ガイドで示した手法を応用した関連トピックを扱っています。各リソースには、ステップバイステップの解説と完全な動作サンプルが含まれており、追加の API 機能を習得したり、独自プロジェクトで代替実装アプローチを検討したりするのに役立ちます。 + +- [Aspose.PDF for .NET を使用した特定ページの抽出と保存 – 包括的ガイド](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Aspose.PDF .NET を使用した PDF 添付ファイルの抽出と保存 – 包括的ガイド](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Aspose.PDF .NET で HTML を PDF に変換 – 完全ガイド](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/conversion-export/_index.md b/pdf/korean/net/conversion-export/_index.md index a2361bd42f..2fb3b237d8 100644 --- a/pdf/korean/net/conversion-export/_index.md +++ b/pdf/korean/net/conversion-export/_index.md @@ -84,7 +84,7 @@ Aspose.PDF for .NET을 사용하여 PDF 문서를 HTML 형식으로 변환하는 Aspose.PDF .NET을 사용하여 PDF 문서를 고품질 PNG 이미지로 변환하는 방법을 알아보고, 글꼴 힌팅을 통해 선명한 텍스트 렌더링을 보장합니다. ### [Aspose.PDF for .NET을 사용하여 PDF를 PPTX로 변환: 단계별 가이드](./convert-pdf-to-pptx-aspose-dotnet-guide/) -Aspose.PDF for .NET을 사용하여 PDF 문서를 PowerPoint 프레젠테이션으로 효율적으로 변환하는 방법을 알아보세요. 이 단계별 가이드에서는 기본 변환, 이미지 슬라이드와 같은 고급 기능, 진행률 추적 등을 다룹니다. +Aspose.PDF for .NET을 사용하여 PDF 문서를 PowerPoint 프레젠테이션으로 효율적으로 변환하는 방법을 알아보세요. 이 단계별 가이드는 기본 변환, 이미지 슬라이드와 같은 고급 기능, 진행률 추적 등을 다룹니다. ### [Aspose.PDF for .NET을 사용하여 PDF를 SVG로 변환: 단계별 가이드](./aspose-pdf-net-pdf-to-svg-conversion/) Aspose.PDF for .NET을 사용하여 PDF를 SVG로 변환하는 방법을 알아보세요. 이 종합 가이드에서는 설정, 변환 단계 및 최적화 팁을 다룹니다. @@ -165,7 +165,7 @@ Aspose.PDF for .NET을 사용하여 EPUB 파일을 PDF로 변환하는 방법을 Aspose.PDF .NET을 사용하여 HTML 문서를 전문가 수준의 PDF로 효율적으로 변환하는 방법을 알아보세요. 외부 리소스를 처리하고 복잡한 콘텐츠를 렌더링하는 기술을 알아보세요. ### [Aspose.PDF .NET을 사용하여 대용량 CGM 이미지를 PDF로 변환하는 방법: 포괄적인 가이드](./convert-large-cgm-images-to-pdf-aspose-pdf-net/) -Aspose.PDF .NET을 사용하여 대용량 컴퓨터 그래픽 메타파일(CGM) 이미지를 PDF로 쉽게 변환하는 방법을 알아보세요. 이 가이드에서는 설정, 구현 및 모범 사례를 다룹니다. +Aspose.PDF .NET을 사용하여 대용량 컴퓨터 그래픽 메타파일(CGM) 이미지를 PDF로 쉽게 변환하는 방법을 알아보세요. 이 가이드는 설정, 구현 및 모범 사례를 다룹니다. ### [Aspose.PDF for .NET을 사용하여 MHT 파일을 PDF로 변환하는 방법 - 단계별 가이드](./convert-mht-files-to-pdf-aspose-dotnet/) Aspose.PDF for .NET을 사용하여 MHT 파일을 PDF로 손쉽게 변환하는 방법을 알아보세요. 이 가이드에서는 설정, 변환 단계 및 모범 사례를 다룹니다. @@ -216,7 +216,7 @@ Aspose.PDF .NET을 사용하여 누락된 글꼴을 대체하여 관리하고 PD Aspose.PDF for .NET을 사용하여 PDF를 HTML로 변환하는 방법을 최적화하는 방법을 알아보세요. 효율적인 글꼴 리소스 처리와 원활한 통합에 중점을 둡니다. ### [Aspose.PDF .NET을 사용하여 PDF를 HTML로 변환: 이미지를 외부 PNG로 저장](./pdf-to-html-conversion-external-png-aspose-pdf-net/) -Aspose.PDF for .NET을 사용하여 PDF 문서를 외부 PNG 이미지가 포함된 HTML로 변환하는 방법을 알아보세요. 이 가이드는 레이아웃을 유지하고 웹 성능을 최적화하는 데 도움이 됩니다. +Aspose.PDF .NET을 사용하여 PDF 문서를 외부 PNG 이미지가 포함된 HTML로 변환하는 방법을 알아보세요. 이 가이드는 레이아웃을 유지하고 웹 성능을 최적화하는 데 도움이 됩니다. ### [Aspose.PDF .NET을 사용한 PDF-HTML 변환: 종합 가이드](./aspose-pdf-net-pdf-to-html-conversion/) Aspose.PDF for .NET을 사용하여 PDF-HTML 변환을 완벽하게 구현하세요. 사용자 정의 옵션을 통해 문서 접근성과 참여도를 향상시키세요. @@ -227,6 +227,8 @@ Aspose.PDF Net에 대한 코드 튜토리얼 ### [Aspose.PDF를 사용하여 .NET에서 PDF를 TIFF로 변환: 단계별 가이드](./pdf-to-tiff-conversion-aspose-pdf-net/) Aspose.PDF for .NET을 사용하여 PDF 문서를 TIFF 이미지로 변환하는 방법을 알아보세요. 사용자 정의 색상 심도와 고급 이미지 처리 기술을 익혀보세요. +### [Aspose.PDF 로 PDF를 HTML로 저장하기 – 단계별 가이드](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/korean/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..3a60535e16 --- /dev/null +++ b/pdf/korean/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-08 +description: C#에서 Aspose.PDF를 사용하여 PDF를 HTML로 저장합니다. PDF를 HTML로 변환하는 방법, 래스터 이미지를 + 건너뛰는 방법, 일반적인 엣지 케이스를 처리하는 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: ko +lastmod: 2026-08-08 +og_description: Aspose.PDF를 사용하여 PDF를 HTML로 저장합니다. 이 가이드는 PDF를 HTML로 변환하고, 래스터 이미지를 + 건너뛰며, 일반적인 함정을 피하는 방법을 보여줍니다. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Aspose.PDF로 PDF를 HTML로 저장하기 – 완전 C# 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Aspose.PDF로 PDF를 HTML로 저장하기 – 단계별 가이드 +url: /ko/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF로 PDF를 HTML로 저장 – 단계별 가이드 + +PDF를 **HTML로 빠르게 저장**해야 할 때, 이 튜토리얼은 Aspose.PDF for .NET을 사용하여 정확히 어떻게 하는지 보여줍니다. 문서 뷰어 웹 앱을 만들거나 SEO 친화적인 색인을 위해 보고서를 내보내는 경우, PDF를 HTML로 변환하면서 래스터 이미지에 대한 세밀한 제어를 제공하는 완전한 실행 가능한 솔루션을 확인할 수 있습니다. + +주요 작업 외에도 **aspose pdf html conversion** 옵션을 다루어 래스터 이미지를 건너뛰고, CSS 처리를 조정하며, 대용량 문서를 효율적으로 관리하는 방법을 설명합니다. 이 가이드를 마치면 .NET 프로젝트에 바로 넣을 수 있는 자체 포함 프로그램을 얻게 됩니다. + +## Prerequisites + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +* .NET 6.0 SDK 이상 (코드는 .NET Core 및 .NET Framework에서도 동작) +* Visual Studio 2022 또는 C#를 지원하는 IDE +* Aspose.PDF for .NET 라이선스 (무료 체험판으로 평가 가능) +* 코드에서 참조할 수 있는 폴더에 `report.pdf` 파일이 있어야 합니다 + +`Aspose.Pdf` 외에 추가 NuGet 패키지는 필요하지 않습니다. + +## Step 1: Install the Aspose.PDF NuGet package + +프로젝트 폴더에서 터미널을 열고 다음을 실행합니다: + +```bash +dotnet add package Aspose.Pdf +``` + +이 패키지는 **convert pdf to html** 작업에 사용되는 `Document` 클래스와 `HtmlSaveOptions` 타입을 포함하는 `Aspose.Pdf` 네임스페이스를 추가합니다. + +## Step 2: Create a console project and add using directives + +콘솔 애플리케이션이 아직 없으면 새로 만들세요: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +그런 다음 `Program.cs`를 열고 필요한 네임스페이스를 추가합니다: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +이 지시문을 통해 핵심 PDF API와 **aspose convert pdf html** 프로세스를 제어하는 HTML 저장 옵션에 접근할 수 있습니다. + +## Step 3: Load the PDF document + +첫 번째 실행 라인은 소스 PDF를 `Aspose.Pdf.Document` 객체로 읽어들입니다. 이 객체는 메모리 내 전체 PDF 파일을 나타내며 저장, 편집, 내용 추출 메서드를 제공합니다. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*왜 중요한가*: 문서를 한 번만 로드하면 특히 대용량 PDF의 경우 메모리 사용량을 예측 가능하게 유지합니다. 파일을 찾을 수 없으면 Aspose가 `FileNotFoundException`을 발생시키므로 경로가 정확한지 확인하세요. + +## Step 4: Configure HTML save options + +`HtmlSaveOptions`를 사용하면 PDF 변환 방식을 세밀하게 조정할 수 있습니다. 이 튜토리얼에서는 출력 파일을 가볍게 유지하기 위해 래스터 이미지를 건너뛰지만, 필요에 따라 `EmbedAll` 모드로 변경할 수 있습니다. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**핵심 포인트**: + +* `RasterImagesSavingMode.Skip`은 변환 중에 비트맵 이미지(JPEG, PNG)를 무시하도록 Aspose에 지시합니다. HTML 뷰에 스캔 페이지가 필요 없는 경우에 이상적입니다. +* 이미지를 별도 파일로 저장하려면 `EmbedAll` 또는 `External`로 전환할 수 있습니다. +* `ResourcesFolder` 속성은 이미지가 외부에 저장될 때만 의미가 있습니다. + +## Step 5: Save the document as HTML + +이제 구성된 옵션을 사용해 HTML 파일을 디스크에 씁니다. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +이 호출이 완료되면 `report.html`에 원본 PDF의 텍스트 내용, 벡터 그래픽 및 레이아웃이 보존되지만 래스터 이미지는 포함되지 않습니다. 브라우저에서 파일을 열어 결과를 확인할 수 있습니다. + +## Expected output + +Chrome이나 Edge에서 `report.html`을 열면 다음과 같이 표시됩니다: + +* 모든 제목, 단락 및 벡터 도형이 올바르게 렌더링됩니다. +* 래스터 이미지에 대한 `` 태그가 없습니다(`Skip` 모드 때문). +* 선택한 옵션에 따라 인라인 또는 별도 스타일시트 형태의 깔끔하고 최소한의 CSS가 포함됩니다. + +이미지가 생략되었는지 확인하려면 페이지 소스(`Ctrl+U`)를 검사하세요. `` 항목이 없음을 확인할 수 있습니다. + +## Step 6: Handle common edge cases + +### 6.1 Large PDFs (> 100 MB) + +매우 큰 파일의 경우 스트리밍을 활성화해 메모리 부담을 줄입니다: + +```csharp +htmlOpts.Streaming = true; +``` + +스트리밍은 HTML 청크를 직접 디스크에 기록하므로 전체 문서를 메모리에 보관하지 않아도 됩니다. + +### 6.2 Password‑protected PDFs + +소스 PDF가 암호화된 경우 저장하기 전에 비밀번호를 제공하세요: + +```csharp +doc.Decrypt("yourPassword"); +``` + +복호화 없이 저장을 시도하면 `InvalidPasswordException`이 발생합니다. + +### 6.3 Unicode characters + +Aspose.PDF는 Unicode 글꼴을 자동으로 포함하지만, 일관된 렌더링을 위해 특정 글꼴을 강제 지정할 수 있습니다: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Custom file naming for multiple pages + +각 PDF 페이지를 별도의 HTML 파일로 만들고 싶다면 다음을 설정합니다: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +이렇게 하면 `report_page_1.html`, `report_page_2.html` 등으로 파일이 생성되어 웹 애플리케이션에서 페이지네이션에 활용하기 좋습니다. + +## Full, runnable example + +아래는 앞서 논의한 모든 단계를 포함한 완전한 프로그램입니다. `Program.cs`에 복사하고 경로를 조정한 뒤 `dotnet run`을 실행하세요. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**검증**: 실행 후 콘솔에 성공 메시지가 출력됩니다. 생성된 HTML 파일을 브라우저에서 열어 텍스트와 벡터 그래픽이 올바르게 표시되고 래스터 이미지가 생략되었는지 확인하세요. + +## Pro tips and pitfalls + +* **Pro tip**: 나중에 래스터 이미지가 필요하면 `RasterImagesSavingMode`를 `External`로 바꾸고 `ResourcesFolder`를 설정하세요. 이렇게 하면 추출된 비트맵이 들어 있는 `images` 하위 폴더가 생성됩니다. +* **Watch out for**: 스캔 이미지에 크게 의존하는 PDF에 기본 `Skip` 모드를 사용하면 해당 이미지가 있는 영역이 빈칸으로 표시됩니다. 문서 샘플을 대표적으로 테스트하세요. +* **Performance tip**: 여러 문서를 변환할 때 동일한 `HtmlSaveOptions` 인스턴스를 재사용하면 객체 생성 오버헤드를 줄일 수 있습니다. +* **Version check**: 여기서 보여준 API는 Aspose.PDF for .NET 버전 23.9 이상에서 동작합니다. 이전 버전에서는 `HtmlSaveOptions.RasterImagesSavingMode` 열거형 이름이 약간 다를 수 있습니다. + +## Conclusion + +이제 Aspose.PDF를 사용해 **PDF를 HTML로 저장**하는 방법, 래스터 이미지 처리를 제어하는 방법, 대용량 파일, 비밀번호 보호, 페이지별 HTML 출력 등 일반적인 문제를 해결하는 방법을 알게 되었습니다. 이 완전한 솔루션을 통해 어떤 C# 애플리케이션에도 PDF‑to‑HTML 변환을 자신 있게 통합할 수 있습니다. + +### What’s next? + +* **aspose pdf html conversion**을 탐색해 글꼴을 포함하고 CSS를 커스터마이즈하세요. +* 이 변환을 웹 API와 결합해 필요 시 HTML을 제공하도록 하세요. +* 반대 방향도 시도해 보세요—**convert pdf to html** 후 다시 PDF로 변환해 라운드‑트립 정확성을 검증합니다. + +옵션을 자유롭게 실험하고, 결과를 댓글이나 Aspose 포럼에 공유해 주세요. Happy coding! + +## What Should You Learn Next? + +다음 튜토리얼은 이 가이드에서 다룬 기술을 기반으로 하며, 추가 API 기능을 마스터하고 프로젝트에 적용할 수 있는 대체 구현 방법을 단계별로 설명하는 완전한 코드 예제를 포함합니다. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/korean/net/digital-signatures/_index.md index b7d4931cd4..2fc6afea29 100644 --- a/pdf/korean/net/digital-signatures/_index.md +++ b/pdf/korean/net/digital-signatures/_index.md @@ -53,6 +53,9 @@ Aspose.PDF for .NET을 사용하여 PDF 파일의 디지털 서명을 확인하 ### [C#에서 PDF 서명 검증 – 디지털 서명 PDF 검증을 위한 완전 가이드](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) C#를 사용하여 PDF 파일의 디지털 서명을 검증하는 방법을 단계별로 안내합니다. +### [Aspose.PDF로 PDF 검증하기 – C#에서 PDF 서명 유효성 확인](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +C#를 사용해 PDF 서명의 유효성을 검사하는 방법을 단계별로 안내합니다. + ### [PDF 문서 로드 C# – PDF/X‑4로 변환 및 서명 목록 보기](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) C#을 사용해 PDF 문서를 로드하고 PDF/X‑4 형식으로 변환한 뒤, 서명 목록을 추출하는 방법을 단계별로 안내합니다. diff --git a/pdf/korean/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/korean/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..307af13059 --- /dev/null +++ b/pdf/korean/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF를 사용하여 PDF를 검증하고 PDF 디지털 서명을 검증하는 방법. 단계별 가이드를 따라 PDF 서명을 빠르게 + 확인하세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: ko +lastmod: 2026-08-08 +og_description: Aspose.PDF를 사용하여 PDF를 검증하는 방법. PDF 디지털 서명을 검증하고 C# 코드 몇 줄로 PDF 서명 + 유효성을 확인하는 방법을 배워보세요. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: PDF 검증 방법 – Aspose.PDF를 사용하여 C#에서 PDF 서명 유효성 확인 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Aspose.PDF를 사용하여 PDF 검증하기 – C#에서 PDF 서명 유효성 확인 +url: /ko/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF로 PDF 검증하기 – C#에서 PDF 서명 유효성 확인 + +디지털 서명이 포함된 PDF 파일을 **검증하는 방법**이 필요하다면, 이 튜토리얼은 완전한 솔루션을 보여줍니다. PDF를 로드하고, 인증서 검증기를 생성하며, Aspose.PDF for .NET을 사용해 PDF 서명 유효성을 확인하는 방법을 배울 수 있습니다. + +PDF 디지털 서명을 검증하는 것은 규정 준수, 청구서 발행 및 안전한 문서 교환을 위해 흔히 요구되는 작업입니다. 이 가이드를 끝까지 따라오면 서명된 PDF가 신뢰할 수 있는지 자신 있게 확인할 수 있게 되고, 누락된 인증서나 다중 서명과 같은 일반적인 예외 상황을 처리하는 방법도 이해하게 됩니다. + +## Prerequisites + +시작하기 전에 다음이 준비되어 있는지 확인하세요: + +- .NET 6.0 이상이 설치되어 있음 +- Visual Studio 2022와 같은 IDE(또는 C#를 지원하는 편집기) +- **Aspose.PDF for .NET** 라이선스 사본(평가용 무료 체험판 사용 가능) +- 서명된 PDF 파일(`signed.pdf`) 및 서명이 개인 CA에 의존하는 경우 해당 신뢰할 수 있는 인증서(`trustedCertificate.pfx`) + +`Aspose.PDF` 외에 추가 NuGet 패키지는 필요하지 않습니다. + +## Step 1: Install Aspose.PDF + +프로젝트 폴더에서 터미널을 열고 다음을 실행합니다: + +```bash +dotnet add package Aspose.PDF +``` + +이 명령은 최신 Aspose.PDF 라이브러리를 추가합니다. 이 라이브러리에는 이후에 사용할 `Document`와 `CertificateValidator` 클래스가 포함되어 있습니다. + +## Step 2: Load the PDF document + +프로그래밍 방식으로 **PDF를 로드하는 방법**을 수행할 때 가장 먼저 하는 작업이 PDF 로드입니다. `Document` 생성자는 파일 경로, 스트림 또는 바이트 배열을 받아들입니다. 전체 경로를 사용하면 예제가 명확해집니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**왜 중요한가:** `Document` 객체는 메모리 내에 전체 PDF 파일을 나타냅니다. 파일을 로드하지 않으면 **PDF 서명** 데이터를 확인하는 데 필요한 `Signatures` 컬렉션에 접근할 수 없습니다. + +## Step 3: Prepare the certificate validator + +디지털 서명은 서명 인증서가 신뢰하는 루트 인증서까지 체인될 때만 신뢰됩니다. `CertificateValidator`를 사용하면 Aspose.PDF가 신뢰할 수 있는 인증서 저장소나 특정 PFX 파일을 가리키도록 할 수 있습니다. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +PDF가 Windows에서 이미 신뢰하는 공용 CA를 사용한다면 `certPath`를 생략하고 기본 생성자로 `CertificateValidator`를 인스턴스화하면 됩니다. 내부 PKI 환경에서는 사용자 지정 PFX를 제공하는 것이 유용합니다. + +## Step 4: Validate the first digital signature + +PDF에는 여러 개의 서명이 포함될 수 있습니다. 여기서는 간단히 첫 번째 서명(`Signatures[0]`)을 검증합니다. `Validate` 메서드는 서명이 암호학적으로 온전하고 **서명 인증서가 신뢰되는 경우** `true`를 반환합니다. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**내부 동작:** +- 메서드는 서명된 콘텐츠의 해시를 서명 값과 비교합니다. +- 제공된 검증기를 사용해 인증서 체인을 구축합니다. +- 검증기가 설정되어 있으면 폐기 상태(CRL/OCSP)도 평가합니다. + +### Handling multiple signatures + +PDF에 서명이 하나 이상 포함되어 있다면 `Signatures` 컬렉션을 순회합니다: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +이 패턴을 사용하면 각 페이지에서 **PDF 서명**을 확인하고 개별 결과를 보고할 수 있습니다. + +## Step 5: Output the validation result + +마지막으로 결과를 콘솔에 출력합니다. 실제 서비스 코드에서는 결과를 로그에 남기거나 서명이 유효하지 않을 경우 예외를 발생시킬 수 있습니다. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +또는 + +``` +Invalid +``` + +메시지는 `Validate`가 반환한 부울 값에 따라 달라집니다. “Invalid” 결과는 문서가 변조되었거나, 인증서를 신뢰할 수 없거나, 서명 인증서가 만료되었음을 나타낼 수 있습니다. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +`Invalid`가 반환되고 서명이 신뢰되어야 한다고 판단되면, `CertificateValidator`에 올바른 루트 인증서가 제공되었는지 확인하세요. 여러 루트를 사용할 경우 `X509Certificate2Collection`을 받는 오버로드를 사용합니다. + +### 2. Signature with external references +일부 서명은 외부 콘텐츠(예: 첨부 파일)를 포함합니다. 외부 리소스에 접근할 수 없는 경우 해시 검증이 실패합니다. + +### 3. Time‑stamp validation +서명에 타임스탬프 토큰이 포함될 수 있습니다. 이를 검증하려면 검증기를 구성해 타임스탬프 인증기관(TSA) 인증서를 확인하도록 설정합니다: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +수백 페이지에 달하는 대용량 PDF를 로드하면 메모리를 많이 차지합니다. 서명 데이터만 필요하다면 `PdfFileEditor`를 사용해 페이지를 렌더링하지 않고 서명 사전을 추출하세요. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +`Document` 인스턴스는 스레드 안전하지 않습니다. 여러 PDF를 병렬로 검증해야 할 경우 스레드당 새로운 `Document`를 생성하세요. + +## Full, runnable example + +아래는 파일 경로만 업데이트하면 복사·붙여넣기 후 바로 실행할 수 있는 전체 프로그램입니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**프로그램 실행** 시 각 서명에 대해 한 줄씩 출력되며, PDF가 **PDF 디지털 서명 검증**을 통과했는지 명확히 표시됩니다. + +## Conclusion + +이제 Aspose.PDF for .NET을 사용해 디지털 서명이 포함된 PDF 파일을 **검증하는 방법**을 알게 되었습니다. 튜토리얼에서는 PDF 로드, 인증서 검증기 구성, PDF 서명 유효성 확인, 다중 서명 처리 및 일반적인 문제 해결 방법을 다루었습니다. + +다음 단계로 **PDF 서명 방법**, **타임스탬프 토큰 추가 방법**, **서명된 콘텐츠 추출 방법** 등을 살펴보세요. 이러한 확장을 통해 C#에서 전체 엔드‑투‑엔드 보안 문서 워크플로를 구축할 수 있습니다. + +--- + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/korean/net/document-conversion/_index.md index c0859ee6d3..955105e837 100644 --- a/pdf/korean/net/document-conversion/_index.md +++ b/pdf/korean/net/document-conversion/_index.md @@ -37,6 +37,7 @@ | [PDF에서 PDFA로](./pdf-to-pdfa/) 이 단계별 튜토리얼을 통해 Aspose.PDF for .NET을 사용하여 PDF 파일을 PDF/A 형식으로 변환하는 방법을 알아보세요. | | [PDF에서 PDFA3b로](./pdf-to-pdfa3b/) | 이 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 PDF 파일을 PDF/A-3B 형식으로 손쉽게 변환하는 방법을 알아보세요. | | [PDF를 PDF/X‑4로 변환하기 – 단계별 ASP.NET PDF 튜토리얼](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Aspose.PDF for .NET을 사용하여 PDF를 PDF/X‑4 형식으로 변환하는 단계별 C# 가이드입니다. | +| [PDFX4 변환 튜토리얼 – PDF 표준 설정 및 Aspose를 사용한 PDF 변환](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Aspose.PDF for .NET을 사용하여 PDF 표준을 설정하고 PDF를 PDF/X‑4로 변환하는 단계별 가이드입니다. | | [PDF를 PNG로 변환하는 글꼴 힌팅](./pdf-to-png-font-hinting/) | Aspose.PDF for .NET을 사용하여 간단한 단계별 가이드로 글꼴 힌팅을 적용하여 PDF를 PNG로 변환하는 방법을 알아보세요. | | [PDF를 PNG로 변환하는 튜토리얼 – C#에서 PDF 페이지를 PNG로 변환](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Aspose.PDF for .NET을 사용하여 PDF 페이지를 PNG 이미지로 변환하는 방법을 단계별로 안내합니다. | | [PDF를 PPT로](./pdf-to-ppt/) | Aspose.PDF for .NET을 사용하여 PDF를 PPT로 변환하는 방법을 단계별 가이드를 통해 알아보세요. 쉽고 효율적이며 프레젠테이션에 적합합니다. | diff --git a/pdf/korean/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/korean/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..d49f8eb44e --- /dev/null +++ b/pdf/korean/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,225 @@ +--- +category: general +date: 2026-08-08 +description: PDF 표준을 PDF/X‑4로 설정하고 Aspose로 PDF를 변환하여 신뢰할 수 있는 형식 변환을 보여주는 pdfx4 변환 + 튜토리얼. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: ko +lastmod: 2026-08-08 +og_description: pdfx4 변환 튜토리얼에서는 PDF 표준을 PDF/X‑4로 설정하고 Aspose를 사용하여 C#에서 신뢰할 수 있는 + PDF 변환을 수행하는 방법을 설명합니다. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 변환 튜토리얼 – PDF 표준 설정 및 Aspose를 사용한 PDF 변환 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 변환 튜토리얼 – PDF 표준 설정 및 Aspose를 사용한 PDF 변환 +url: /ko/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 변환 튜토리얼 – PDF 표준 설정 및 Aspose를 사용한 PDF 변환 + +pdfx4 변환 튜토리얼이 필요하다면, 이 가이드는 PDF 표준을 PDF/X‑4로 설정하고 Aspose를 사용하여 PDF를 변환하는 전체 과정을 안내합니다. 인쇄 준비 파일을 만들거나 장기 보관 규정 준수를 보장하려는 경우, .NET 6 및 이후 버전에서 작동하는 신뢰할 수 있는 **aspose pdf format conversion** 워크플로우를 배우게 됩니다. + +이 튜토리얼은 프로젝트 설정부터 누락된 소스 파일이나 지원되지 않는 기능과 같은 엣지 케이스 처리까지 모든 내용을 다룹니다. 기사 끝까지 읽으면 다운스트림 워크플로우에 사용할 수 있는 PDF/X‑4 준수 파일을 생성하는 독립형 C# 프로그램을 얻게 됩니다. + +## 전제 조건 + +- .NET 6 SDK 또는 최신 버전이 설치되어 있음 ([download here](https://dotnet.microsoft.com/download)) +- 유효한 Aspose.PDF for .NET 라이선스 (무료 체험판으로 테스트 가능) +- Visual Studio 2022, VS Code 또는 .NET 개발을 지원하는 모든 IDE +- 변환하려는 소스 PDF 파일 (알려진 폴더에 배치) + +이 요구 사항은 추가 설정 없이 코드가 실행되도록 보장합니다. + +## 단계 1: 새 .NET 콘솔 프로젝트 만들기 + +터미널을 열고 다음 명령을 실행하여 `PdfX4Converter`라는 콘솔 앱을 스캐폴딩합니다: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Aspose.PDF NuGet 패키지를 추가합니다: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` 패키지는 **convert pdf pdfx4** 작업에 필요한 `Document` 클래스와 `PdfFormatConversionOptions`를 제공합니다. + +## 단계 2: 변환 코드 작성 + +`Program.cs`(또는 새 최상위 구문을 사용하는 경우 `Program.cs`)를 열고 내용을 아래 전체 예제로 교체합니다. 이 코드는 PDF/X‑4로 **set pdf standard**를 설정하고 변환을 수행하며 일반적인 함정에 대한 오류 처리를 포함합니다. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### 각 부분이 중요한 이유 + +- **Argument validation**은 사용자가 파일 경로를 잊어버렸을 때 프로그램이 충돌하는 것을 방지합니다. +- **`Document` loading**은 소스 PDF가 없거나 손상된 경우 명확한 예외를 발생시키며, 이는 견고한 **convert pdf using aspose** 경험에 필수적입니다. +- **`PdfFormatConversionOptions`**는 **set pdf standard**를 수행하는 곳입니다. `PdfStandard.PdfX4`를 할당하면 Aspose가 자동으로 색 공간을 조정하고 필요한 글꼴을 포함하며 필요한 PDF/X‑4 메타데이터를 기록합니다. +- **`FontEmbeddingMode.EmbedAll`**은 소스 PDF에서 사용된 모든 글꼴이 포함되도록 보장하며, 인쇄 준비 PDF에 일반적인 요구 사항입니다. +- **`doc.Convert`**는 실제 **aspose pdf format conversion**을 수행합니다. 이 메서드는 한 번의 호출로 새 파일을 작성하여 워크플로우를 단순화합니다. + +## 단계 3: 변환기 실행 + +프로젝트를 빌드하고 소스 및 대상 경로를 지정하여 실행합니다: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +모든 것이 정상적으로 작동하면 콘솔에 다음이 출력됩니다: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +이제 PDF/X‑4를 지원하는 모든 PDF 뷰어(예: Adobe Acrobat Pro)에서 `output_pdfx4.pdf`를 열어 *File → Properties → Standards*를 통해 준수를 확인할 수 있습니다. + +## 단계 4: PDF/X‑4 준수 확인 (선택 사항) + +프로덕션 파이프라인에서는 출력물을 프로그래밍 방식으로 검증하고 싶을 수 있습니다. Aspose는 `PdfComplianceChecker` 클래스를 제공하며(`Aspose.Pdf` 패키지에 포함) 다음과 같이 사용할 수 있습니다: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +변환 후 이 스니펫을 실행하면 명확한 성공/실패 결과를 얻을 수 있어 자동화된 CI/CD 파이프라인에 유용합니다. + +## 단계 5: 일반적인 함정 및 모범 사례 팁 + +| 문제 | 발생 원인 | 예방 방법 | +|-------|----------------|-----------------| +| 소스 PDF에 글꼴이 누락됨 | 글꼴이 참조되었지만 포함되지 않아 변환 경고가 발생함 | 위와 같이 `FontEmbeddingMode.EmbedAll` 사용 | +| 소스 PDF에 PDF/X‑4에서 허용되지 않는 투명 객체가 포함됨 | PDF/X‑4는 특정 투명 혼합을 허용하지 않음 | 변환 전에 `doc.ProcessTransparentObjects()`로 PDF를 전처리 | +| 대용량 파일이 OutOfMemoryException을 일으킴 | 전체 문서를 메모리에 로드하기 때문 | `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))`를 사용해 소스를 스트리밍 | +| 라이선스가 적용되지 않음 | 체험판 버전은 워터마크를 추가함 | Aspose API를 사용하기 전에 `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` 호출 | + +이 팁을 적용하면 프로덕션 환경에서 원활한 **convert pdf pdfx4** 경험을 보장할 수 있습니다. + +## 단계 6: 튜토리얼 확장 + +기본 **pdfx4 conversion tutorial**을 마스터하면 다음을 탐색할 수 있습니다: + +- **Batch conversion**: 폴더에 있는 PDF들을 순회하며 각각을 PDF/X‑4로 변환합니다. +- **Metadata injection**: 특정 인쇄소에서 요구하는 XMP 메타데이터를 추가합니다. +- **Color profile management**: 변환 전에 `doc.ColorSpace = ColorSpace.DeviceRGB;`를 사용해 ICC 프로파일을 첨부합니다. + +이 모든 확장은 여기서 시연한 동일한 **aspose pdf format conversion** 기반 위에 구축됩니다. + +## 결론 + +이 **pdfx4 conversion tutorial**에서는 PDF/X‑4로 **set pdf standard**를 설정하고, 신뢰할 수 있는 **convert pdf using Aspose**를 수행하며 결과를 검증하는 방법을 보여주었습니다. 이제 더 큰 문서 처리 파이프라인에 통합하거나 독립 실행형 유틸리티로 사용할 수 있는 완전한 실행 가능한 C# 프로그램을 갖게 되었습니다. 배치 처리, 메타데이터 처리 또는 대체 PDF 표준(PDF/A‑2b, PDF/UA) 등을 실험하여 **aspose pdf format conversion**에 대한 전문성을 심화하십시오. + +코딩을 즐기시고 PDF/X‑4 준수 출력이 제공하는 확신을 누리세요! + +## 다음에 배워야 할 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접하게 관련된 주제를 다룹니다. 각 자료는 단계별 설명과 함께 완전한 작동 코드 예제를 포함하여 추가 API 기능을 마스터하고 프로젝트에서 대체 구현 방식을 탐색하도록 돕습니다. + +- [Aspose.PDF .NET을 사용하여 PDF/A를 표준 PDF로 변환하기 : 종합 가이드](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Aspose.PDF for .NET을 사용하여 PDF에 만료 날짜 설정하기 (C# 튜토리얼)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [종합 가이드: Aspose.PDF .NET을 사용하여 PDF를 TIFF로 변환하여 원활한 문서 변환 수행](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/korean/net/document-creation/_index.md b/pdf/korean/net/document-creation/_index.md index 8aeb9dfa40..fb6cdd3545 100644 --- a/pdf/korean/net/document-creation/_index.md +++ b/pdf/korean/net/document-creation/_index.md @@ -78,6 +78,9 @@ Aspose.PDF Net에 대한 코드 튜토리얼 ### [Aspose.PDF를 사용하여 PDF 문서 만들기 – 단계별 가이드](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aspose.PDF를 활용해 PDF 문서를 처음부터 생성하는 방법을 단계별로 안내합니다. +### [C#에서 Aspose.Pdf를 사용하여 PDF 문서 만들기](./create-pdf-document-in-c-with-aspose-pdf/) +Aspose.Pdf를 사용하여 C#에서 PDF 문서를 만드는 방법을 단계별로 안내합니다. + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/korean/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..3d523691e7 --- /dev/null +++ b/pdf/korean/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf를 사용하여 C#에서 PDF 문서를 생성합니다. 빈 페이지 PDF 추가, PDF에 단락 추가, 그리고 정확한 + 좌표로 PDF 텍스트 위치 지정 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: ko +lastmod: 2026-08-08 +og_description: C#에서 PDF 문서를 빠르게 생성합니다. 이 튜토리얼에서는 Aspose.Pdf를 사용하여 빈 페이지 PDF를 추가하고, + PDF에 단락을 삽입하며, 텍스트 위치를 지정하는 방법을 보여줍니다. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: C#에서 Aspose.Pdf로 PDF 문서 만들기 – 완전 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Aspose.Pdf를 사용하여 C#에서 PDF 문서 만들기 +url: /ko/net/document-creation/create-pdf-document-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 문서 만들기 + +프로그램matically **create pdf document**가 필요하다면, 이 가이드는 정확히 어떻게 하는지 보여줍니다. .NET용 Aspose.Pdf를 사용하면 빈 페이지 PDF를 추가하고, PDF에 단락을 삽입하며, 픽셀 단위 정확도로 PDF에 텍스트를 배치할 수 있습니다—모두 몇 줄의 C# 코드로 가능합니다. + +튜토리얼을 마치면 지정한 좌표에 메모가 배치된 완전한 PDF 파일을 얻을 수 있습니다. 외부 도구 없이, 수동 편집 없이—그냥 깔끔하고 재사용 가능한 코드를 .NET 프로젝트에 바로 넣을 수 있습니다. + +## 배울 내용 + +* Aspose.Pdf로 **create pdf document**하는 방법 +* **add blank page pdf**를 올바르게 추가하는 방법 및 페이지가 콘텐츠를 추가하기 전에 존재해야 하는 이유 +* **add paragraph to pdf**하고 사용자 정의 태그를 첨부하는 방법(나중에 추출하거나 스타일링할 때 유용) +* `Position` 클래스를 사용해 **position text in pdf**하는 기술 +* 결과를 디스크에 저장하고 출력물을 검증하는 방법 + +**전제 조건** + +* .NET 6.0 이상 (코드는 .NET Framework 4.7+에서도 작동합니다) +* 유효한 Aspose.Pdf for .NET 라이선스 또는 무료 평가 키 +* Visual Studio 2022 또는 C# 확장이 설치된 VS Code와 같은 IDE + +> **Pro tip:** 무료 평가판을 사용하면 생성된 PDF에 작은 워터마크가 표시됩니다. 라이선스를 등록하면 제거할 수 있습니다. + +## Aspose.Pdf로 pdf 문서 만드는 방법 + +첫 번째 단계는 `Document` 클래스를 인스턴스화하는 것입니다. 이 객체는 전체 PDF 파일을 나타내며 페이지, 리소스 및 저장 옵션에 접근할 수 있게 해줍니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +문서를 생성한다고 해서 아직 디스크에 아무것도 쓰여지는 것은 아닙니다; 메모리 내 표현만 준비됩니다. 이 접근 방식은 API를 빠르고 메모리 효율적으로 유지합니다. + +## Aspose.Pdf를 사용해 빈 페이지 pdf 추가하기 + +PDF에는 콘텐츠를 배치하기 전에 최소 한 페이지가 있어야 합니다. 빈 페이지를 추가하는 것은 단일 메서드 호출로 가능합니다: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` 메서드는 기본 크기(A4)와 방향(세로)으로 페이지를 생성합니다. 다른 크기가 필요하면 `PageSize` 인스턴스를 `Add()`에 전달하면 됩니다. + +## pdf에 단락을 추가하고 메모 설정하기 + +이제 페이지가 존재하므로, 표시할 텍스트를 담은 `Paragraph` 객체를 만들 수 있습니다. 단락에 사용자 정의 태그를 붙일 수도 있는데, 이는 나중에 프로그래밍적으로 요소를 찾거나 스타일을 적용할 때 편리합니다. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### 태그를 사용하는 이유 + +태그는 PDF 요소와 함께 이동하는 메타데이터입니다. 나중에 `Document.FindObject()`로 조회하거나, 접근성·인덱싱을 위해 태그에 의존하는 PDF 처리기에 의해 사용될 수 있습니다. + +## 정확한 좌표로 pdf에 텍스트 배치하기 + +단락의 기본 위치는 페이지 여백의 좌상단입니다. 텍스트를 정확한 위치로 이동하려면 단락 태그의 `Position` 속성을 설정합니다: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +좌표는 포인트 단위(1 point = 1/72 inch)로 측정됩니다. 원점(0,0)은 페이지의 좌하단에 있으며, 대부분의 PDF 렌더링 엔진과 일치합니다. 레이아웃 요구에 맞게 `X`와 `Y` 값을 조정하세요. + +위치를 지정한 뒤, 단락을 페이지 컬렉션에 추가합니다: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## pdf 문서 저장하기 + +마지막으로 메모리 내 PDF를 파일로 기록합니다. 출력 경로, 형식, 심지어 암호화 옵션까지 지정할 수 있습니다. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +프로그램이 종료되면 `output.pdf`에 텍스트 **Important note**가 오른쪽 상단 근처(X = 50, Y = 750)에 배치된 단일 페이지가 저장됩니다. PDF 뷰어에서 파일을 열어 배치를 확인하세요. + +![C# Aspose.Pdf로 생성된 PDF 문서(위치 지정된 메모 포함)](https://example.com/images/generated-pdf.png) + +*이미지 대체 텍스트: C# Aspose.Pdf로 생성된 PDF 문서(위치 지정된 메모 포함)* (주요 키워드 포함). + +## 전체 실행 가능한 예제 + +모든 요소를 합치면 다음과 같은 완전한 콘솔 애플리케이션이 됩니다. 복사하고, 빌드하고, 실행해 보세요: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**예상 출력**은 프로그램을 실행했을 때 다음과 같습니다: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +`output.pdf`를 열면 지정한 좌표에 **Important note** 텍스트가 배치된 단일 페이지가 표시됩니다. + +## 일반적인 변형 및 엣지 케이스 + +| 시나리오 | 변경 내용 | 중요 이유 | +|----------|----------------|----------------| +| **다른 페이지 크기** | `pdfDocument.Pages.Add(PageSize.A5)` | 작은 페이지는 파일 크기를 줄이고 모바일 화면에 맞춥니다. | +| **여러 메모** | 문자열 컬렉션을 순회하면서 각 문자열에 대해 `Paragraph`를 생성하고 `Y` 좌표를 증가시킵니다. | 배치형 메모를 일괄 생성할 수 있습니다. | +| **유니코드 문자** | 소스 파일을 UTF‑8로 저장하고 `noteParagraph.Text = "重要なメモ"`를 설정합니다. | Aspose.Pdf는 유니코드를 기본 지원하지만 파일 인코딩이 일치해야 합니다. | +| **암호 보호 PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | 기밀 메모에 보안을 추가합니다. | +| **고해상도 출력** | 콘텐츠를 추가하기 전에 `pdfDocument.PageInfo.Width`와 `Height`를 더 큰 값으로 설정합니다. | 대형 포맷 PDF 인쇄에 유용합니다. | + +## 프로덕션 사용 팁 + +* 많은 PDF를 한 번에 생성할 경우 `Document` 인스턴스를 재사용해 GC 부담을 줄이세요. +* 루프에서 여러 문서를 만들 경우 `pdfDocument.Dispose()`로 객체를 해제하세요. +* **좌표 검증**: `Y` 값이 페이지 높이를 초과하면 텍스트가 잘려 나갑니다. +* 나중에 태그(`/P`)를 통해 메모를 추출해야 하면 `TextFragmentAbsorber`를 사용하세요. + +## 결론 + +이제 Aspose.Pdf로 **create pdf document**, **add blank page pdf**, **add paragraph to pdf**, **add note pdf**, 그리고 **position text in pdf**를 정확히 수행하는 방법을 알게 되었습니다. 완전한 예제는 청결하고 재사용 가능한 워크플로우를 보여주며, 인보이스, 보고서 또는 모든 문서 자동화 시나리오에 확장할 수 있습니다. + +다음으로 **pdf에 이미지 추가**, **Aspose.Pdf로 표 만들기**, **디지털 서명 적용**과 같은 관련 주제를 살펴보세요. 여기서 다룬 핵심 개념을 기반으로 더 복잡한 PDF 생성 작업을 손쉽게 수행할 수 있습니다. + +행복한 코딩 되세요! + +## 다음에 배울 내용 + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 포함해 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용할 수 있도록 돕습니다. + +- [Aspose.PDF로 PDF 문서 만들기 – 페이지, 도형 추가 및 저장](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Aspose.PDF for .NET을 사용해 PDF 끝에 빈 페이지 추가하기 | 단계별 가이드](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/korean/net/images-graphics/_index.md index 95294a4a75..80525e45c1 100644 --- a/pdf/korean/net/images-graphics/_index.md +++ b/pdf/korean/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Aspose.PDF for .NET을 사용하여 이미지가 포함된 접근성 높은 태 ### [Aspose.PDF for .NET을 사용하여 PDF에 투명 사각형을 만드는 방법](./create-transparent-rectangles-aspose-pdf-dotnet/) Aspose.PDF for .NET을 사용하여 알파 투명도가 적용된 사각형을 만들어 PDF 문서를 개선하는 방법을 알아보세요. 이 단계별 가이드를 따라 해 보세요. +### [C#와 Aspose.PDF를 사용한 PDF 불투명도 설정: 완전 가이드](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +PDF에 불투명도를 설정하는 방법을 단계별로 안내합니다. C# 코드 예제로 문서 시각 효과를 향상시키세요. + ### [Aspose.PDF for .NET을 사용하여 PDF 파일에서 이미지를 삭제하는 방법 - 전체 가이드](./delete-images-aspose-pdf-net/) Aspose.PDF for .NET을 사용하여 PDF 파일에서 이미지를 효율적으로 삭제하는 방법을 알아보세요. 이 가이드에서는 설정, 코드 예제, 그리고 모범 사례를 다룹니다. diff --git a/pdf/korean/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/korean/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..963b7d207c --- /dev/null +++ b/pdf/korean/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF를 사용하여 C#에서 PDF 불투명도를 설정하세요 – 몇 줄의 코드만으로 스트로크와 채우기 투명도를 조정하는 + 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: ko +lastmod: 2026-08-08 +og_description: C#에서 PDF 불투명도를 빠르게 설정합니다. 이 가이드는 Aspose.PDF의 그래픽 상태 API를 사용하여 스트로크와 + 채우기 투명도를 수정하는 방법을 보여줍니다. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Aspose.PDF와 함께 C#에서 PDF 불투명도 설정 – 단계별 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: C#와 Aspose.PDF를 사용하여 PDF 투명도 설정 – 완전 가이드 +url: /ko/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 Aspose.PDF로 PDF 불투명도 설정 – 완전 가이드 + +특정 그리기 작업에 대해 **PDF 불투명도 설정**이 필요하다면, 이 튜토리얼에서는 Aspose.PDF for .NET을 사용하여 정확히 수행하는 방법을 보여줍니다. 워터마크, 반투명 오버레이 또는 사용자 정의 그래픽을 만들고 있든, 간결하고 프로덕션에 바로 적용 가능한 접근 방식을 배울 수 있습니다. + +다음 섹션에서는 PDF를 로드하고 그래픽 상태를 편집하며 새로운 불투명도 정의를 추가하고 결과를 저장하는 전체 과정을 다룹니다. 별도의 외부 문서는 필요하지 않으며, 아래 코드와 각 단계에 대한 간단한 설명만 있으면 됩니다. + +## 사전 요구 사항 + +* .NET 6.0 이상 (.NET Framework 4.7+에서도 동작) +* 유효한 Aspose.PDF for .NET 라이선스 (평가용 무료 체험 가능) +* 읽기/쓰기 가능한 폴더에 위치한 입력 PDF 파일 (`input.pdf`) +* Visual Studio 2022 또는 선호하는 C# IDE + +## 단계 1 – PDF 문서 로드 (Aspose.PDF for .NET) + +첫 번째 작업은 기존 PDF를 여는 것입니다. Aspose.PDF는 PDF 파일을 `Document` 클래스로 표현하며, 이를 통해 페이지, 리소스 및 저수준 객체에 완전하게 접근할 수 있습니다. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Why this matters*: 문서를 로드하면 안전하게 수정할 수 있는 메모리 내 모델이 생성됩니다. `using` 문은 작업이 끝난 후 파일 핸들이 자동으로 해제되도록 보장합니다. + +## 단계 2 – 편집하려는 첫 번째 페이지 가져오기 + +불투명도는 페이지별 리소스 사전을 통해 정의됩니다. 여기서는 첫 번째 페이지를 대상으로 하지만, 배치 작업을 위해 `doc.Pages`를 순회할 수도 있습니다. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Why this matters*: 각 페이지는 자체 `Resources` 컬렉션을 가지고 있어 그래픽 상태, 폰트, 이미지 등을 저장합니다. 올바른 페이지를 수정해야 불투명도 효과가 기대한 위치에 나타납니다. + +## 단계 3 – 페이지 리소스 사전 열기 (편집용) + +Aspose.PDF는 파일 구조를 손상시키지 않으면서 저수준 PDF 사전을 조작할 수 있도록 `DictionaryEditor` 도우미를 제공합니다. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Why this matters*: PDF의 COS(Content Object System) 사전을 직접 편집하는 것이 커스텀 그래픽 상태를 삽입하는 유일한 방법입니다. 에디터는 저수준 구문을 추상화하면서 PDF의 유효성을 유지합니다. + +## 단계 4 – 기존 ExtGState 사전 가져오기 + +**ExtGState**(external graphics state) 사전은 불투명도, 블렌드 모드, 선 두께 등을 보관합니다. 사전이 없을 경우, 새 항목을 추가하면 Aspose.PDF가 자동으로 생성합니다. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Why this matters*: `ExtGState` 항목이 없으면 페이지 콘텐츠 스트림에서 커스텀 불투명도를 참조할 수 없습니다. 이 단계는 해당 컨테이너가 존재함을 보장합니다. + +## 단계 5 – 원하는 불투명도로 새로운 그래픽 상태 만들기 + +그래픽 상태는 여러 매개변수의 집합입니다. 불투명도를 위해 `CA`(stroke opacity)와 `ca`(fill opacity)를 설정합니다. 또한 투명 픽셀이 아래 콘텐츠와 어떻게 상호 작용할지 제어하는 블렌드 모드(`BM`)도 지정합니다. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Why this matters*: `CA`와 `ca`는 0(완전 투명)부터 1(완전 불투명)까지 값을 가집니다. 원하는 시각 효과에 맞게 숫자를 조정하세요. 블렌드 모드 `"Normal"`이 가장 일반적이며, 예술적 효과를 위해 `"Multiply"`나 `"Screen"`을 실험해 볼 수 있습니다. + +## 단계 6 – ExtGState 컬렉션에 새로운 그래픽 상태 등록 + +각 그래픽 상태는 고유한 이름(`GS0` 등)을 가져야 합니다. 사전에 우리의 딕셔너리를 추가하고 페이지 리소스를 업데이트합니다. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Why this matters*: 상태에 이름(`GS0`)을 부여하면 페이지 콘텐츠 스트림에서 `gs` 연산자를 사용해 나중에 참조할 수 있습니다. 여러 불투명도 레벨이 필요하면 추가 항목(`GS1`, `GS2`, …)을 만들면 됩니다. + +## 단계 7 – 그래픽 상태를 그리기 명령에 적용 (선택 사항) + +기존 콘텐츠에 즉시 불투명도를 적용하려면 페이지 콘텐츠 스트림을 편집해야 합니다. 아래 예시는 새로 만든 상태를 사용해 반투명 사각형을 그리는 간단한 예시입니다. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Why this matters*: `gs` 연산자(`SetGraphicsState`)는 PDF 렌더러에게 이후 모든 그리기 명령에 대해 `GS0`에 정의된 불투명도 값을 사용하도록 지시합니다. `grestore`/`gsave` 쌍은 다른 페이지 요소에 영향을 주지 않도록 합니다. + +## 단계 8 – 수정된 PDF 저장 + +마지막으로 업데이트된 문서를 디스크에 기록합니다. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Why this matters*: 저장 단계에서 모든 변경 사항이 최종화되고 새로운 그래픽 상태가 삽입되어, Adobe Acrobat, Chrome 등 모든 뷰어가 의도한 투명도를 올바르게 표시합니다. + +### 예상 결과 + +`output.pdf`를 PDF 뷰어에서 열면, 외곽선은 80 % 불투명하고 채우기는 40 % 불투명한 빨간 사각형이 배경 콘텐츠와 부드럽게 블렌드되는 것을 확인할 수 있습니다. 페이지의 나머지 부분은 변경되지 않습니다. + +## 일반적인 변형 및 엣지 케이스 + +| 상황 | 변경 내용 | 이유 | +|-----------|----------------|--------| +| **다중 불투명도 레벨** | 서로 다른 `CA`/`ca` 값을 가진 추가 그래픽 상태(`GS1`, `GS2`, …)를 생성하고 필요에 따라 참조 | 다양한 요소에 대해 세밀한 제어가 가능 | +| **다른 블렌드 모드** | `BM` 항목에 `"Normal"` 대신 `"Multiply"`, `"Screen"`, `"Overlay"` 등을 사용 | 예술적인 블렌드 효과를 제공 | +| **기존 콘텐츠 스트림에 적용** | 영향을 주고 싶은 특정 그리기 연산자 앞에 `SetGraphicsState` 삽입 | 관련 없는 객체에 불필요한 불투명도가 적용되는 것을 방지 | +| **대용량 PDF** | `foreach (Page p in doc.Pages)` 루프를 사용해 페이지를 순차 처리 | 메모리 사용량을 줄이고 성능 향상 | +| **ExtGState가 없음** | 4단계 코드가 없을 경우 자동으로 생성하므로 별도 처리 필요 없음 | 사전이 존재함을 보장 | + +### 전문가 팁 + +많은 커스텀 그래픽 상태를 추가할 때는 이름을 일관되게(`GS0`, `GS1`, …) 유지하고 각 상태의 목적을 주석 블록에 문서화하세요. 이렇게 하면 협업 프로젝트에서 유지 보수가 훨씬 쉬워집니다. + +## 전체 실행 가능한 예제 + +아래는 복사·붙여넣기 후 바로 실행할 수 있는 전체 프로그램입니다. 모든 단계, 필요한 `using` 지시문 및 주석이 포함되어 있습니다. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +프로그램을 실행하세요, + +## 다음에 배워야 할 내용은? + +다음 튜토리얼은 이 가이드에서 다룬 기술을 기반으로 하는 관련 주제를 다룹니다. 각 리소스는 완전한 코드 예제와 단계별 설명을 제공하여 추가 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용할 수 있도록 돕습니다. + +- [Aspose.PDF for .NET을 사용한 PDF 이미지 배경 설정: 종합 가이드](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Aspose.PDF for .NET을 사용한 PDF 대시 라인 만들기: 단계별 가이드](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF for .NET으로 PDF 맞춤 설정: 페이지 여백 설정 및 선 그리기](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..e5e2a7105c 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에 양식 필드와 페이지를 추가하는 방법을 단계별로 안내합니다. | +| [Aspose.PDF로 PDF 문서 저장 – 완전 가이드](./save-pdf-document-with-aspose-pdf-complete-guide/) | Aspose.PDF for .NET을 사용하여 PDF 문서를 저장하는 전체 과정을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/korean/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..7429307b2d --- /dev/null +++ b/pdf/korean/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF를 사용하여 PDF 문서를 저장하고, PDF에 페이지를 추가하는 방법, PDF 양식 필드를 채우는 방법, + 그리고 양식 필드가 포함된 PDF를 만드는 방법을 하나의 튜토리얼에서 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: ko +lastmod: 2026-08-08 +og_description: Aspose.PDF로 PDF 문서를 저장하고 페이지 추가, PDF 양식 필드 채우기, 양식 필드가 포함된 PDF를 빠르고 + 안정적으로 만드는 방법을 알아보세요. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Aspose.PDF로 PDF 문서 저장 – 단계별 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Aspose.PDF로 PDF 문서 저장 – 완전 가이드 +url: /ko/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF로 PDF 문서 저장 – 완전 가이드 + +대화형 양식 필드가 포함된 **PDF 문서 저장**이 필요하다면, 이 튜토리얼이 정확히 어떻게 하는지 보여줍니다. PDF 페이지 추가, PDF 양식 만들기, PDF 양식 필드 채우기 등을 Aspose.PDF for .NET으로 수행하는 방법을 확인할 수 있습니다. + +다음 섹션에서 배울 내용: + +* 새 PDF에 여러 페이지 추가하기, +* 첫 번째 페이지에 텍스트 박스 양식 필드 만들기, +* 두 번째 페이지에 동일한 필드에 대한 위젯 주석 배치하기, +* 필드 값 설정하기 (PDF 양식 필드 채우기), +* 그리고 마지막으로 **PDF 문서 저장**을 디스크에 저장하기. + +외부 도구가 필요하지 않으며, 완전한 실행 가능한 코드가 포함되어 있습니다. + +## Prerequisites + +* .NET 6.0 이상 (코드는 .NET Framework 4.7.2+에서도 작동합니다). +* 유효한 Aspose.PDF for .NET 라이선스 또는 무료 평가 키. +* Visual Studio 2022 (또는 기타 C# IDE). + +NuGet 패키지를 추가합니다: + +```bash +dotnet add package Aspose.PDF +``` + +## How to add pages PDF + +첫 번째 단계는 빈 PDF를 만든 뒤 필요한 페이지를 추가하는 것입니다. 양식 필드를 정의하기 전에 페이지를 추가하면 레이아웃 좌표가 정확해집니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*왜 중요한가:* 각 `Page` 객체는 인쇄 가능한 캔버스를 나타냅니다. 페이지를 미리 추가하면 나중에 양식 요소를 배치할 때 해당 페이지를 참조할 수 있습니다. + +## How to create PDF form with Aspose.PDF + +PDF 양식은 **필드 정의**(논리적 컨테이너)와 하나 이상의 **위젯 주석**(시각적 표현)으로 구성됩니다. 예제에서는 첫 번째 페이지에 **Comments**라는 이름의 `TextBoxField`를 생성합니다. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*왜 중요한가:* `Rectangle` 좌표는 포인트 단위(1 pt = 1/72 in)로 표현됩니다. 디자인에 맞게 값을 조정하세요. + +## Populate PDF form field + +문서를 저장하기 전에 프로그래밍 방식으로 필드 값을 설정할 수 있습니다. 이것이 **PDF 양식 필드 채우기**의 핵심입니다. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +필드를 나중에(예: 사용자 입력으로) 채워야 한다면 `Save` 호출 전에 `commentsField.Value`에 새 문자열을 할당하면 됩니다. + +## Add a widget annotation for the same field on the second page + +위젯 주석은 양식 필드를 페이지에 표시하게 합니다. 두 번째 위젯을 추가하면 동일한 논리 필드가 두 페이지에 나타나며, **여러 페이지에 걸친 양식 필드가 있는 PDF 만들기**를 보여줍니다. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*왜 중요한가:* `Widgets` 컬렉션은 원하는 만큼의 시각적 표현을 보관할 수 있습니다. 사용자는 어느 페이지에서든 필드와 상호 작용할 수 있으며, 입력된 값은 동기화됩니다. + +## Attach the field to the first page annotations + +양식 필드는 PDF 뷰어가 렌더링할 수 있도록 페이지의 주석 컬렉션에 추가되어야 합니다. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Save PDF document + +이제 양식 정의가 완료되었으니 **PDF 문서 저장**을 원하는 위치에 할 수 있습니다. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +`output.pdf`를 Adobe Acrobat Reader 또는 기타 PDF 뷰어에서 열면 1페이지에 텍스트 박스가, 2페이지에 동일한 박스가 표시됩니다. 어느 쪽에 입력해도 동일한 기본 필드가 업데이트됩니다. + +## Complete, runnable example + +아래는 콘솔 애플리케이션에 복사‑붙여넣기 할 수 있는 전체 프로그램입니다. 수정 없이 컴파일하고 설명된 PDF를 생성합니다. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Expected output:** `output.pdf`라는 파일이 생성되며 두 페이지를 포함합니다. 1페이지에는 좌표 (100, 600)에 “Comments” 라벨이 붙은 텍스트 박스가 표시되고, 2페이지에는 동일한 필드가 (100, 400)에 표시됩니다. 필드는 “Enter your feedback here”로 미리 채워져 있습니다. 어느 페이지에서 텍스트를 변경해도 문서를 다시 저장하면 동일한 값으로 업데이트됩니다. + +## Common questions and edge‑case handling + +| Question | Answer | +|----------|--------| +| *Can I add more than one widget for the same field?* | Yes. Append additional `WidgetAnnotation` objects to `commentsField.Widgets`. Each widget can be placed on any page. | +| *What if I need to set the field’s appearance (font, border, background)?* | Use `commentsField.DefaultAppearance` to specify a font and color, and set `commentsField.Border` properties for line style. | +| *How do I make the field read‑only?* | Set `commentsField.ReadOnly = true;`. The field will still display its value but cannot be edited by the user. | +| *Is it possible to populate the field after the PDF is created?* | Yes. Load the saved PDF with `new Document("output.pdf")`, locate the field via `pdfDocument.Form["Comments"]`, assign a new `Value`, and call `Save` again. | +| *What if the PDF must conform to PDF/A for archiving?* | After building the document, call `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` before saving. | + +## Tips from the field + +* **Pro tip:** Keep the logical field name short and unique; it’s the identifier you’ll use when programmatically filling the form later. +* **Watch out for:** Overlapping widget rectangles. Overlaps cause rendering artifacts in some viewers. +* **Performance note:** Adding many pages or widgets in a tight loop can be optimized by reusing a single `Rectangle` instance and only changing its coordinates. + +## Conclusion + +이제 **PDF 문서 저장**과 완전한 기능을 갖춘 양식 만들기, **PDF 양식 필드 채우기**, 그리고 Aspose.PDF for .NET을 사용한 **PDF 페이지 추가**와 **양식 필드가 있는 PDF 만들기** 방법을 알게 되었습니다. 전체 예제는 문서 생성부터 최종 저장까지의 엔드‑투‑엔드 워크플로우를 보여줍니다. + +다음으로 **체크 박스 추가**, **드롭‑다운 리스트 만들기**, 혹은 **읽기 전용 배포를 위한 양식 플래튼**과 같은 관련 주제를 탐색해 보세요. 각각은 여기서 다룬 원리를 기반으로 하며 PDF 자동화 역량을 확장합니다. + +행복한 코딩 되세요! + +## What Should You Learn Next? + +다음 튜토리얼들은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 주제를 다룹니다. 각 리소스는 단계별 설명과 완전한 코드 예제를 포함하여 추가 API 기능을 마스터하고 프로젝트에 다양한 구현 방식을 적용하도록 돕습니다. + +- [Aspose로 PDF 만들기 – 양식 필드 및 페이지 추가](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Aspose로 PDF 문서 만들기 – 페이지, 텍스트 박스 및 양식 추가](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Aspose.PDF for .NET을 사용하여 PDF 양식 필드 추가 및 추출 방법: 종합 가이드](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/korean/net/programming-with-pdf-pages/_index.md index 5dd6b7053c..18ac3647e6 100644 --- a/pdf/korean/net/programming-with-pdf-pages/_index.md +++ b/pdf/korean/net/programming-with-pdf-pages/_index.md @@ -37,7 +37,8 @@ Aspose.PDF for .NET의 "PDF 페이지 프로그래밍" 설명서는 PDF 파일 | [페이지로 분할](./split-to-pages/) Aspose.PDF for .NET을 사용하여 PDF를 개별 페이지로 쉽게 분할하는 방법을 안내하는 포괄적인 튜토리얼입니다. 단계별 가이드가 포함되어 있습니다. | | [PDF 페이지 크기 업데이트](./update-dimensions/) | 이 포괄적인 단계별 가이드를 통해 Aspose.PDF for .NET을 사용하여 PDF 페이지 크기를 손쉽게 업데이트하는 방법을 알아보세요. | | [PDF 파일의 페이지 내용 확대](./zoom-to-page-contents/) | 이 포괄적인 가이드에서 Aspose.PDF for .NET을 사용하여 PDF 파일의 페이지 내용을 확대/축소하는 방법을 알아보세요. 특정 요구 사항에 맞게 PDF 문서를 향상시키세요. | -| [C#로 PDF에 페이지 번호 추가 – 전체 단계별 가이드](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Aspose.PDF for .NET을 사용하여 C#로 PDF에 페이지 번호를 추가하는 단계별 가이드입니다. | +| [C#로 PDF에 페이지 번호 추가 – 전체 단계별 가이드](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Aspose.PDF for .NET을 사용하여 C#로 PDF에 페이지 번호를 추가하는 단계별 가이드입니다. | +| [Aspose로 베이츠 번호 매기기 PDF 추가 – 단계별 가이드](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Aspose.PDF for .NET을 사용하여 베이츠 번호 매기기를 PDF에 추가하는 단계별 가이드입니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/korean/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2976abd7b5 --- /dev/null +++ b/pdf/korean/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-08 +description: C#에서 Aspose.Pdf를 사용하여 베이츠 번호 매기기 PDF를 추가합니다. 이 튜토리얼에서는 빈 페이지 PDF를 추가하고 + 프로그래밍 방식으로 PDF를 생성하는 방법도 보여줍니다. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: ko +lastmod: 2026-08-08 +og_description: C#에서 Aspose.Pdf를 사용해 베이츠 번호 매기기 PDF를 추가하세요. 빈 페이지 PDF 추가, 프로그래밍 방식으로 + PDF 생성, 그리고 몇 분 안에 최종 문서를 저장하는 방법을 배워보세요. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Aspose로 PDF에 베이츠 번호 매기기 추가 – 완전 C# 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Aspose로 PDF에 베이츠 번호 매기기 – 단계별 가이드 +url: /ko/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose를 사용한 베이츠 번호 매기기 PDF 추가 – 단계별 가이드 + +Aspose.Pdf를 사용한 베이츠 번호 매기기 PDF 추가는 핵심 단계를 이해하면 간단합니다. 빈 페이지 PDF를 추가하거나 프로그래밍 방식으로 PDF를 생성해야 하는 경우에도 이 가이드가 필요한 모든 내용을 다룹니다. + +이 튜토리얼에서는 다음을 수행합니다: + +* 새 PDF 문서를 처음부터 생성합니다. +* 베이츠 번호를 표시할 빈 페이지 PDF를 추가합니다. +* 사용자 정의 접두사가 있는 베이츠 번호 매기기 아티팩트를 구성합니다. +* PDF를 저장하여 번호가 생성된 파일에 표시되도록 합니다. + +끝까지 진행하면 **CASE‑1000**, **CASE‑1001**, …와 같은 베이츠 번호가 포함된 PDF를 생성하는 완전한 C# 콘솔 애플리케이션을 얻게 됩니다 – 이는 법률 및 전자 증거 발견 워크플로우에서 흔히 요구되는 사항입니다. + +## 사전 요구 사항 + +* .NET 6.0 SDK 이상 (코드는 .NET Framework 4.8에서도 작동합니다). +* Visual Studio 2022 또는 C# 호환 IDE. +* 유효한 Aspose.Pdf for .NET 라이선스(또는 무료 평가 키). +* C# 구문에 대한 기본적인 이해. + +> **프로 팁:** 라이선스 없이 코드를 실행하면 Aspose가 출력 PDF에 작은 워터마크를 추가합니다. + +## 단계 1: 프로젝트 설정 및 Aspose.Pdf 가져오기 + +새 콘솔 프로젝트를 만들고 Aspose.Pdf NuGet 패키지를 추가합니다: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +예제에 필요한 `using` 지시문은 다음과 같습니다: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +이 네임스페이스를 통해 이후에 사용되는 `Document`, `Page`, `BatesNumberingArtifact` 클래스를 사용할 수 있습니다. + +## 단계 2: 빈 페이지 PDF 추가 + +베이츠 번호는 페이지에 부착되어야 하므로, 먼저 번호 매기기 아티팩트를 받을 빈 페이지를 생성합니다. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` 클래스는 전체 PDF 파일을 나타내며, `Pages.Add()`는 문서의 페이지 컬렉션 끝에 새 빈 페이지를 삽입합니다. 문서가 비어 있기 때문에 이 호출은 첫 페이지도 생성합니다. + +## 단계 3: 베이츠 번호 매기기 아티팩트 구성 + +이제 베이츠 번호의 표시 방식을 정의합니다. `BatesNumberingArtifact`를 사용하면 시작 번호, 접두사, 접미사 및 서식 옵션을 설정할 수 있습니다. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**왜 중요한가:** +`StartNumber`를 **1000**으로 설정하면 일반적인 법률 사건 파일 규칙에 맞습니다. `Prefix`는 각 번호가 **CASE‑1000**, **CASE‑1001**, …와 같이 표시되도록 하여 검색 및 정렬이 용이합니다. + +## 단계 4: 아티팩트를 페이지에 부착 + +아티팩트는 페이지의 `Artifacts` 컬렉션에 추가되어야 하며, 저장 시 Aspose가 모든 페이지에 렌더링합니다. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +문서를 저장하면 Aspose가 자동으로 모든 페이지에 아티팩트를 반복하고, 각 다음 페이지마다 번호를 증가시킵니다. + +## 단계 5: (선택) 추가 페이지 추가 + +더 많은 페이지가 필요하면 `pdfDocument.Pages.Add()`를 반복하면 됩니다. 이전 단계에서 부착한 베이츠 번호 매기기 아티팩트가 각 새 페이지에 자동으로 나타납니다. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## 단계 6: PDF 저장 – 프로그래밍 방식으로 PDF 생성 + +마지막으로 문서를 디스크에 저장합니다. 여기서 베이츠 번호가 페이지에 렌더링됩니다. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**예상 결과:** +*BatesNumberedDocument.pdf*를 열면 3페이지 PDF가 표시됩니다. 각 페이지는 오른쪽 하단에 베이츠 번호를 표시합니다: + +* 페이지 1 → **CASE‑1000** +* 페이지 2 → **CASE‑1001** +* 페이지 3 → **CASE‑1002** + +아티팩트가 페이지 컬렉션에 부착되어 있기 때문에 번호가 자동으로 증가합니다. + +## 전체 실행 가능한 예제 + +모든 내용을 종합하면 복사·붙여넣기·실행할 수 있는 완전한 콘솔 프로그램은 다음과 같습니다: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +`dotnet run`으로 프로그램을 실행합니다. 실행 후 데스크톱에서 파일을 찾아 베이츠 번호를 확인합니다. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## 일반적인 질문 및 엣지 케이스 + +### 다른 글꼴이나 위치가 필요하면 어떻게 해야 하나요? + +`BatesNumberingArtifact`는 `FontSize`, `FontColor`, `HorizontalAlignment`, `VerticalAlignment`와 같은 속성을 제공합니다. 예시: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### 특정 페이지를 번호 매기기에서 제외하려면 어떻게 해야 하나요? + +번호를 매기려는 페이지에 대해 별도의 `BatesNumberingArtifact`를 생성하고 해당 페이지에만 추가합니다. 아티팩트가 부착되지 않은 페이지는 번호가 매겨지지 않습니다. + +### 기존 PDF에서도 작동하나요? + +예. `new Document()` 대신 기존 파일을 로드합니다: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +그런 다음 원하는 페이지에 아티팩트를 부착하고 저장합니다. + +## 결론 + +이제 Aspose.Pdf를 사용하여 **베이츠 번호 매기기 PDF 추가**, **빈 페이지 PDF 추가**, **프로그래밍 방식으로 PDF 생성**을 깔끔하고 재사용 가능한 C# 솔루션으로 수행하는 방법을 알게 되었습니다. 이 접근 방식은 페이지 수, 사용자 정의 접두사 및 스타일 옵션에 관계없이 작동하여 최종 문서를 완전히 제어할 수 있습니다. + +다음 단계로 탐색해 볼 수 있습니다: + +* **create pdf as** 사용 + +## 다음에 배워야 할 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 관련 주제를 다룹니다. 각 자료에는 단계별 설명과 함께 완전한 작동 코드 예제가 포함되어 있어 추가 API 기능을 마스터하고 프로젝트에서 대체 구현 방식을 탐색하는 데 도움이 됩니다. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 830a81fe68..09b08c6173 100644 --- a/pdf/korean/net/programming-with-security-and-signatures/_index.md +++ b/pdf/korean/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ | [PDF 파일 서명을 사용하여 스마트 카드로 서명](./sign-with-smart-card-using-pdf-file-signature/) | Aspose.PDF for .NET을 사용하여 스마트 카드를 사용하여 PDF 파일에 서명하는 방법을 알아보세요. 안전한 디지털 서명을 위한 단계별 가이드를 따르세요. | | [서명 필드를 사용하여 스마트 카드로 서명](./sign-with-smart-card-using-signature-field/) | Aspose.PDF for .NET을 사용하여 스마트 카드를 사용하여 PDF에 안전하게 서명하는 방법을 알아보세요. 간편한 구현을 위한 단계별 가이드를 따르세요. | | [C#에서 PDF 서명 확인 – 서명된 PDF 파일 읽는 방법](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Aspose.PDF for .NET을 사용하여 C#에서 서명된 PDF 파일의 서명을 확인하고 읽는 방법을 단계별로 안내합니다. | +| [C#에서 Aspose.PDF를 사용한 PDF 서명 검증 – 완전 가이드](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | 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 파일을 복구하는 방법을 단계별로 안내합니다. | +| [Aspose.PDF로 PDF 디지털 서명 검증](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Aspose.PDF for .NET을 사용하여 PDF 디지털 서명을 검증하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/korean/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/korean/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..919429f034 --- /dev/null +++ b/pdf/korean/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: 'PDF 서명 튜토리얼: 서명 검증 옵션과 C# 코드를 사용하여 PDF 디지털 서명을 검증하는 방법을 보여주는 빠른 단계별 + 가이드' +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: ko +lastmod: 2026-08-08 +og_description: PDF 서명 튜토리얼은 Aspose.PDF를 사용하여 PDF 디지털 서명을 검증하는 과정을 안내합니다. 서명 검증 옵션을 + 설정하고 결과를 확인하는 방법을 배워보세요. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF 서명 튜토리얼 – C#에서 PDF 디지털 서명 검증 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'PDF 서명 튜토리얼: Aspose.PDF를 사용하여 PDF 디지털 서명 검증' +url: /ko/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF 서명 튜토리얼 – C#에서 PDF 디지털 서명 검증하기 + +PDF 디지털 서명을 검증하는 방법을 정확히 보여주는 **pdf signature tutorial**이 필요하다면, 이 가이드가 해결해 드립니다. 서명된 PDF를 로드하고, **signature validation options**를 구성하고, 검증을 실행하고, 결과를 표시하는 과정을 모두 명확하고 실행 가능한 C# 코드와 함께 확인할 수 있습니다. + +계약서, 청구서 또는 기타 법적 구속력이 있는 문서를 처리할 때 PDF 서명 검증은 필수입니다. 이 튜토리얼은 전체 워크플로를 단계별로 안내하므로, 어떤 API 호출이 필요한지 추측하지 않고도 서명 검증을 애플리케이션에 통합할 수 있습니다. + +## 여러분이 달성할 내용 + +이 튜토리얼을 마치면 다음을 수행할 수 있습니다: + +* Aspose.PDF를 사용해 서명된 PDF 파일을 로드합니다. +* 해시 알고리즘 등 **signature validation options**를 설정합니다. +* `Validate` 메서드를 호출해 **validate pdf digital signature**을 수행합니다. +* 콘솔에 명확한 “Signature valid” 메시지를 출력합니다. + +## 사전 요구 사항 + +* .NET 6.0(이상) 설치 +* Visual Studio 2022(또는 기타 C# IDE) +* Aspose.PDF for .NET NuGet 패키지(`Aspose.Pdf`) + +> **Pro tip:** 최신 Aspose.PDF 버전을 사용하면 SHA‑3 알고리즘 지원 및 향상된 검증 성능을 얻을 수 있습니다. + +## Step 1: Install the Aspose.PDF NuGet package + +Visual Studio에서 프로젝트를 열고 패키지 관리자 콘솔에 다음 명령을 실행합니다: + +```bash +Install-Package Aspose.Pdf +``` + +이 패키지는 `Aspose.Pdf` 네임스페이스를 추가하며, 여기에는 사용할 `Document` 클래스와 서명 관련 API가 포함됩니다. + +## Step 2: Load the signed PDF document + +첫 번째 코드 라인은 디스크에 있는 PDF 파일을 나타내는 `Document` 객체를 생성합니다. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*왜 중요한가:* `Document` 클래스는 PDF 구조를 파싱하고, 모든 내장 디지털 서명을 보유하는 `Signatures` 컬렉션을 노출합니다. 파일 경로가 잘못되면 예외가 발생하므로 프로그램을 실행하기 전에 경로를 확인하세요. + +## Step 3: Configure signature validation options + +`SignatureValidationOptions` 클래스로 검증 프로세스를 맞춤 설정할 수 있습니다. 이 튜토리얼에서는 해시 알고리즘을 지정하지만, 인증서 폐기 확인, 타임스탬프 검증 등도 설정할 수 있습니다. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*왜 중요한가:* 해시 알고리즘은 서명이 생성될 때 사용된 알고리즘과 일치해야 합니다. 일치하지 않는 알고리즘을 사용하면 서명이 올바르더라도 검증이 실패합니다. + +## Step 4: Validate the first signature + +대부분의 PDF는 단일 서명을 포함하지만, `Signatures` 컬렉션은 여러 개를 보유할 수 있습니다. 이 예제는 첫 번째 항목(`[0]`)을 검증합니다. `Validate` 메서드는 성공 여부를 나타내는 Boolean 값을 반환합니다. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* PDF에 서명이 전혀 없으면 `document.Signatures.Count`가 `0`이 되고 `[0]`에 접근하면 `IndexOutOfRangeException`이 발생합니다. 간단한 체크로 방어하세요: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Step 5: Display the validation result + +마지막으로 결과를 콘솔에 출력합니다. 이 단계에서는 **check pdf signature** 결과를 사람이 읽을 수 있는 형식으로 보여줍니다. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +프로그램을 실행하면 다음과 같은 출력이 나타납니다: + +``` +Signature valid: True +``` + +서명이 손상되었거나 지원되지 않는 알고리즘을 사용했거나 인증서가 폐기된 경우 출력은 `False`가 됩니다. + +## Full, runnable example + +다음 코드를 새 콘솔 프로젝트(`dotnet new console`)에 복사하고 `YOUR_DIRECTORY/signed.pdf`를 서명된 PDF 파일 경로로 바꾸세요. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Expected output + +``` +Signature valid: True +``` + +서명이 검증에 실패하면 콘솔에 `Signature valid: False`가 표시됩니다. + +## Common questions and troubleshooting + +| 질문 | 답변 | +|----------|--------| +| **PDF가 다른 해시 알고리즘을 사용하는 경우는?** | `SignatureValidationOptions`에서 `HashAlgorithm`을 일치하도록 변경하세요. 예: `HashAlgorithm.SHA256`. | +| **다중 서명 PDF에서 모든 서명을 검증하려면 어떻게 하나요?** | `document.Signatures`를 순회하면서 각 항목에 `Validate`를 호출하세요. | +| **서명 인증서의 신뢰 체인을 확인할 수 있나요?** | `validationOptions.CheckCertificateRevocation = true`로 설정하고, 필요하면 신뢰할 수 있는 루트 인증서를 포함하는 사용자 정의 `CertificateStore`를 제공하세요. | +| **타임스탬프 검증을 지원해야 하는 경우는?** | `validationOptions.CheckTimestamp = true`를 활성화하세요. Aspose.PDF가 내장된 타임스탬프 토큰을 검증합니다. | +| **자세한 검증 오류를 얻는 방법이 있나요?** | `ValidateEx(validationOptions, out ValidationResult result)`를 사용하세요; `result`에는 각 실패에 대한 `ErrorMessage`와 `ErrorCode`가 포함됩니다. | + +## Next steps + +* `document.Signatures`를 반복하여 여러 서명에 대해 **validate pdf signature**를 탐색합니다. +* 이 튜토리얼을 **check pdf signature**와 결합해 웹 API에서 업로드된 계약서에 대한 실시간 검증을 제공하세요. +* CRL/OCSP 확인, 타임스탬프 검증, 사용자 정의 신뢰 저장소 등 **signature validation options**를 더 깊이 파고들어 보세요. + +이제 Aspose.PDF를 사용해 C#에서 **validate pdf digital signature**을 수행하는 완전한 **pdf signature tutorial**을 보유하게 되었습니다. 코드를 자신의 워크플로에 맞게 조정하고, 로깅을 추가하거나 더 큰 문서 처리 파이프라인에 통합해 보세요. 즐거운 코딩 되세요! + +## What Should You Learn Next? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접하게 관련된 주제를 다룹니다. 각 리소스에는 완전한 코드 예제와 단계별 설명이 포함되어 있어 추가 API 기능을 마스터하고 프로젝트에 적용할 수 있는 대체 구현 방법을 탐색하는 데 도움이 됩니다. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/korean/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..2abe10b4c8 --- /dev/null +++ b/pdf/korean/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,283 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF를 사용하여 C#에서 PDF 서명을 확인합니다. 몇 줄의 코드만으로 디지털 서명 PDF를 검증하고 PDF + 서명을 나열하는 방법을 배워보세요. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: ko +lastmod: 2026-08-08 +og_description: Aspose.PDF를 사용하여 C#에서 PDF 서명을 확인하세요. 이 가이드는 디지털 서명 PDF를 검증하고, PDF + 서명을 나열하며, 손상된 서명을 효율적으로 처리하는 방법을 보여줍니다. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: C#에서 PDF 서명 검증 – 빠른 Aspose.PDF 튜토리얼 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: C#와 Aspose.PDF를 사용한 PDF 서명 검증 – 완전 가이드 +url: /ko/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 Aspose.PDF를 사용한 PDF 서명 검증 – 완전 가이드 + +.NET 애플리케이션에서 **PDF 서명 검증**이 필요하다면, 이 가이드는 Aspose.PDF를 사용하여 간결하게 수행하는 방법을 보여줍니다. **디지털 서명 PDF 검증**, **PDF 서명 목록 조회**, 그리고 손상된 서명을 몇 줄의 코드만으로 감지하는 방법을 배우게 됩니다. + +이 튜토리얼은 라이브러리 설치부터 서명이 없는 문서나 암호화된 PDF와 같은 엣지 케이스 처리까지 모두 다룹니다. 끝까지 진행하면 C# 프로젝트에 서명 검증을 통합하여 들어오는 PDF 파일의 진위성을 보장할 수 있습니다. + +**Prerequisites** + +- .NET 6.0 이상 (코드는 .NET Framework 4.6+에서도 동작합니다). +- C# 및 Visual Studio(또는 선호하는 IDE)에 대한 기본 지식. +- Aspose.PDF for .NET 라이선스(무료 체험판으로 평가 가능). + +위 요구 사항을 충족한다면 PDF 서명 검증을 시작할 준비가 된 것입니다. + +## Verify PDF signature – set up the project + +### PDF 서명 검증 – 프로젝트 설정 + +1. **Add the Aspose.PDF NuGet package** + Open the Package Manager Console and run: + + ```bash + Install-Package Aspose.PDF + ``` + + This brings in the `Aspose.Pdf` assembly and its dependencies. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` gives you the `Any` extension used later, while `Aspose.Pdf` contains the `Document` and `Signature` classes. + +## Load the PDF document + +### PDF 문서 로드 + +The first functional step is to open the PDF you want to inspect. Aspose.PDF reads the file into memory, enabling you to query its signatures. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – Loading the document inside a `using` block guarantees that the file handle is released promptly, preventing file‑lock issues in long‑running services. + +## List PDF signatures + +### PDF 서명 목록 조회 + +Before you validate a signature, you might want to know how many signatures are present. This step demonstrates the **list PDF signatures** capability. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` returns a collection of `Signature` objects. +- `Count` tells you how many signatures exist. +- Each `Signature` exposes metadata such as `Id`, `SignatureType`, and `Reason`, which can be useful for audit logs. + +**Edge case** – If the PDF has no signatures, `Count` will be `0` and the loop will not execute. You can handle this scenario gracefully: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validate digital signature PDF – detect compromised signatures + +### 디지털 서명 PDF 검증 – 손상된 서명 감지 + +Now that you can enumerate signatures, the core task is to **verify PDF signature** integrity. Aspose.PDF provides the `IsCompromised` property, which returns `true` when the signature’s cryptographic hash no longer matches the document content. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised` performs a full cryptographic validation using the embedded certificate chain. +- The `Any` LINQ operator stops at the first compromised signature, making the check efficient even for documents with many signatures. + +### Handling multiple signatures individually + +#### 여러 서명을 개별적으로 처리하기 + +If you need to know which specific signature failed, iterate instead of using `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** Store the validation result together with `sig.Id` in a database for later forensic analysis. + +## Output results and consider edge cases + +### 결과 출력 및 엣지 케이스 고려 + +Below is a complete, runnable program that combines the steps above. It loads a PDF, lists all signatures, validates them, and prints a clear result. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Common pitfalls and how to avoid them + +#### 일반적인 함정과 해결 방법 + +| Pitfall | Solution | +|---------|----------| +| The PDF is password‑protected. | Pass the password via `document.Encrypt.Decrypt(password)` before accessing `Signatures`. | +| No Aspose.PDF license is set. | Use `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` to avoid evaluation watermarks. | +| Large PDFs cause high memory usage. | Process the file in a streaming mode (`Document.Load(stream)`) instead of loading the whole file at once. | + +## Conclusion + +### 결론 + +You now know how to **verify PDF signature** in C# using Aspose.PDF, how to **validate digital signature PDF**, and how to **list PDF signatures** for reporting or audit purposes. The complete example demonstrates loading a document, enumerating its signatures, checking each one for compromise, and handling typical edge cases. + +Next steps you might explore: + +- **Validate timestamp tokens** to ensure a signature was created before a certificate expired. +- **Extract signer certificates** (`sig.Certificate`) for custom trust‑store validation. +- **Integrate with ASP.NET Core** to automatically reject uploaded PDFs that fail verification. + +Feel free to experiment with multiple signatures, custom validation logic, or alternative PDF libraries. If you found this guide helpful, share it with teammates or add your own tips in the comments + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/korean/net/text-operations/_index.md index 9ef3159aaa..32787011b7 100644 --- a/pdf/korean/net/text-operations/_index.md +++ b/pdf/korean/net/text-operations/_index.md @@ -164,6 +164,8 @@ Aspose.PDF Net에 대한 코드 튜토리얼 ### [Aspose.PDF for .NET을 사용하여 태그가 지정된 PDF의 텍스트 스타일 지정 | 접근성 있고 미적인 PDF 생성 가이드](./style-text-tagged-pdfs-aspose-pdf-net/) Aspose.PDF for .NET을 사용하여 태그가 지정된 PDF 문서의 텍스트 스타일을 지정하는 방법을 알아보세요. 이 가이드에서는 접근성을 향상시키기 위한 설치, 기술 및 실제 적용 방법을 다룹니다. +### [Aspose.Pdf.AI를 사용하여 PDF 요약하기 – 가이드](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## 추가 자료 - [Net 문서용 Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/korean/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/korean/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..03cb7ba6ff --- /dev/null +++ b/pdf/korean/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf.AI를 사용하여 PDF 요약하기 – AI로 PDF를 요약하는 방법, PDF 요약을 생성하고 요약을 PDF로 + 저장하는 방법을 배웁니다. 전체 코드와 모범 사례. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: ko +lastmod: 2026-08-08 +og_description: Aspose.Pdf.AI를 사용하여 PDF를 요약하는 방법. 이 튜토리얼에서는 AI로 PDF를 요약하고, PDF 요약을 + 생성하며, C# 몇 줄로 요약을 PDF로 저장하는 방법을 보여줍니다. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Aspose.Pdf.AI를 사용하여 PDF 요약하기 – 단계별 가이드 +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Aspose.Pdf.AI로 PDF 요약하는 방법 – 가이드 +url: /ko/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Pdf.AI로 PDF 요약하기 – 가이드 + +PDF를 빠르고 신뢰성 있게 **PDF 요약하는 방법**이 필요하다면 AI 모델에게 작업을 맡길 수 있습니다. 이 튜토리얼에서는 AI를 사용해 PDF를 요약하고, PDF 요약을 생성하며, Aspose.Pdf.AI SDK for .NET을 사용해 요약을 PDF로 저장하는 방법을 정확히 보여줍니다. 완전한 실행 가능한 예제와 각 라인에 대한 설명을 제공하므로 솔루션을 자신의 프로젝트에 적용할 수 있습니다. + +The guide covers: + +* 소스 폴더와 API 키 준비 +* `OpenAIClient` 생성 (모델과 통신) +* temperature 및 문서 경로와 같은 요약 옵션 구성 +* `SummaryCopilot` 구축 및 비동기적으로 요약 텍스트 가져오기 +* 생성된 요약을 PDF 파일로 저장 + +OpenAI 엔드포인트 외에 외부 서비스가 필요 없으며, 코드는 .NET 6+ 및 Aspose.Pdf.AI 23.7(이후 버전)에서 작동합니다. + +## 사전 요구 사항 + +* **.NET 6 SDK** (또는 최신 .NET 버전) +* **Aspose.Pdf.AI for .NET** – NuGet로 설치: `dotnet add package Aspose.Pdf.AI` +* 사용하려는 모델에 접근 가능한 **OpenAI API 키** (예: `gpt‑4o`) +* 요약하려는 PDF 파일 (예제에서는 `SampleDocument.pdf` 사용) + +`dataDirectory`에 지정한 폴더가 존재하고 애플리케이션에 읽기/쓰기 권한이 있는지 확인하세요. + +## 단계 1: 프로젝트 구조 설정 + +콘솔 프로젝트를 생성하거나(또는 기존 .NET 앱에 코드를 통합) 최소한의 `Program.cs`는 다음과 같습니다: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### 이 구조가 중요한 이유 + +* `await using`은 `OpenAIClient`를 자동으로 해제하여 HTTP 연결을 해제합니다. +* `Path.Combine`은 OS에 독립적인 경로를 생성하여 Windows와 Linux 간 버그를 방지합니다. +* **Temperature**는 창의성을 제어합니다; `0.5`는 균형 잡힌 사실 기반 요약을 제공합니다. +* `GetSummaryAsync`는 일반 텍스트를 반환하고, `SaveSummaryAsync`는 글꼴과 레이아웃을 보존하는 적절한 PDF를 생성합니다. + +## 단계 2: 요약 옵션 이해하기 + +`OpenAISummaryCopilotOptions` 클래스는 요약 프로세스를 세밀하게 조정할 수 있게 해줍니다: + +| 옵션 | 목적 | 일반적인 값 | +|--------|---------|----------------| +| `WithTemperature(double)` | 무작위성을 제어합니다. `0.0` = 결정적, `1.0` = 매우 창의적. | 비즈니스 문서에 `0.3‑0.7` | +| `WithDocument(string)` | 소스 PDF 경로. 읽을 수 있는 파일이어야 합니다. | 절대 경로나 상대 경로 모두 가능 | +| `WithPrompt(string)` *(optional)* | 모델을 안내하는 사용자 정의 프롬프트. | “핵심 결과를 150단어로 요약하십시오.” | + +**대용량 PDF**(10 MB 이상 또는 페이지가 많은 경우)라면 토큰 제한 오류를 피하기 위해 요약 전에 문서를 작은 청크로 나누는 것을 고려하세요. SDK는 자동으로 청크를 나누지 않으며, `Aspose.Pdf`의 `PdfDocument`를 사용해 페이지를 추출하고 하나씩 전달할 수 있습니다. + +## 단계 3: 코드 실행 및 출력 확인 + +1. `SampleDocument.pdf`를 지정한 `Data` 폴더에 넣으세요. +2. `"YOUR_API_KEY"`를 실제 OpenAI 키로 교체하세요. +3. `dotnet run`을 실행하세요. + +콘솔에 두 개의 섹션이 표시될 것입니다: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +`Summary_out.pdf`를 PDF 뷰어로 열면 기본 폰트로 서식이 지정된 동일한 요약 텍스트가 포함됩니다. SDK가 텍스트를 표준 PDF 페이지로 삽입하기 때문에 PDF는 완전히 검색 가능합니다. + +## 단계 4: 일반적인 변형 및 예외 상황 처리 + +### 문서의 일부만 요약하기 + +특정 챕터에 대해 **AI로 PDF를 요약**하려면 먼저 해당 범위를 추출하세요: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +그런 다음 `WithDocument`를 `Chapter5.pdf`로 지정합니다. + +### 요약 길이 조정 + +사용자 정의 프롬프트를 추가하여 길이에 영향을 줄 수 있습니다: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API 오류 처리 + +네트워크 오류나 할당량 제한으로 `Aspose.Pdf.AI.Exceptions.AIException`이 발생합니다. 호출을 `try / catch` 블록으로 감싸세요: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### 사용자 정의 레이아웃으로 요약 저장 + +`SaveSummaryAsync`는 일반 텍스트를 기록합니다. PDF에 스타일을 적용하려면(제목, 헤더, 브랜딩 추가) 새 `PdfDocument`를 만들고 요약을 수동으로 삽입하세요: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## 단계 5: 성능 팁 및 모범 사례 + +* 같은 프로세스에서 여러 요약에 **`OpenAIClient`를 재사용**하세요 – 클라이언트 생성은 비용이 적지만, 기본 `HttpClient`를 재사용하면 소켓 고갈을 줄일 수 있습니다. +* 소스 PDF가 변경되지 않으면 **요약을 캐시**하세요; 텍스트를 데이터베이스에 저장하고 API 호출을 건너뛸 수 있습니다. + +## 다음에 배울 내용은? + +다음 튜토리얼은 이 가이드에서 시연한 기술을 기반으로 하는 밀접한 관련 주제를 다룹니다. 각 자료에는 단계별 설명과 함께 완전한 실행 코드 예제가 포함되어 있어 추가 API 기능을 마스터하고 자체 프로젝트에서 대체 구현 방식을 탐색하는 데 도움이 됩니다. + +- [Aspose.PDF for .NET을 사용하여 특정 PDF 페이지 추출 및 저장 방법 - 종합 가이드](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Aspose.PDF .NET을 사용하여 PDF 첨부 파일 추출 및 저장 방법 - 종합 가이드](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Aspose.PDF .NET으로 HTML을 PDF로 변환하는 완전 가이드](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/conversion-export/_index.md b/pdf/polish/net/conversion-export/_index.md index 2316b49e9e..62f5d6eb81 100644 --- a/pdf/polish/net/conversion-export/_index.md +++ b/pdf/polish/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Samouczek dotyczący kodu dla Aspose.PDF Net ### [Konwersja PDF do TIFF w .NET przy użyciu Aspose.PDF: przewodnik krok po kroku](./pdf-to-tiff-conversion-aspose-pdf-net/) Dowiedz się, jak konwertować dokumenty PDF na obrazy TIFF za pomocą Aspose.PDF dla .NET. Opanuj niestandardowe głębie kolorów i zaawansowane techniki przetwarzania obrazu. +### [Zapisz PDF jako HTML przy użyciu Aspose.PDF – przewodnik krok po kroku](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Dowiedz się, jak zapisać plik PDF jako HTML przy użyciu Aspose.PDF w .NET. + ## 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-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/polish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2daf10a2c7 --- /dev/null +++ b/pdf/polish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Zapisz PDF jako HTML przy użyciu Aspose.PDF w C#. Dowiedz się, jak konwertować + PDF na HTML, pomijać obrazy rastrowe i obsługiwać typowe przypadki brzegowe. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: pl +lastmod: 2026-08-08 +og_description: Zapisz PDF jako HTML przy użyciu Aspose.PDF. Ten przewodnik pokazuje, + jak przekonwertować PDF na HTML, pominąć obrazy rastrowe i uniknąć typowych pułapek. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Zapisz PDF jako HTML przy użyciu Aspose.PDF – kompletny poradnik C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Zapisz PDF jako HTML przy użyciu Aspose.PDF – przewodnik krok po kroku +url: /pl/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Zapisz PDF jako HTML przy użyciu Aspose.PDF – przewodnik krok po kroku + +Jeśli potrzebujesz szybko **save PDF as HTML**, ten samouczek pokaże Ci dokładnie, jak to zrobić przy użyciu Aspose.PDF dla .NET. Niezależnie od tego, czy tworzysz aplikację webową przeglądającą dokumenty, czy eksportujesz raporty pod kątem przyjaznego SEO indeksowania, zobaczysz kompletną, gotową do uruchomienia rozwiązanie, które konwertuje PDF na HTML, jednocześnie dając Ci precyzyjną kontrolę nad obrazami rastrowymi. + +Oprócz głównego zadania, omówimy także opcje **aspose pdf html conversion**, które pozwalają pominąć obrazy rastrowe, dostosować obsługę CSS i efektywnie zarządzać dużymi dokumentami. Po zakończeniu tego przewodnika będziesz mieć samodzielny program, który możesz wstawić do dowolnego projektu .NET. + +## Wymagania wstępne + +* .NET 6.0 SDK lub nowszy (kod działa również z .NET Core i .NET Framework) +* Visual Studio 2022 lub dowolne IDE obsługujące C# +* Licencja Aspose.PDF dla .NET (bezpłatna wersja próbna działa w celach ewaluacyjnych) +* Plik PDF o nazwie `report.pdf` umieszczony w folderze, do którego możesz odwołać się w kodzie + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.Pdf`. + +## Krok 1: Zainstaluj pakiet NuGet Aspose.PDF + +Otwórz terminal w folderze projektu i uruchom: + +```bash +dotnet add package Aspose.Pdf +``` + +Pakiet dodaje przestrzeń nazw `Aspose.Pdf`, która zawiera klasę `Document` oraz typ `HtmlSaveOptions` używany do operacji **convert pdf to html**. + +## Krok 2: Utwórz projekt konsolowy i dodaj dyrektywy using + +Utwórz nową aplikację konsolową, jeśli jeszcze jej nie masz: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Następnie otwórz `Program.cs` i dodaj wymagane przestrzenie nazw: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Te dyrektywy dają dostęp do podstawowego API PDF oraz opcji zapisu HTML, które kontrolują proces **aspose convert pdf html**. + +## Krok 3: Załaduj dokument PDF + +Pierwsza linia operacyjna wczytuje źródłowy PDF do obiektu `Aspose.Pdf.Document`. Obiekt ten reprezentuje cały plik PDF w pamięci i udostępnia metody do zapisywania, edycji i wyodrębniania zawartości. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Dlaczego to ważne*: Załadowanie dokumentu raz zapewnia przewidywalne zużycie pamięci, szczególnie przy dużych plikach PDF. Jeśli plik nie zostanie znaleziony, Aspose rzuca `FileNotFoundException`, więc upewnij się, że ścieżka jest prawidłowa. + +## Krok 4: Skonfiguruj opcje zapisu HTML + +`HtmlSaveOptions` pozwala precyzyjnie dostosować sposób konwersji PDF. W tym samouczku pomijamy obrazy rastrowe, aby wynik był lekki, ale możesz zmienić tryb na `EmbedAll`, jeśli ich potrzebujesz. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Kluczowe punkty**: + +* `RasterImagesSavingMode.Skip` instruuje Aspose, aby ignorował obrazy bitmapowe (JPEG, PNG) podczas konwersji. Jest to idealne, gdy źródłowy PDF zawiera zeskanowane strony, które nie są potrzebne w widoku HTML. +* Możesz przełączyć się na `EmbedAll` lub `External`, jeśli chcesz, aby obrazy były zapisywane jako osobne pliki. +* Właściwość `ResourcesFolder` jest istotna tylko wtedy, gdy obrazy są zapisywane zewnętrznie. + +## Krok 5: Zapisz dokument jako HTML + +Teraz zapisujesz plik HTML na dysk, używając skonfigurowanych opcji. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Po zakończeniu tego wywołania, `report.html` zawiera treść tekstową, grafikę wektorową i układ zachowany z oryginalnego PDF, ale bez żadnych obrazów rastrowych. Możesz otworzyć plik w przeglądarce, aby zweryfikować wynik. + +## Oczekiwany wynik + +Gdy otworzysz `report.html` w Chrome lub Edge, powinieneś zobaczyć: + +* Wszystkie nagłówki, akapity i kształty wektorowe renderowane poprawnie. +* Brak znaczników `` dla obrazów rastrowych (są pomijane ze względu na tryb `Skip`). +* Czysty, minimalny CSS, albo wbudowany, albo w osobnym arkuszu stylów, w zależności od wybranej opcji. + +Jeśli potrzebujesz potwierdzić, że obrazy zostały pominięte, sprawdź źródło strony (`Ctrl+U`). Nie znajdziesz żadnych wpisów ``. + +## Krok 6: Obsłuż typowe przypadki brzegowe + +### 6.1 Duże pliki PDF (> 100 MB) + +W przypadku bardzo dużych plików, włącz strumieniowanie, aby zmniejszyć obciążenie pamięci: + +```csharp +htmlOpts.Streaming = true; +``` + +Strumieniowanie zapisuje fragmenty HTML bezpośrednio na dysk, zapobiegając trzymaniu całego dokumentu w pamięci. + +### 6.2 PDF‑y zabezpieczone hasłem + +Jeśli źródłowy PDF jest zaszyfrowany, podaj hasło przed zapisem: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Próba zapisu bez odszyfrowania powoduje wyrzucenie `InvalidPasswordException`. + +### 6.3 Znaki Unicode + +Aspose.PDF automatycznie osadza czcionki Unicode, ale możesz wymusić konkretną czcionkę dla spójnego renderowania: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Niestandardowe nazewnictwo plików dla wielu stron + +Jeśli chcesz, aby każda strona PDF była osobnym plikiem HTML, ustaw: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +To tworzy `report_page_1.html`, `report_page_2.html` itd., co może być przydatne przy paginacji w aplikacjach webowych. + +## Pełny, działający przykład + +Poniżej znajduje się kompletny program, który zawiera wszystkie omówione kroki. Skopiuj go do `Program.cs`, dostosuj ścieżki i uruchom `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Weryfikacja**: Po uruchomieniu konsola wyświetla komunikat o sukcesie. Otwórz wygenerowany plik HTML w przeglądarce, aby potwierdzić, że tekst i grafika wektorowa wyświetlają się poprawnie oraz że obrazy rastrowe zostały pominięte. + +## Porady i pułapki + +* **Porada**: Jeśli później potrzebujesz obrazów rastrowych, zmień `RasterImagesSavingMode` na `External` i ustaw `ResourcesFolder`. To utworzy podfolder `images` z wyodrębnionymi bitmapami. +* **Uwaga**: Używanie domyślnego trybu `Skip` w PDF‑ach, które mocno polegają na zeskanowanych obrazach, spowoduje puste obszary tam, gdzie obrazy powinny się znajdować. Zawsze testuj na reprezentatywnej próbce swoich dokumentów. +* **Wskazówka wydajnościowa**: Ponowne użycie jednej instancji `HtmlSaveOptions` dla wielu dokumentów zmniejsza narzut tworzenia obiektów przy konwersjach wsadowych. +* **Sprawdzenie wersji**: Pokazane API działa z Aspose.PDF dla .NET w wersji 23.9 i późniejszej. Wcześniejsze wersje mogą używać `HtmlSaveOptions.RasterImagesSavingMode` z nieco inną nazwą wyliczenia. + +## Zakończenie + +Teraz wiesz, jak **save PDF as HTML** przy użyciu Aspose.PDF, jak kontrolować obsługę obrazów rastrowych oraz jak radzić sobie z typowymi wyzwaniami, takimi jak duże pliki, ochrona hasłem i generowanie HTML‑a per strona. To kompletne rozwiązanie pozwala z pewnością zintegrować konwersję PDF‑do‑HTML w dowolnej aplikacji C#. + +### Co dalej? + +* Zbadaj **aspose pdf html conversion** w celu osadzania czcionek i dostosowywania CSS. +* Połącz tę konwersję z API webowym, aby udostępniać HTML na żądanie. +* Spróbuj odwrotnego kierunku — **convert pdf to html** i potem z powrotem do PDF — aby zweryfikować wierność konwersji w dwie strony. + +Śmiało eksperymentuj z opcjami i podziel się swoimi spostrzeżeniami w komentarzach lub na forach Aspose. 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ż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. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/polish/net/digital-signatures/_index.md index 38fd2f4ad4..2c17bb7910 100644 --- a/pdf/polish/net/digital-signatures/_index.md +++ b/pdf/polish/net/digital-signatures/_index.md @@ -58,6 +58,10 @@ Dowiedz się, jak weryfikować podpisy PDF w C# przy użyciu Aspose.PDF dla .NET ### [Jak zweryfikować PDF – zweryfikuj podpis PDF przy użyciu Aspose](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) Dowiedz się, jak weryfikować podpisy PDF przy użyciu Aspose, zapewniając integralność dokumentu. + +### [Jak zweryfikować PDF przy użyciu Aspose.PDF – sprawdź ważność podpisu PDF w C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Dowiedz się, jak sprawdzić ważność podpisu PDF przy użyciu Aspose.PDF w C#. + ### [Ładowanie dokumentu PDF C# – konwersja do PDF/X‑4 i lista podpisów](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Dowiedz się, jak wczytać dokument PDF w C#, przekonwertować go do formatu PDF/X‑4 oraz wyświetlić listę podpisów cyfrowych. diff --git a/pdf/polish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/polish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..123c0e665f --- /dev/null +++ b/pdf/polish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-08-08 +description: Jak zweryfikować PDF przy użyciu Aspose.PDF i sprawdzić cyfrowy podpis + PDF. Postępuj zgodnie z tym przewodnikiem krok po kroku, aby szybko sprawdzić podpis + PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: pl +lastmod: 2026-08-08 +og_description: Jak zweryfikować PDF przy użyciu Aspose.PDF. Dowiedz się, jak zweryfikować + cyfrowy podpis PDF i sprawdzić jego ważność w kilku linijkach kodu C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Jak zweryfikować PDF – sprawdzić ważność podpisu PDF przy użyciu Aspose.PDF + w C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Jak zweryfikować PDF przy użyciu Aspose.PDF – sprawdź ważność podpisu PDF w + C# +url: /pl/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak zweryfikować PDF za pomocą Aspose.PDF – sprawdź ważność podpisu PDF w C# + +Jeśli potrzebujesz **how to validate PDF** plików zawierających podpisy cyfrowe, ten samouczek pokaże Ci pełne rozwiązanie. Nauczysz się ładować PDF, tworzyć walidator certyfikatów i sprawdzać ważność podpisu PDF przy użyciu Aspose.PDF dla .NET. + +Weryfikacja cyfrowego podpisu PDF jest powszechnym wymogiem w zakresie zgodności, fakturowania i bezpiecznej wymiany dokumentów. Po zakończeniu tego przewodnika będziesz mógł pewnie sprawdzić, czy podpisany PDF jest godny zaufania, oraz zrozumiesz, jak radzić sobie z typowymi przypadkami brzegowymi, takimi jak brakujące certyfikaty czy wiele podpisów. + +## Wymagania wstępne + +- .NET 6.0 lub nowszy zainstalowany +- IDE, takie jak Visual Studio 2022 (dowolny edytor obsługujący C# będzie działał) +- Licencjonowana kopia **Aspose.PDF for .NET** (bezpłatna wersja próbna nadaje się do oceny) +- Podpisany plik PDF (`signed.pdf`) oraz, jeśli podpis opiera się na prywatnym CA, odpowiadający zaufany certyfikat (`trustedCertificate.pfx`) + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.PDF`. + +## Krok 1: Zainstaluj Aspose.PDF + +Otwórz terminal w folderze projektu i uruchom: + +```bash +dotnet add package Aspose.PDF +``` + +Polecenie dodaje najnowszą bibliotekę Aspose.PDF, która zawiera klasy `Document` i `CertificateValidator` używane później. + +## Krok 2: Załaduj dokument PDF + +Ładowanie PDF jest pierwszą operacją, którą wykonujesz, gdy **how to load pdf** programowo. Konstruktor `Document` przyjmuje ścieżkę do pliku, strumień lub tablicę bajtów. Użycie pełnej ścieżki utrzymuje przykład czytelnym. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Dlaczego to ważne:** Obiekt `Document` reprezentuje cały plik PDF w pamięci. Bez załadowania pliku nie możesz uzyskać dostępu do jego kolekcji `Signatures`, co jest wymagane do **check pdf signature** danych. + +## Krok 3: Przygotuj walidator certyfikatów + +Podpis cyfrowy jest zaufany tylko wtedy, gdy certyfikat podpisującego łączy się z zaufanym korzeniem. `CertificateValidator` pozwala skierować Aspose.PDF do zaufanego magazynu certyfikatów lub konkretnego pliku PFX. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Jeśli Twój PDF używa publicznego CA, któremu Windows już ufa, możesz pominąć `certPath` i utworzyć `CertificateValidator` przy użyciu domyślnego konstruktora. Dostarczenie własnego pliku PFX jest przydatne w wewnętrznych środowiskach PKI. + +## Krok 4: Zweryfikuj pierwszy podpis cyfrowy + +PDF może zawierać wiele podpisów. Dla uproszczenia, ten samouczek weryfikuje pierwszy podpis (`Signatures[0]`). Metoda `Validate` zwraca `true`, gdy podpis jest kryptograficznie nienaruszony **i** certyfikat podpisującego jest zaufany. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Co się dzieje w tle:** +- Metoda sprawdza skrót podpisanej treści względem wartości podpisu. +- Buduje łańcuch certyfikatów przy użyciu podanego walidatora. +- Status odwołania (CRL/OCSP) jest oceniany, jeśli walidator jest tak skonfigurowany. + +### Obsługa wielu podpisów + +Jeśli Twój PDF zawiera więcej niż jeden podpis, iteruj po kolekcji `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Ten wzorzec pozwala **check pdf signature** na każdej stronie i raportować indywidualne wyniki. + +## Krok 5: Wyświetl wynik weryfikacji + +Na koniec, wypisz wynik na konsolę. W kodzie produkcyjnym prawdopodobnie zalogujesz wynik lub zgłosisz wyjątek w przypadku nieprawidłowego podpisu. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Oczekiwany wynik w konsoli + +``` +Valid +``` + +lub + +``` +Invalid +``` + +Komunikat odzwierciedla wartość bool zwróconą przez `Validate`. Wynik „Invalid” może wskazywać na sfałszowany dokument, niezaufany certyfikat lub wygasły certyfikat podpisującego. + +## Krok 6: Typowe pułapki i wskazówki najlepszych praktyk + +### 1. Brak zaufanego certyfikatu +Jeśli otrzymujesz `Invalid` i wiesz, że podpis powinien być zaufany, sprawdź, czy właściwy certyfikat główny został przekazany do `CertificateValidator`. Użyj przeciążenia przyjmującego `X509Certificate2Collection` dla wielu korzeni. + +### 2. Podpis z odwołaniami zewnętrznymi +Niektóre podpisy obejmują treść zewnętrzną (np. załączony plik). Upewnij się, że zasoby zewnętrzne są dostępne; w przeciwnym razie weryfikacja skrótu nie powiedzie się. + +### 3. Walidacja znacznika czasu +Podpis może zawierać token znacznika czasu. Aby go zweryfikować, skonfiguruj walidator do sprawdzania certyfikatów urzędu znacznika czasu (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Wydajność przy dużych PDF-ach +Ładowanie PDF o setkach stron może zużywać pamięć. Jeśli potrzebujesz tylko danych podpisu, użyj `PdfFileEditor` do wyodrębnienia słownika podpisu bez renderowania stron. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Bezpieczeństwo wątkowe +Instancje `Document` nie są bezpieczne wątkowo. Twórz nowy `Document` na każdy wątek przy weryfikacji wielu PDF‑ów równocześnie. + +## Pełny, uruchamialny przykład + +Poniżej znajduje się kompletny program, który możesz skopiować, wkleić i uruchomić po zaktualizowaniu ścieżek do plików. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Uruchomienie programu** wypisuje linię dla każdego podpisu, wyraźnie wskazując, czy PDF przechodzi kontrolę **validate pdf digital signature**. + +## Zakończenie + +Teraz wiesz **how to validate PDF** pliki zawierające podpisy cyfrowe przy użyciu Aspose.PDF dla .NET. Samouczek obejmował ładowanie PDF, konfigurowanie walidatora certyfikatów, sprawdzanie ważności podpisu PDF, obsługę wielu podpisów oraz rozwiązywanie typowych problemów. + +Następnie, zapoznaj się z powiązanymi tematami, takimi jak **how to sign PDF**, **how to add timestamp tokens** i **how to extract signed content**. Te rozszerzenia pozwalają zbudować kompletny, end‑to‑end, bezpieczny przepływ dokumentów w C#. + +--- + +## 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 zweryfikować PDF – Walidacja podpisu PDF przy użyciu Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Jak wyodrębnić informacje o podpisie PDF przy użyciu Aspose.PDF .NET: Przewodnik krok po kroku](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Jak usunąć cyfrowe podpisy PDF przy użyciu Aspose.PDF .NET | Kompletny przewodnik](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/polish/net/document-conversion/_index.md index 70b635168a..05b5a7b687 100644 --- a/pdf/polish/net/document-conversion/_index.md +++ b/pdf/polish/net/document-conversion/_index.md @@ -59,6 +59,7 @@ Dowiesz się, jak określać ustawienia konwersji, wyodrębniać tekst i obrazy, | [XPS do PDF](./xps-to-pdf/) Dowiedz się, jak konwertować pliki XPS do PDF za pomocą Aspose.PDF dla .NET dzięki temu samouczkowi krok po kroku. Idealne dla programistów i entuzjastów dokumentów. | | [PDF do PDFA](./pdf-to-pdfa/) Dowiedz się, jak konwertować pliki PDF do formatu PDF/A za pomocą Aspose.PDF dla .NET, korzystając z tego samouczka krok po kroku. | | [Konwertuj PDF do PDF/X‑4 w C# – Samouczek ASP.NET PDF krok po kroku](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Dowiedz się, jak w C# konwertować pliki PDF do formatu PDF/X‑4 przy użyciu Aspose.PDF dla .NET w prostym przewodniku krok po kroku. | +| [Samouczek konwersji PDF/X‑4 – ustaw standard PDF i konwertuj PDF przy użyciu Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Dowiedz się, jak ustawić standard PDF/X‑4 i konwertować pliki PDF przy użyciu Aspose.PDF dla .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/polish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..fca46f767a --- /dev/null +++ b/pdf/polish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,228 @@ +--- +category: general +date: 2026-08-08 +description: samouczek konwersji pdfx4, który pokazuje, jak ustawić standard PDF na + PDF/X‑4 i konwertować PDF przy użyciu Aspose, zapewniając niezawodną konwersję formatu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: pl +lastmod: 2026-08-08 +og_description: Poradnik konwersji pdfx4 wyjaśnia, jak ustawić standard PDF na PDF/X‑4 + i wykonać niezawodną konwersję PDF przy użyciu Aspose w C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Poradnik konwersji pdfx4 – ustaw standard PDF i konwertuj PDF przy użyciu + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Poradnik konwersji pdfx4 – ustaw standard PDF i konwertuj PDF przy użyciu Aspose +url: /pl/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# samouczek konwersji pdfx4 – ustaw standard PDF i konwertuj PDF przy użyciu Aspose + +Jeśli potrzebujesz **pdfx4 conversion tutorial**, ten przewodnik przeprowadzi Cię przez cały proces ustawiania standardu PDF na PDF/X‑4 oraz konwersji PDF przy użyciu Aspose. Niezależnie od tego, czy przygotowujesz pliki gotowe do druku, czy zapewniasz długoterminową zgodność archiwalną, poznasz niezawodny **aspose pdf format conversion** workflow działający z .NET 6 i nowszymi. + +Samouczek obejmuje wszystko, od konfiguracji projektu po obsługę przypadków brzegowych, takich jak brakujące pliki źródłowe czy nieobsługiwane funkcje. Po zakończeniu artykułu będziesz mieć samodzielny program w C#, który generuje plik zgodny z PDF/X‑4 gotowy do dalszych procesów. + +## Wymagania wstępne + +Przed rozpoczęciem upewnij się, że masz: + +- .NET 6 SDK lub nowszy zainstalowany ([download here](https://dotnet.microsoft.com/download)) +- Ważną licencję Aspose.PDF for .NET (bezpłatna wersja próbna wystarczy do testów) +- Visual Studio 2022, VS Code lub dowolne IDE obsługujące rozwój w .NET +- Plik PDF, który chcesz przekonwertować (umieść go w znanym folderze) + +Te wymagania zapewniają, że kod uruchomi się bez dodatkowej konfiguracji. + +## Krok 1: Utwórz nowy projekt konsolowy .NET + +Otwórz terminal i uruchom następujące polecenia, aby wygenerować aplikację konsolową o nazwie `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Dodaj pakiet NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Pakiet `Aspose.Pdf` dostarcza klasy `Document` oraz `PdfFormatConversionOptions` potrzebne do operacji **convert pdf pdfx4**. + +## Krok 2: Napisz kod konwersji + +Otwórz `Program.cs` (lub `Program.cs`, jeśli używasz nowych instrukcji na najwyższym poziomie) i zamień jego zawartość na pełny przykład poniżej. Kod demonstruje **set pdf standard** na PDF/X‑4, wykonuje konwersję i zawiera obsługę błędów dla typowych problemów. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Dlaczego każdy element ma znaczenie + +- **Walidacja argumentów** zapobiega awarii programu, gdy użytkownik zapomni podać ścieżkę do pliku. +- **Ładowanie `Document`** generuje wyraźny wyjątek, jeśli źródłowy PDF jest brakujący lub uszkodzony, co jest niezbędne dla solidnego doświadczenia **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** to miejsce, w którym **set pdf standard**. Przypisując `PdfStandard.PdfX4`, Aspose automatycznie dostosowuje przestrzenie barw, osadza wymagane czcionki i zapisuje niezbędne metadane PDF/X‑4. +- **`FontEmbeddingMode.EmbedAll`** zapewnia osadzenie każdej czcionki użytej w źródłowym PDF, co jest częstym wymogiem dla plików gotowych do druku. +- **`doc.Convert`** wykonuje rzeczywistą **aspose pdf format conversion**. Metoda zapisuje nowy plik w jednym wywołaniu, upraszczając workflow. + +## Krok 3: Uruchom konwerter + +Zbuduj projekt i uruchom go, podając ścieżki źródłową i docelową: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Jeśli wszystko zadziała, konsola wyświetli: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Możesz teraz otworzyć `output_pdfx4.pdf` w dowolnej przeglądarce PDF obsługującej PDF/X‑4 (np. Adobe Acrobat Pro) i zweryfikować zgodność poprzez *Plik → Właściwości → Standardy*. + +## Krok 4: Zweryfikuj zgodność PDF/X‑4 (opcjonalnie) + +W pipeline'ach produkcyjnych możesz chcieć programowo zweryfikować wynik. Aspose udostępnia klasę `PdfComplianceChecker` (dostępną w pakiecie `Aspose.Pdf`), którą można użyć w następujący sposób: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Uruchomienie tego fragmentu po konwersji daje wyraźny wynik sukces/porażka, co jest przydatne w zautomatyzowanych pipeline'ach CI/CD. + +## Krok 5: Typowe pułapki i wskazówki najlepszych praktyk + +| Problem | Dlaczego się pojawia | Jak tego uniknąć | +|-------|----------------|-----------------| +| Brak czcionek w źródłowym PDF | Czcionki są odwoływane, ale nie są osadzone, co powoduje ostrzeżenia przy konwersji | Użyj `FontEmbeddingMode.EmbedAll` jak pokazano powyżej | +| Źródłowy PDF zawiera obiekty przezroczyste niedozwolone w PDF/X‑4 | PDF/X‑4 nie zezwala na niektóre mieszanki przezroczystości | Wstępnie przetwórz PDF przy użyciu `doc.ProcessTransparentObjects()` przed konwersją | +| Duże pliki powodują OutOfMemoryException | Cały dokument jest ładowany do pamięci | Strumieniuj źródło używając `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licencja nie została zastosowana | Wersja próbna dodaje znaki wodne | Wywołaj `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` przed użyciem jakiejkolwiek API Aspose | + +Stosowanie tych wskazówek zapewnia płynne doświadczenie **convert pdf pdfx4** w środowiskach produkcyjnych. + +## Krok 6: Rozszerzanie samouczka + +Gdy opanujesz podstawowy **pdfx4 conversion tutorial**, możesz eksplorować: + +- **Konwersja wsadowa**: iteruj przez folder PDF‑ów i konwertuj każdy na PDF/X‑4. +- **Wstrzykiwanie metadanych**: dodaj metadane XMP wymagane przez konkretne drukarnie. +- **Zarządzanie profilami kolorów**: dołącz profile ICC używając `doc.ColorSpace = ColorSpace.DeviceRGB;` przed konwersją. + +Wszystkie te rozszerzenia opierają się na tej samej podstawie **aspose pdf format conversion** przedstawionej tutaj. + +## Podsumowanie + +Ten **pdfx4 conversion tutorial** pokazał, jak **set pdf standard** na PDF/X‑4, wykonać niezawodną **convert pdf using Aspose** oraz zweryfikować rezultat. Masz teraz kompletny, uruchamialny program w C#, który może być zintegrowany z większymi pipeline'ami przetwarzania dokumentów lub używany jako samodzielne narzędzie. Eksperymentuj z przetwarzaniem wsadowym, obsługą metadanych lub alternatywnymi standardami PDF (PDF/A‑2b, PDF/UA), aby pogłębić wiedzę o **aspose pdf format conversion**. + +Miłego kodowania i ciesz się pewnością, jaką daje zgodny z PDF/X‑4 wynik! + +## Co powinieneś nauczyć się dalej? + +Poniższe samouczki obejmują tematy ściśle powiązane, które budują na technikach przedstawionych 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. + +- [Konwertuj PDF/A na standardowy PDF przy użyciu Aspose.PDF .NET : Kompletny przewodnik](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Jak ustawić datę wygaśnięcia w PDF-ach przy użyciu Aspose.PDF dla .NET (samouczek C#)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Kompletny przewodnik: Konwertuj PDF na TIFF przy użyciu Aspose.PDF .NET dla płynnej konwersji dokumentów](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/polish/net/document-creation/_index.md b/pdf/polish/net/document-creation/_index.md index 4d36df2886..63a6c55de8 100644 --- a/pdf/polish/net/document-creation/_index.md +++ b/pdf/polish/net/document-creation/_index.md @@ -76,9 +76,13 @@ Samouczek dotyczący kodu dla Aspose.PDF Net ### [Utwórz dokument PDF przy użyciu Aspose.PDF – Dodaj stronę, kształt i zapisz](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Dowiedz się, jak w Aspose.PDF dodać nową stronę, rysować kształty i zapisać dokument PDF w aplikacji .NET. + ### [Tworzenie dokumentu PDF przy użyciu Aspose.PDF – przewodnik krok po kroku](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Dowiedz się, jak krok po kroku tworzyć dokumenty PDF przy użyciu Aspose.PDF w .NET. +### [Utwórz dokument PDF w C# przy użyciu Aspose.Pdf](./create-pdf-document-in-c-with-aspose-pdf/) +Dowiedz się, jak w C# stworzyć dokument PDF przy użyciu biblioteki Aspose.Pdf, dodając strony, kształty i zapisując plik. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/polish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..6c3f13274b --- /dev/null +++ b/pdf/polish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Utwórz dokument PDF w C# przy użyciu Aspose.Pdf. Dowiedz się, jak dodać + pustą stronę PDF, dodać akapit do PDF oraz umieścić tekst w PDF z precyzyjnymi współrzędnymi. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: pl +lastmod: 2026-08-08 +og_description: Szybko twórz dokument PDF w C#. Ten samouczek pokazuje, jak dodać + pustą stronę PDF, dodać akapit do PDF oraz pozycjonować tekst w PDF przy użyciu + Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Tworzenie dokumentu PDF w C# z Aspose.Pdf – kompletny przewodnik +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Utwórz dokument PDF w C# przy użyciu Aspose.Pdf +url: /pl/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tworzenie dokumentu PDF w C# przy użyciu Aspose.Pdf + +Jeśli potrzebujesz **tworzyć dokument PDF** programowo, ten przewodnik pokaże Ci dokładnie, jak to zrobić. Korzystając z Aspose.Pdf dla .NET możesz dodać pustą stronę PDF, wstawić akapit do PDF oraz precyzyjnie pozycjonować tekst w PDF‑ie — wszystko w kilku linijkach kodu C#. + +Zakończysz tutorial z w pełni funkcjonalnym plikiem PDF, który zawiera notatkę umieszczoną w podanych przez Ciebie współrzędnych. Bez zewnętrznych narzędzi, bez ręcznej edycji — po prostu czysty, powtarzalny kod, który możesz wkleić do dowolnego projektu .NET. + +## Czego się nauczysz + +* Jak **tworzyć dokument PDF** przy użyciu Aspose.Pdf. +* Prawidłowy sposób **dodawania pustej strony PDF** i dlaczego strona musi istnieć przed dodaniem treści. +* Jak **dodać akapit do PDF** i dołączyć własny znacznik (przydatny przy późniejszym wyodrębnianiu lub stylizacji). +* Technika **pozycjonowania tekstu w PDF** przy użyciu klasy `Position`. +* Jak zapisać wynik na dysku i zweryfikować wyjście. + +**Wymagania wstępne** + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7+). +* Ważna licencja Aspose.Pdf dla .NET lub darmowy klucz ewaluacyjny. +* IDE, np. Visual Studio 2022 lub VS Code z rozszerzeniem C#. + +> **Pro tip:** Jeśli używasz darmowej wersji ewaluacyjnej, wygenerowany PDF będzie zawierał małą znak wodny. Zarejestruj licencję, aby go usunąć. + +## Jak tworzyć dokument PDF przy użyciu Aspose.Pdf + +Pierwszym krokiem jest utworzenie instancji klasy `Document`. Obiekt ten reprezentuje cały plik PDF i daje dostęp do stron, zasobów oraz opcji zapisu. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Tworzenie dokumentu **nie** zapisuje jeszcze nic na dysku; przygotowuje jedynie reprezentację w pamięci, którą możesz modyfikować. Takie podejście utrzymuje API szybkie i oszczędne pod względem pamięci. + +## Dodawanie pustej strony PDF przy użyciu Aspose.Pdf + +PDF musi zawierać przynajmniej jedną stronę, zanim będziesz mógł umieścić jakąkolwiek treść. Dodanie pustej strony to jedno wywołanie metody: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Metoda `Add()` tworzy stronę o domyślnym rozmiarze (A4) i orientacji (pionowej). Jeśli potrzebujesz innego rozmiaru, przekaż instancję `PageSize` do `Add()`. + +## Dodawanie akapitu do PDF i ustawianie notatki + +Teraz, gdy strona istnieje, możesz utworzyć obiekt `Paragraph`, który przechowuje widoczny tekst. Akapit może także nosić własny znacznik, co jest przydatne, gdy później będziesz musiał zlokalizować lub ostylować element programowo. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Dlaczego używać znacznika? + +Znaczniki to metadane towarzyszące elementowi PDF. Mogą być później odpytywane przy pomocy `Document.FindObject()` lub wykorzystywane przez downstreamowe procesory PDF, które opierają się na znacznikach w kontekście dostępności lub indeksowania. + +## Pozycjonowanie tekstu w PDF przy użyciu precyzyjnych współrzędnych + +Domyślne umiejscowienie akapitu to lewy górny róg marginesu strony. Aby przenieść tekst do dokładnego miejsca, ustaw właściwość `Position` na znaczniku akapitu: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Współrzędne mierzone są w punktach (1 punkt = 1/72 cala). Punkt początkowy (0,0) znajduje się w lewym dolnym rogu strony, co odpowiada większości silników renderujących PDF. Dostosuj wartości `X` i `Y`, aby dopasować układ do swoich potrzeb. + +Po pozycjonowaniu dodaj akapit do kolekcji strony: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Zapis dokumentu PDF + +Na koniec zapisz w‑pamięci PDF do pliku. Możesz określić ścieżkę wyjściową, format, a nawet opcje szyfrowania. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Gdy program zakończy działanie, `output.pdf` zawiera jedną stronę z tekstem **Important note** umieszczonym w pobliżu prawego górnego rogu (X = 50, Y = 750). Otwórz plik w dowolnym przeglądarce PDF, aby zweryfikować położenie. + +![Wygenerowany dokument PDF utworzony w C# Aspose.Pdf pokazujący pozycjonowaną notatkę](https://example.com/images/generated-pdf.png) + +*Tekst alternatywny obrazu: Wygenerowany dokument PDF utworzony w C# Aspose.Pdf pokazujący pozycjonowaną notatkę* (zawiera główne słowo kluczowe). + +## Pełny, gotowy do uruchomienia przykład + +Łącząc wszystkie elementy, oto kompletny program konsolowy, który możesz skopiować, zbudować i uruchomić: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Oczekiwany wynik** po uruchomieniu programu: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Otwarcie `output.pdf` pokazuje jedną stronę z tekstem **Important note** umieszczonym w podanych współrzędnych. + +## Typowe warianty i przypadki brzegowe + +| Scenariusz | Co zmienić | Dlaczego ma to znaczenie | +|------------|------------|--------------------------| +| **Inny rozmiar strony** | `pdfDocument.Pages.Add(PageSize.A5)` | Mniejsze strony zmniejszają rozmiar pliku i lepiej pasują do ekranów mobilnych. | +| **Wiele notatek** | Pętla po kolekcji łańcuchów i utworzenie `Paragraph` dla każdego, inkrementując współrzędną `Y`. | Umożliwia batchowe generowanie notatek w stylu listy punktowanej. | +| **Znaki Unicode** | Upewnij się, że plik źródłowy jest zapisany jako UTF‑8 i ustaw `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf obsługuje Unicode od razu, ale kodowanie pliku musi się zgadzać. | +| **PDF zabezpieczony hasłem** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Dodaje ochronę dla poufnych notatek. | +| **Wysoka rozdzielczość wyjścia** | Ustaw `pdfDocument.PageInfo.Width` i `Height` na większe wartości przed dodaniem treści. | Przydatne przy drukowaniu PDF‑ów w dużym formacie. | + +## Wskazówki dla środowiska produkcyjnego + +* **Ponownie używaj instancji `Document`** przy generowaniu wielu PDF‑ów w jednej żądaniu, aby zmniejszyć obciążenie GC. +* **Zwalniaj obiekty** (`pdfDocument.Dispose()`), jeśli tworzysz wiele dokumentów w pętli. +* **Waliduj współrzędne**: wartość `Y` nie może przekraczać wysokości strony; w przeciwnym razie tekst zostanie obcięty. +* **Użyj `TextFragmentAbsorber`**, aby później wyodrębnić notatkę po jej znaczniku (`/P`), jeśli potrzebujesz odczytać zawartość. + +## Podsumowanie + +Teraz wiesz, jak **tworzyć dokument PDF** przy użyciu Aspose.Pdf, **dodawać pustą stronę PDF**, **dodawać akapit do PDF**, **dodawać notatkę do PDF** oraz **precyzyjnie pozycjonować tekst w PDF**. Kompletny przykład demonstruje czysty, powtarzalny przepływ pracy, który możesz rozbudować o faktury, raporty czy dowolny scenariusz automatyzacji dokumentów. + +Następnie odkryj powiązane tematy, takie jak **dodawanie obrazów do PDF**, **budowanie tabel z Aspose.Pdf** czy **aplikowanie podpisów cyfrowych**. Każdy z nich opiera się na tych samych podstawowych koncepcjach, więc będziesz gotowy, aby podjąć się bardziej zaawansowanych zadań generowania PDF‑ów. + +Miłego kodowania! + + +## Co powinieneś nauczyć się dalej? + + +Poniższe tutoriale obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne, działające przykłady kodu oraz wyjaśnienia krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia w własnych projektach. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/polish/net/images-graphics/_index.md b/pdf/polish/net/images-graphics/_index.md index 51cb5f1a77..d7fdc4ee79 100644 --- a/pdf/polish/net/images-graphics/_index.md +++ b/pdf/polish/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Dowiedz się, jak tworzyć atrakcyjne wizualnie dokumenty PDF, wyodrębniając i ### [Rysuj przezroczyste kształty w plikach PDF za pomocą Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Samouczek dotyczący kodu dla Aspose.PDF Net +### [Ustaw przezroczystość PDF w C# przy użyciu Aspose.PDF – kompletny przewodnik](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Dowiedz się, jak ustawić przezroczystość w dokumentach PDF przy użyciu Aspose.PDF w C#. + ### [Efektywna identyfikacja obrazów PDF z Aspose.PDF dla .NET](./master-image-identification-aspose-pdf-net/) Dowiedz się, jak identyfikować obrazy w skali szarości i RGB w plikach PDF za pomocą Aspose.PDF dla .NET. Ten samouczek obejmuje instalację, ekstrakcję obrazu i wskazówki dotyczące wydajności. @@ -78,7 +81,7 @@ Dowiedz się, jak bezproblemowo dodawać obrazy do dokumentów PDF za pomocą As Dowiedz się, jak bezproblemowo dodawać obrazy do dokumentów PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik krok po kroku obejmuje konfigurację, implementację i praktyczne zastosowania. ### [Jak dodawać obrazy do plików PDF za pomocą Aspose.PDF dla .NET: przewodnik krok po kroku](./add-images-to-pdfs-aspose-pdf-net/) -Dowiedz się, jak bezproblemowo dodawać obrazy do plików PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje dodawanie obrazów do istniejących plików PDF i tworzenie nowych z plików DICOM. +Dowiedz się, jak bezproblemowo dodawać obrazy do dokumentów PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje dodawanie obrazów do istniejących plików PDF i tworzenie nowych z plików DICOM. ### [Jak dodać nagłówek obrazu do plików PDF za pomocą Aspose.PDF dla .NET: przewodnik krok po kroku](./add-image-header-pdf-aspose-dotnet/) Dowiedz się, jak dodawać nagłówki obrazów do dokumentów PDF za pomocą Aspose.PDF dla platformy .NET, korzystając z tego kompleksowego przewodnika krok po kroku. @@ -129,7 +132,7 @@ Dowiedz się, jak bez wysiłku wyodrębniać obrazy z dokumentów PDF za pomocą Dowiedz się, jak efektywnie wyodrębniać obrazy z plików PDF za pomocą Aspose.PDF dla platformy .NET dzięki temu kompleksowemu przewodnikowi zawierającemu przykłady kodu i najlepsze praktyki. ### [Jak wyodrębnić obrazy z plików PDF za pomocą Aspose.PDF dla .NET: przewodnik krok po kroku](./extract-images-aspose-pdf-net-guide/) -Dowiedz się, jak wyodrębnić obrazy z dokumentów PDF za pomocą Aspose.PDF dla .NET dzięki temu kompleksowemu przewodnikowi. Idealne dla programistów, którzy chcą udoskonalić możliwości przetwarzania dokumentów. +Dowiedz się, jak wyodrębniać obrazy z dokumentów PDF za pomocą Aspose.PDF dla .NET dzięki temu kompleksowemu przewodnikowi. Idealne dla programistów, którzy chcą udoskonalić możliwości przetwarzania dokumentów. ### [Jak wyodrębnić obrazy z określonych stron pliku PDF za pomocą Aspose.PDF dla platformy .NET](./extract-images-pdfs-specific-pages-aspose-dotnet/) Dowiedz się, jak wydajnie wyodrębniać obrazy z określonych stron w pliku PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje wskazówki dotyczące konfiguracji, implementacji i wydajności. diff --git a/pdf/polish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/polish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0a83a701fd --- /dev/null +++ b/pdf/polish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Ustaw przezroczystość PDF w C# przy użyciu Aspose.PDF – dowiedz się, + jak dostosować przezroczystość obrysu i wypełnienia kilkoma liniami kodu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: pl +lastmod: 2026-08-08 +og_description: Ustaw przezroczystość PDF w C# szybko. Ten przewodnik pokazuje, jak + modyfikować przezroczystość obrysu i wypełnienia przy użyciu API stanu graficznego + Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Ustaw przezroczystość PDF w C# z Aspose.PDF – samouczek krok po kroku +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Ustaw przezroczystość PDF w C# z Aspose.PDF – kompletny przewodnik +url: /pl/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ustaw przezroczystość PDF w C# przy użyciu Aspose.PDF – kompletny przewodnik + +Jeśli potrzebujesz **ustawić przezroczystość PDF** dla konkretnych operacji rysowania, ten tutorial pokaże Ci dokładnie, jak to zrobić przy użyciu Aspose.PDF for .NET. Niezależnie od tego, czy tworzysz znaki wodne, półprzezroczyste nakładki, czy własne grafiki, poznasz zwięzłe, gotowe do produkcji podejście. + +W kolejnych sekcjach omówimy wszystko, od ładowania pliku PDF po edycję jego stanu graficznego, dodanie nowej definicji przezroczystości i zapisanie wyniku. Nie jest wymagana żadna zewnętrzna dokumentacja — wystarczy poniższy kod oraz krótkie wyjaśnienie każdego kroku. + +## Wymagania wstępne + +Przed rozpoczęciem upewnij się, że masz: + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7+) +* Ważną licencję Aspose.PDF for .NET (bezpłatna wersja próbna wystarczy do oceny) +* Plik PDF wejściowy (`input.pdf`) znajdujący się w folderze, do którego masz uprawnienia odczytu/zapisu +* Visual Studio 2022 lub dowolne inne IDE obsługujące C# + +## Krok 1 – Załaduj dokument PDF (Aspose.PDF for .NET) + +Pierwszym zadaniem jest otwarcie istniejącego pliku PDF. Aspose.PDF reprezentuje plik PDF klasą `Document`, która daje pełny dostęp do stron, zasobów i obiektów niskiego poziomu. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Dlaczego to jest ważne*: Ładowanie dokumentu tworzy model w pamięci, który możesz bezpiecznie modyfikować. Instrukcja `using` zapewnia automatyczne zwolnienie uchwytu pliku po zakończeniu pracy. + +## Krok 2 – Pobierz pierwszą stronę, którą chcesz edytować + +Przezroczystość jest definiowana na poziomie strony poprzez słownik zasobów strony. Tutaj celujemy w pierwszą stronę, ale możesz przejść przez `doc.Pages` w pętli, aby wykonać operację wsadową. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Dlaczego to jest ważne*: Każda strona ma własną kolekcję `Resources`, w której przechowywane są stany graficzne, czcionki, obrazy itp. Modyfikacja właściwej strony zapewnia, że efekt przezroczystości pojawi się tam, gdzie tego oczekujesz. + +## Krok 3 – Otwórz słownik zasobów strony do edycji + +Aspose.PDF udostępnia pomocnika `DictionaryEditor`, który umożliwia manipulację słownikami PDF niskiego poziomu bez uszkadzania struktury pliku. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Dlaczego to jest ważne*: Bezpośrednia edycja słowników COS (Content Object System) jest jedynym sposobem na wstrzyknięcie własnego stanu graficznego. Edytor ukrywa niskopoziomową składnię, jednocześnie utrzymując poprawność PDF. + +## Krok 4 – Pobierz istniejący słownik ExtGState + +Słownik **ExtGState** (external graphics state) przechowuje informacje o przezroczystości, trybie mieszania, grubości linii itp. Jeśli nie istnieje, Aspose.PDF utworzy go automatycznie po dodaniu nowego wpisu. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Dlaczego to jest ważne*: Bez wpisu `ExtGState` nie będziesz mógł odwołać się do własnej przezroczystości później w strumieniu zawartości strony. Ten krok zapewnia, że kontener jest obecny. + +## Krok 5 – Utwórz nowy stan graficzny z żądaną przezroczystością + +Stan graficzny to zbiór parametrów. Dla przezroczystości ustawiamy `CA` (stroke opacity) oraz `ca` (fill opacity). Dodatkowo definiujemy tryb mieszania (`BM`), aby kontrolować, jak przezroczyste piksele współdziałają z zawartością pod spodem. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Dlaczego to jest ważne*: `CA` i `ca` przyjmują wartości od 0 (całkowicie przezroczyste) do 1 (całkowicie nieprzezroczyste). Dostosuj te liczby, aby uzyskać pożądany efekt wizualny. Tryb mieszania `"Normal"` jest najczęściej używany, ale możesz eksperymentować z `"Multiply"` lub `"Screen"` dla artystycznych efektów. + +## Krok 6 – Zarejestruj nowy stan graficzny w kolekcji ExtGState + +Każdy stan graficzny musi mieć unikalną nazwę (np. `GS0`). Dodajemy nasz słownik do kolekcji `ExtGState`, a następnie aktualizujemy zasoby strony. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Dlaczego to jest ważne*: Dzięki nazwie stanu (`GS0`) możesz odwołać się do niego później w strumieniu zawartości strony przy użyciu operatora `gs`. Jeśli potrzebujesz kilku poziomów przezroczystości, utwórz dodatkowe wpisy (`GS1`, `GS2`, …). + +## Krok 7 – Zastosuj stan graficzny do poleceń rysowania (opcjonalnie) + +Jeśli chcesz natychmiast zastosować przezroczystość do istniejącej zawartości, musisz edytować strumień zawartości strony. Poniżej prosty przykład rysujący półprzezroczysty prostokąt przy użyciu nowo utworzonego stanu. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Dlaczego to jest ważne*: Operator `gs` (`SetGraphicsState`) instruuje renderer PDF, aby użył wartości przezroczystości zdefiniowanych w `GS0` dla wszystkich kolejnych poleceń rysowania. Para `gsave`/`grestore` zapewnia, że pozostałe elementy strony pozostają niezmienione. + +## Krok 8 – Zapisz zmodyfikowany PDF + +Na koniec zapisz zaktualizowany dokument na dysku. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Dlaczego to jest ważne*: Zapis finalizuje wszystkie zmiany, osadza nowy stan graficzny i tworzy plik PDF, który każdy przeglądarka (Adobe Acrobat, Chrome itp.) wyświetli z zamierzoną przezroczystością. + +### Oczekiwany rezultat + +Otwórz `output.pdf` w przeglądarce PDF. Powinieneś zobaczyć czerwony prostokąt, którego obrys ma 80 % nieprzezroczystości, a wypełnienie 40 % nieprzezroczystości, płynnie łącząc się z tłem. Reszta strony pozostaje niezmieniona. + +## Typowe warianty i przypadki brzegowe + +| Sytuacja | Co zmienić | Powód | +|-----------|----------------|--------| +| **Multiple opacity levels** | Utwórz dodatkowe stany graficzne (`GS1`, `GS2`, …) z różnymi wartościami `CA`/`ca` i odwołuj się do nich w potrzebnych miejscach | Umożliwia precyzyjną kontrolę nad różnymi elementami | +| **Different blend modes** | Użyj `"Multiply"`, `"Screen"`, `"Overlay"` itp., zamiast `"Normal"` w wpisie `BM` | Tworzy artystyczne efekty mieszania | +| **Applying to an existing content stream** | Wstaw `SetGraphicsState` przed konkretnymi operatorami rysowania, które chcesz zmodyfikować | Zapobiega niepożądanej przezroczystości w niepowiązanych obiektach | +| **Large PDFs** | Przetwarzaj strony w pętli `foreach (Page p in doc.Pages)`, aby nie ładować całego pliku do pamięci jednocześnie | Poprawia wydajność i zmniejsza obciążenie pamięci | +| **No existing ExtGState** | Kod w Kroku 4 już tworzy słownik, jeśli go brak, więc nie wymaga dodatkowej obsługi | Gwarantuje, że słownik jest obecny | + +### Wskazówka profesjonalisty + +Gdy dodajesz wiele własnych stanów graficznych, zachowaj spójną konwencję nazewnictwa (`GS0`, `GS1`, …) i udokumentuj przeznaczenie każdego w bloku komentarzy. Ułatwi to przyszłą konserwację, szczególnie w projektach zespołowych. + +## Pełny, gotowy do uruchomienia przykład + +Poniżej znajduje się kompletny program, który możesz skopiować, wkleić i uruchomić. Zawiera wszystkie kroki, niezbędne dyrektywy `using` oraz komentarze. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Uruchom program, + +## Co warto się nauczyć dalej? + +Poniższe tutoriale obejmują tematy ściśle powiązane, 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 poznać alternatywne podejścia w własnych projektach. + +- [Ustaw tła obrazów w PDF przy użyciu Aspose.PDF for .NET: Kompletny przewodnik](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Jak tworzyć przerywane linie w PDF przy użyciu Aspose.PDF for .NET: Przewodnik krok po kroku](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Jak dostosować PDF przy użyciu Aspose.PDF for .NET: Ustaw marginesy strony i rysuj linie](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..9c0e9a208f 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. | +| [Zapisz dokument PDF przy użyciu Aspose.PDF – kompletny przewodnik](./save-pdf-document-with-aspose-pdf-complete-guide/) | Dowiedz się, jak zapisać dokument PDF przy użyciu Aspose.PDF w pełnym przewodniku krok po kroku. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/polish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..179adb4e9a --- /dev/null +++ b/pdf/polish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Zapisz dokument PDF przy użyciu Aspose.PDF, dowiedz się, jak dodawać + strony do PDF, wypełniać pola formularza PDF oraz tworzyć PDF z polami formularza + w jednym samouczku. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: pl +lastmod: 2026-08-08 +og_description: Zapisz dokument PDF przy użyciu Aspose.PDF i dowiedz się, jak dodawać + strony PDF, wypełniać pola formularza PDF oraz tworzyć PDF z polami formularza szybko + i niezawodnie. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Zapisz dokument PDF przy użyciu Aspose.PDF – przewodnik krok po kroku +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Zapisz dokument PDF przy użyciu Aspose.PDF – kompletny przewodnik +url: /pl/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Zapisz dokument PDF przy użyciu Aspose.PDF – kompletny przewodnik + +Jeśli potrzebujesz **zapisz dokument PDF**, który zawiera interaktywne pola formularza, ten tutorial pokazuje dokładnie, jak to zrobić. Zobaczysz, jak dodać strony PDF, utworzyć formularz PDF i wypełnić pole formularza PDF — wszystko przy użyciu Aspose.PDF dla .NET. + +W kolejnych sekcjach nauczysz się: + +* dodać wiele stron do nowego PDF, +* utworzyć pole tekstowe formularza na pierwszej stronie, +* umieścić adnotację widget dla tego samego pola na drugiej stronie, +* ustawić wartość pola (wypełnić pole formularza PDF), +* i w końcu **zapisz dokument PDF** na dysku. + +Żadne zewnętrzne narzędzia nie są wymagane; pełny, działający kod jest dołączony. + +## Wymagania wstępne + +* .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.7.2+). +* Ważna licencja Aspose.PDF for .NET lub darmowy klucz ewaluacyjny. +* Visual Studio 2022 (lub dowolne IDE C#). + +Dodaj pakiet NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Jak dodać strony PDF + +Pierwszym krokiem jest utworzenie pustego PDF i dodanie potrzebnych stron. Dodawanie stron przed definiowaniem pól formularza zapewnia, że współrzędne układu są dokładne. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Dlaczego to ważne:* Każdy obiekt `Page` reprezentuje drukowalny obszar. Dodając strony wcześniej, możesz odwoływać się do nich później przy pozycjonowaniu elementów formularza. + +## Jak utworzyć formularz PDF przy użyciu Aspose.PDF + +Formularz PDF składa się z **definicji pola** (logiczny kontener) oraz jednej lub więcej **adnotacji widget** (wizualna reprezentacja). Przykład tworzy `TextBoxField` o nazwie **Comments** na pierwszej stronie. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Dlaczego to ważne:* Współrzędne `Rectangle` wyrażone są w punktach (1 pt = 1/72 in). Dostosuj wartości, aby pasowały do Twojego projektu. + +## Wypełnij pole formularza PDF + +Możesz ustawić wartość pola programowo przed zapisaniem dokumentu. To jest sedno **wypełniania pola formularza PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Jeśli potrzebujesz wypełnić pole później (np. z danych wprowadzonych przez użytkownika), po prostu przypisz nowy ciąg znaków do `commentsField.Value` przed wywołaniem `Save`. + +## Dodaj adnotację widget dla tego samego pola na drugiej stronie + +Adnotacja widget sprawia, że pole formularza jest widoczne na stronie. Dodając drugi widget, to samo logiczne pole pojawia się na obu stronach, demonstrując **tworzenie PDF z polami formularza**, które rozciągają się na wiele stron. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Dlaczego to ważne:* Kolekcja `Widgets` może przechowywać dowolną liczbę wizualnych reprezentacji. Użytkownicy mogą wchodzić w interakcję z polem na dowolnej stronie, a wprowadzona wartość pozostaje zsynchronizowana. + +## Dołącz pole do adnotacji pierwszej strony + +Pola formularza muszą być dodane do kolekcji adnotacji strony, aby przeglądarka PDF mogła je renderować. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Zapisz dokument PDF + +Teraz, gdy formularz jest w pełni zdefiniowany, możesz **zapisz dokument PDF** w wybranej lokalizacji. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Gdy otworzysz `output.pdf` w Adobe Acrobat Reader lub dowolnej przeglądarce PDF, zobaczysz pole tekstowe na stronie 1 oraz pasujące pole na stronie 2. Wpisywanie tekstu w dowolnym polu aktualizuje to samo podległe pole. + +## Pełny, działający przykład + +Poniżej znajduje się kompletny program, który możesz skopiować‑wkleić do aplikacji konsolowej. Kompiluje się i generuje opisany PDF bez żadnych modyfikacji. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Oczekiwany wynik:** Plik o nazwie `output.pdf` zawierający dwie strony. Strona 1 pokazuje pole tekstowe oznaczone „Comments” w współrzędnych (100, 600). Strona 2 pokazuje to samo pole w (100, 400). Pole jest wstępnie wypełnione tekstem „Enter your feedback here”. Zmiana tekstu na którejkolwiek stronie aktualizuje tę samą wartość po ponownym zapisaniu dokumentu. + +## Częste pytania i obsługa przypadków brzegowych + +| Pytanie | Odpowiedź | +|----------|--------| +| *Czy mogę dodać więcej niż jeden widget dla tego samego pola?* | Tak. Dodaj dodatkowe obiekty `WidgetAnnotation` do `commentsField.Widgets`. Każdy widget może być umieszczony na dowolnej stronie. | +| *Co zrobić, jeśli muszę ustawić wygląd pola (czcionka, obramowanie, tło)?* | Użyj `commentsField.DefaultAppearance`, aby określić czcionkę i kolor, oraz ustaw właściwości `commentsField.Border` dla stylu linii. | +| *Jak uczynić pole tylko do odczytu?* | Ustaw `commentsField.ReadOnly = true;`. Pole nadal wyświetli swoją wartość, ale nie będzie mogło być edytowane przez użytkownika. | +| *Czy można wypełnić pole po utworzeniu PDF?* | Tak. Załaduj zapisany PDF przy użyciu `new Document("output.pdf")`, znajdź pole poprzez `pdfDocument.Form["Comments"]`, przypisz nową `Value` i ponownie wywołaj `Save`. | +| *Co zrobić, jeśli PDF musi być zgodny z PDF/A do archiwizacji?* | Po zbudowaniu dokumentu wywołaj `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` przed zapisaniem. | + +## Porady z pola + +* **Pro tip:** Trzymaj nazwę logicznego pola krótką i unikalną; jest to identyfikator, którego użyjesz przy programowym wypełnianiu formularza później. +* **Uwaga:** Nakładające się prostokąty widgetów. Nakładanie się powoduje artefakty renderowania w niektórych przeglądarkach. +* **Uwaga dotycząca wydajności:** Dodawanie wielu stron lub widgetów w pętli może być zoptymalizowane przez ponowne użycie jednej instancji `Rectangle` i jedynie zmianę jej współrzędnych. + +## Zakończenie + +Teraz wiesz, jak **zapisz dokument PDF**, który zawiera w pełni funkcjonalny formularz, jak **wypełnić pole formularza PDF**, oraz jak **dodać strony PDF** i **utworzyć PDF z polami formularza** przy użyciu Aspose.PDF dla .NET. Pełny przykład demonstruje kompletny przepływ od tworzenia dokumentu po ostateczne zapisanie. + +Następnie zapoznaj się z powiązanymi tematami, takimi jak **dodawanie pól wyboru**, **tworzenie list rozwijanych** lub **spłaszczanie formularza** w celu dystrybucji tylko do odczytu. Każdy z nich opiera się na tych samych zasadach omówionych tutaj i rozszerza Twoje możliwości automatyzacji PDF. + +Miłego kodowania! + +## Co powinieneś nauczyć się dalej? + +Poniższe tutoriale obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne działające przykłady kodu oraz krok‑po‑kroku wyjaśnienia, aby pomóc Ci opanować dodatkowe funkcje API i odkryć alternatywne podejścia implementacyjne w własnych projektach. + +- [Jak utworzyć PDF z Aspose – Dodaj pole formularza i strony](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Utwórz dokument PDF z Aspose – Dodaj stronę, pole tekstowe i formularz](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Jak dodać i wyodrębnić pola formularza PDF przy użyciu Aspose.PDF dla .NET: Kompletny przewodnik](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/polish/net/programming-with-pdf-pages/_index.md index 2ad374201b..81c64b5d95 100644 --- a/pdf/polish/net/programming-with-pdf-pages/_index.md +++ b/pdf/polish/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Samouczki obejmują instrukcje krok po kroku, szczegółowe przykłady kodu i ja | [Aktualizuj wymiary strony PDF](./update-dimensions/) | Dowiedz się, jak bez wysiłku aktualizować wymiary stron PDF za pomocą Aspose.PDF dla platformy .NET w tym kompleksowym przewodniku krok po kroku. | | [Powiększ zawartość strony w pliku PDF](./zoom-to-page-contents/) | Dowiedz się, jak powiększać zawartość stron w plikach PDF za pomocą Aspose.PDF dla .NET w tym kompleksowym przewodniku. Ulepsz swoje dokumenty PDF zgodnie ze swoimi konkretnymi potrzebami. | | [Dodaj numery stron PDF w C# – Pełny przewodnik krok po kroku](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Krok po kroku pokażemy, jak dodać numery stron do pliku PDF w C# przy użyciu Aspose.PDF dla .NET. | +| [Dodaj numerację Bates w pliku PDF przy użyciu Aspose – przewodnik krok po kroku](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Krok po kroku pokażemy, jak dodać numerację Bates do pliku PDF przy użyciu Aspose.PDF dla .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/polish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..5de7789e8b --- /dev/null +++ b/pdf/polish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Dodaj numerację Batesa do pliku PDF przy użyciu Aspose.Pdf w C#. Ten + tutorial pokazuje również, jak dodać pustą stronę do PDF i generować PDF programowo. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: pl +lastmod: 2026-08-08 +og_description: Dodaj numerację Bates do pliku PDF przy użyciu Aspose.Pdf w C#. Dowiedz + się, jak dodać pustą stronę do PDF, generować PDF programowo i zapisać finalny dokument + w kilka minut. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Dodaj numerację Bates do PDF za pomocą Aspose – kompletny przewodnik C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Dodaj numerację Bates w PDF przy użyciu Aspose – przewodnik krok po kroku +url: /pl/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Dodaj bates numbering pdf przy użyciu Aspose – przewodnik krok po kroku + +Dodanie bates numbering pdf przy użyciu Aspose.Pdf jest proste, gdy zrozumiesz podstawowe kroki. Jeśli potrzebujesz także dodać pustą stronę pdf lub generować pdf programowo, ten przewodnik zawiera wszystko, czego potrzebujesz. + +W tym samouczku: + +* Utwórz nowy dokument PDF od podstaw. +* Dodaj pustą stronę pdf, która będzie zawierać numery Bates. +* Skonfiguruj artefakt numeracji Bates z niestandardowym prefiksem. +* Zapisz PDF, aby numery pojawiły się w wygenerowanym pliku. + +Po zakończeniu będziesz mieć w pełni działającą aplikację konsolową C#, która generuje PDF zawierający numery Bates, takie jak **CASE‑1000**, **CASE‑1001**, … – typowe wymaganie w procesach prawnych i e‑discovery. + +## Wymagania wstępne + +* .NET 6.0 SDK lub nowszy (kod działa również z .NET Framework 4.8). +* Visual Studio 2022 lub dowolne IDE kompatybilne z C#. +* Ważna licencja Aspose.Pdf for .NET (lub darmowy klucz ewaluacyjny). +* Podstawowa znajomość składni C#. + +> **Wskazówka:** Jeśli uruchomisz kod bez licencji, Aspose doda małą znak wodny do wyjściowego PDF. + +## Krok 1: Skonfiguruj projekt i zaimportuj Aspose.Pdf + +Utwórz nowy projekt konsolowy i dodaj pakiet NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Dyrektywy `using` wymagane w przykładzie: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Te przestrzenie nazw dają dostęp do klas `Document`, `Page` i `BatesNumberingArtifact` używanych później. + +## Krok 2: Dodaj pustą stronę pdf + +Numer Bates musi być przypisany do strony, więc najpierw tworzymy pustą stronę, która otrzyma artefakt numeracji. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Klasa `Document` reprezentuje cały plik PDF, natomiast `Pages.Add()` wstawia nową, pustą stronę na końcu kolekcji stron dokumentu. Ponieważ dokument zaczyna się pusty, to wywołanie tworzy również pierwszą stronę. + +## Krok 3: Skonfiguruj artefakt numeracji Bates + +Teraz definiujemy, jak mają wyglądać numery Bates. `BatesNumberingArtifact` pozwala ustawić numer początkowy, prefiks, sufiks oraz opcje formatowania. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Dlaczego to ważne:** +Ustawienie `StartNumber` na **1000** odpowiada typowym konwencjom nazw plików spraw prawnych. `Prefix` zapewnia, że każdy numer pojawia się jako **CASE‑1000**, **CASE‑1001**, … co ułatwia wyszukiwanie i sortowanie. + +## Krok 4: Dołącz artefakt do strony + +Artefakt musi zostać dodany do kolekcji `Artifacts` strony, aby Aspose renderował go na każdej stronie podczas zapisywania. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Gdy dokument zostanie zapisany, Aspose automatycznie powiela artefakt na wszystkich stronach, zwiększając numer dla każdej kolejnej strony. + +## Krok 5: (Opcjonalnie) Dodaj dodatkowe strony + +Jeśli potrzebujesz więcej stron, po prostu powtórz `pdfDocument.Pages.Add()`. Artefakt numeracji Bates, który dołączyłeś w poprzednim kroku, automatycznie pojawi się na każdej nowej stronie. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Krok 6: Zapisz PDF – generuj pdf programowo + +Na koniec zapisz dokument na dysku. To jest moment, w którym numery Bates są renderowane na stronach. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Oczekiwany rezultat:** +Otwórz *BatesNumberedDocument.pdf* i zobaczysz trzy‑stronicowy PDF. Każda strona wyświetla numer Bates w prawym dolnym rogu: + +* Strona 1 → **CASE‑1000** +* Strona 2 → **CASE‑1001** +* Strona 3 → **CASE‑1002** + +Numery są automatycznie zwiększane, ponieważ artefakt jest dołączony do kolekcji stron. + +## Pełny, działający przykład + +Łącząc wszystko razem, oto kompletny program konsolowy, który możesz skopiować, wkleić i uruchomić: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Uruchom program poleceniem `dotnet run`. Po wykonaniu znajdź plik na pulpicie i zweryfikuj numery Bates. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Częste pytania i przypadki brzegowe + +### Co zrobić, jeśli potrzebuję innej czcionki lub pozycji? + +`BatesNumberingArtifact` udostępnia właściwości takie jak `FontSize`, `FontColor`, `HorizontalAlignment` i `VerticalAlignment`. Na przykład: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Jak wykluczyć konkretną stronę z numeracji? + +Utwórz osobny `BatesNumberingArtifact` dla stron, które chcesz numerować i dodaj go tylko do tych stron. Strony bez dołączonego artefaktu pozostaną nieponumerowane. + +### Czy to działa z istniejącymi plikami PDF? + +Tak. Zamiast `new Document()`, wczytaj istniejący plik: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Następnie dołącz artefakt do wybranych stron i zapisz. + +## Zakończenie + +Teraz wiesz, jak **add bates numbering pdf** przy użyciu Aspose.Pdf, jak **add blank page pdf**, oraz jak **generate pdf programmatically** w czystym, wielokrotnie używalnym rozwiązaniu C#. Podejście działa z dowolną liczbą stron, niestandardowymi prefiksami i opcjami stylizacji, dając pełną kontrolę nad ostatecznym dokumentem. + +Kolejne kroki, które możesz rozważyć: + +* Use **create pdf as + +## Co powinieneś się nauczyć dalej? + +Poniższe samouczki obejmują tematy ściśle powiązane, 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. + +- [Jak dodać i dostosować numery stron w PDF 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ć pustą stronę na końcu PDF przy użyciu Aspose.PDF dla .NET | Przewodnik krok po kroku](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Utwórz dokument PDF przy użyciu Aspose.PDF – Dodaj stronę, kształt i zapisz](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 90fccd5f48..b25171777e 100644 --- a/pdf/polish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/polish/net/programming-with-security-and-signatures/_index.md @@ -33,8 +33,10 @@ Samouczek zapewnia szczegółowy przegląd metod i technik zapewniających poufn | [Ustaw uprawnienia w pliku PDF](./set-privileges/) | Dowiedz się, jak ustawić uprawnienia PDF za pomocą Aspose.PDF dla .NET dzięki temu przewodnikowi krok po kroku. Skutecznie zabezpiecz swoje dokumenty. | | [Podpisz za pomocą karty inteligentnej, używając podpisu pliku PDF](./sign-with-smart-card-using-pdf-file-signature/) | Dowiedz się, jak podpisywać pliki PDF za pomocą karty inteligentnej za pomocą Aspose.PDF dla .NET. Postępuj zgodnie z tym przewodnikiem krok po kroku, aby uzyskać bezpieczne podpisy cyfrowe. | | [Podpisz kartą inteligentną, korzystając z pola podpisu](./sign-with-smart-card-using-signature-field/) | Dowiedz się, jak bezpiecznie podpisywać pliki PDF za pomocą karty inteligentnej za pomocą Aspose.PDF dla .NET. Postępuj zgodnie z naszym przewodnikiem krok po kroku, aby ułatwić wdrożenie. | +| [Samouczek podpisu PDF: weryfikacja cyfrowego podpisu PDF przy użyciu Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Dowiedz się, jak zweryfikować cyfrowy podpis w pliku PDF przy użyciu Aspose.PDF dla .NET. | | [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. | | [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. | +| [Weryfikacja podpisu PDF w C# z Aspose.PDF – kompletny przewodnik](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Dowiedz się, jak weryfikować podpisy PDF w C# przy użyciu Aspose.PDF – kompletny przewodnik krok po kroku. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/polish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/polish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..a6c0725dea --- /dev/null +++ b/pdf/polish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-08-08 +description: samouczek podpisu PDF, który pokazuje, jak zweryfikować cyfrowy podpis + PDF przy użyciu opcji weryfikacji podpisu i kodu C# – szybki przewodnik krok po + kroku +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: pl +lastmod: 2026-08-08 +og_description: Samouczek podpisu PDF prowadzi Cię przez weryfikację cyfrowego podpisu + PDF przy użyciu Aspose.PDF. Dowiedz się, jak skonfigurować opcje walidacji podpisu + i sprawdzić wynik. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: samouczek podpisu PDF – weryfikacja cyfrowych podpisów PDF w C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'samouczek podpisu PDF: weryfikacja cyfrowego podpisu PDF przy użyciu Aspose.PDF' +url: /pl/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# samouczek podpisu PDF – walidacja cyfrowego podpisu PDF w C# + +Jeśli potrzebujesz **pdf signature tutorial**, który dokładnie pokazuje, jak zweryfikować cyfrowy podpis PDF, ten przewodnik jest dla Ciebie. Zobaczysz, jak wczytać podpisany plik PDF, skonfigurować **signature validation options**, uruchomić walidację i wyświetlić wynik — wszystko przy użyciu przejrzystego, gotowego do uruchomienia kodu C#. + +Walidacja podpisu PDF jest niezbędna przy przetwarzaniu umów, faktur lub innych dokumentów o charakterze prawnym. Ten samouczek przeprowadza Cię przez cały proces, abyś mógł zintegrować sprawdzanie podpisów w własnych aplikacjach bez zgadywania, które wywołania API są wymagane. + +## Co osiągniesz + +Po zakończeniu tego samouczka będziesz potrafił: + +* Wczytać podpisany plik PDF przy użyciu Aspose.PDF. +* Skonfigurować **signature validation options**, np. algorytm skrótu. +* Wywołać metodę `Validate`, aby **validate pdf digital signature**. +* Wyświetlić czytelny komunikat „Signature valid” w konsoli. + +**Wymagania wstępne** + +* .NET 6.0 (lub nowszy) zainstalowany. +* Visual Studio 2022 (lub dowolne IDE C#). +* Pakiet NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Pro tip:** Użyj najnowszej wersji Aspose.PDF, aby uzyskać wsparcie dla algorytmów SHA‑3 oraz lepszą wydajność walidacji. + +## Krok 1: Zainstaluj pakiet NuGet Aspose.PDF + +Otwórz projekt w Visual Studio i uruchom następujące polecenie w Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Pakiet dodaje przestrzeń nazw `Aspose.Pdf`, w której znajduje się klasa `Document` oraz API związane z podpisami, z których będziesz korzystać. + +## Krok 2: Wczytaj podpisany dokument PDF + +Pierwsza linia kodu tworzy obiekt `Document`, który reprezentuje plik PDF znajdujący się na dysku. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Dlaczego to ważne:* Klasa `Document` analizuje strukturę PDF, udostępniając kolekcję `Signatures` zawierającą wszystkie osadzone podpisy cyfrowe. Jeśli ścieżka do pliku jest nieprawidłowa, zostanie zgłoszony wyjątek, więc przed uruchomieniem programu sprawdź ścieżkę. + +## Krok 3: Skonfiguruj opcje walidacji podpisu + +Możesz dostosować proces walidacji przy pomocy klasy `SignatureValidationOptions`. W tym samouczku określamy algorytm skrótu, ale możesz także ustawić sprawdzanie odwołań certyfikatów, weryfikację znacznika czasu i inne opcje. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Dlaczego to ważne:* Algorytm skrótu musi być taki sam, jak użyty przy tworzeniu podpisu. Niezgodny algorytm spowoduje niepowodzenie walidacji, nawet jeśli podpis jest technicznie poprawny. + +## Krok 4: Zweryfikuj pierwszy podpis + +Większość plików PDF zawiera pojedynczy podpis, ale kolekcja `Signatures` może przechowywać wiele. Ten przykład weryfikuje pierwszy element (`[0]`). Metoda `Validate` zwraca wartość Boolean wskazującą sukces. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Przypadek brzegowy:* Jeśli PDF nie zawiera żadnych podpisów, `document.Signatures.Count` będzie równe `0`, a dostęp do `[0]` spowoduje `IndexOutOfRangeException`. Zabezpiecz się przed tym prostym sprawdzeniem: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Krok 5: Wyświetl wynik walidacji + +Na koniec wypisz rezultat w konsoli. Ten krok demonstruje **check pdf signature** w formacie przyjaznym dla człowieka. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Po uruchomieniu programu powinieneś zobaczyć: + +``` +Signature valid: True +``` + +Jeśli podpis jest uszkodzony, używa nieobsługiwanego algorytmu lub certyfikat został odwołany, wynik będzie `False`. + +## Pełny, gotowy do uruchomienia przykład + +Skopiuj poniższy kod do nowego projektu konsolowego (`dotnet new console`) i zamień `YOUR_DIRECTORY/signed.pdf` na ścieżkę do swojego podpisanego pliku PDF. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Oczekiwany wynik + +``` +Signature valid: True +``` + +Jeśli walidacja podpisu się nie powiedzie, konsola wyświetli `Signature valid: False`. + +## Częste pytania i rozwiązywanie problemów + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## Kolejne kroki + +* Zbadaj **validate pdf signature** dla wielu podpisów, iterując po `document.Signatures`. +* Połącz ten samouczek z **check pdf signature** w API webowym, aby zapewnić weryfikację w czasie rzeczywistym dla przesyłanych kontraktów. +* Zagłęb się w **signature validation options**, takie jak sprawdzanie CRL/OCSP, weryfikacja znacznika czasu oraz własne magazyny zaufania. + +Masz teraz kompletny **pdf signature tutorial**, który pokazuje, jak **validate pdf digital signature** przy użyciu Aspose.PDF w C#. Śmiało dostosuj kod do własnego przepływu pracy, dodaj logowanie lub zintegrować go z większymi pipeline’ami przetwarzania dokumentów. Powodzenia w kodowaniu! + +## Co powinieneś nauczyć się dalej? + +Poniższe samouczki obejmują tematy ściśle powiązane, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne, działające przykłady kodu oraz szczegółowe wyjaśnienia, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia w własnych projektach. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/polish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..6bb87d71a8 --- /dev/null +++ b/pdf/polish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-08-08 +description: Sprawdź podpis PDF w C# przy użyciu Aspose.PDF. Dowiedz się, jak zweryfikować + cyfrowy podpis PDF i wyświetlić listę podpisów PDF w zaledwie kilku linijkach kodu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: pl +lastmod: 2026-08-08 +og_description: Sprawdź podpis PDF w C# przy użyciu Aspose.PDF. Ten przewodnik pokazuje, + jak zweryfikować cyfrowy podpis PDF, wyświetlić listę podpisów PDF oraz skutecznie + obsłużyć uszkodzone podpisy. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Weryfikacja podpisu PDF w C# – szybki samouczek Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Weryfikacja podpisu PDF w C# z Aspose.PDF – kompletny przewodnik +url: /pl/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Sprawdź podpis PDF w C# przy użyciu Aspose.PDF – kompletny przewodnik + +Jeśli potrzebujesz **zweryfikować podpis PDF** w aplikacji .NET, ten przewodnik pokaże Ci zwięzły sposób wykonania tego przy użyciu Aspose.PDF. Dowiesz się, jak **zweryfikować cyfrowy podpis PDF**, **wyświetlić listę podpisów PDF** oraz wykrywać naruszone podpisy w zaledwie kilku linijkach kodu. + +Samouczek obejmuje wszystko, od instalacji biblioteki po obsługę przypadków brzegowych, takich jak dokumenty bez podpisu czy zaszyfrowane pliki PDF. Po zakończeniu będziesz mógł zintegrować weryfikację podpisu w dowolnym projekcie C#, zapewniając autentyczność przychodzących plików PDF. + +**Wymagania wstępne** + +- .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.6+). +- Podstawowa znajomość C# i Visual Studio (lub dowolnego IDE, którego używasz). +- Licencja Aspose.PDF for .NET (bezpłatna wersja próbna działa w celach oceny). + +Jeśli spełniasz te wymagania, jesteś gotowy, aby rozpocząć weryfikację podpisów PDF. + +## Weryfikacja podpisu PDF – konfiguracja projektu + +1. **Dodaj pakiet NuGet Aspose.PDF** + Otwórz konsolę Package Manager i uruchom: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importuj wymagane przestrzenie nazw** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## Załaduj dokument PDF + +Pierwszy krok funkcjonalny to otwarcie PDF, który chcesz zbadać. Aspose.PDF odczytuje plik do pamięci, umożliwiając zapytania o jego podpisy. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Dlaczego to ważne** – Ładowanie dokumentu wewnątrz bloku `using` zapewnia szybkie zwolnienie uchwytu pliku, zapobiegając problemom z blokowaniem plików w długotrwale działających usługach. + +## Wyświetl listę podpisów PDF + +Zanim zweryfikujesz podpis, możesz chcieć wiedzieć, ile podpisów jest obecnych. Ten krok demonstruje możliwość **list PDF signatures**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Wyjaśnienie** + +- `document.Signatures` zwraca kolekcję obiektów `Signature`. +- `Count` informuje, ile podpisów istnieje. +- Każdy `Signature` udostępnia metadane takie jak `Id`, `SignatureType` i `Reason`, które mogą być przydatne w logach audytu. + +**Przypadek brzegowy** – Jeśli PDF nie zawiera podpisów, `Count` będzie równe `0` i pętla nie zostanie wykonana. Możesz obsłużyć ten scenariusz w elegancki sposób: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Walidacja cyfrowego podpisu PDF – wykrywanie naruszonych podpisów + +Teraz, gdy możesz wyliczyć podpisy, głównym zadaniem jest **zweryfikowanie integralności podpisu PDF**. Aspose.PDF udostępnia właściwość `IsCompromised`, która zwraca `true`, gdy kryptograficzny hash podpisu nie pasuje już do zawartości dokumentu. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Dlaczego to działa** + +- `Signature.IsCompromised` wykonuje pełną walidację kryptograficzną przy użyciu wbudowanego łańcucha certyfikatów. +- Operator LINQ `Any` zatrzymuje się przy pierwszym naruszonym podpisie, co sprawia, że sprawdzenie jest wydajne nawet w dokumentach z wieloma podpisami. + +### Obsługa wielu podpisów indywidualnie + +Jeśli potrzebujesz wiedzieć, który konkretny podpis nie powiódł się, iteruj zamiast używać `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Wskazówka:** Przechowuj wynik walidacji razem z `sig.Id` w bazie danych do późniejszej analizy forensic. + +## Wyświetl wyniki i rozważ przypadki brzegowe + +Poniżej znajduje się kompletny, uruchamialny program, który łączy powyższe kroki. Ładuje PDF, wyświetla wszystkie podpisy, waliduje je i wypisuje czytelny wynik. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Oczekiwany wynik (poprawne podpisy)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Oczekiwany wynik (naruszony podpis)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Typowe pułapki i jak ich unikać + +| Pułapka | Rozwiązanie | +|---------|-------------| +| PDF jest zabezpieczony hasłem. | Przekaż hasło za pomocą `document.Encrypt.Decrypt(password)` przed dostępem do `Signatures`. | +| Nie ustawiono licencji Aspose.PDF. | Użyj `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` aby uniknąć znaków wodnych wersji ewaluacyjnej. | +| Duże pliki PDF powodują wysokie zużycie pamięci. | Przetwarzaj plik w trybie strumieniowym (`Document.Load(stream)`) zamiast ładować cały plik jednorazowo. | + +## Podsumowanie + +Teraz wiesz, jak **zweryfikować podpis PDF** w C# przy użyciu Aspose.PDF, jak **zwalidować cyfrowy podpis PDF**, oraz jak **wyświetlić listę podpisów PDF** w celach raportowych lub audytowych. Pełny przykład demonstruje ładowanie dokumentu, wyliczanie jego podpisów, sprawdzanie każdego pod kątem naruszenia oraz obsługę typowych przypadków brzegowych. + +Kolejne kroki, które możesz rozważyć: + +- **Walidacja tokenów znaczników czasu** aby zapewnić, że podpis został utworzony przed wygaśnięciem certyfikatu. +- **Wyodrębnij certyfikaty podpisującego** (`sig.Certificate`) w celu walidacji własnego magazynu zaufania. +- **Zintegruj z ASP.NET Core** aby automatycznie odrzucać przesłane pliki PDF, które nie przejdą weryfikacji. + +Śmiało eksperymentuj z wieloma podpisami, własną logiką walidacji lub alternatywnymi bibliotekami PDF. Jeśli uznałeś ten przewodnik za pomocny, podziel się nim z zespołem lub dodaj własne wskazówki w komentarzach. + +## 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 zweryfikować PDF – Walidacja podpisu PDF przy użyciu Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [zweryfikuj podpis PDF w C# – Kompletny przewodnik do walidacji cyfrowego podpisu PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net weryfikacja cyfrowego podpisu](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/polish/net/text-operations/_index.md index 0da18b9e2a..2595282d11 100644 --- a/pdf/polish/net/text-operations/_index.md +++ b/pdf/polish/net/text-operations/_index.md @@ -164,6 +164,9 @@ Samouczek dotyczący kodu dla Aspose.PDF Net ### [Styl tekstu w oznaczonych plikach PDF przy użyciu Aspose.PDF dla .NET | Przewodnik po tworzeniu dostępnych i estetycznych plików PDF](./style-text-tagged-pdfs-aspose-pdf-net/) Dowiedz się, jak stylizować tekst w oznaczonych dokumentach PDF za pomocą Aspose.PDF dla .NET. Ten przewodnik obejmuje instalację, techniki i praktyczne zastosowania w celu zwiększenia dostępności. +### [Jak podsumować PDF za pomocą Aspose.Pdf.AI – przewodnik](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Dowiedz się, jak wykorzystać Aspose.Pdf.AI do automatycznego podsumowywania treści dokumentów PDF w aplikacjach .NET. + ## Dodatkowe zasoby - [Aspose.PDF dla dokumentacji sieciowej](https://docs.aspose.com/pdf/net/) diff --git a/pdf/polish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/polish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..5f551fb3db --- /dev/null +++ b/pdf/polish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Jak podsumować PDF za pomocą Aspose.Pdf.AI – dowiedz się, jak podsumować + PDF przy użyciu AI, wygenerować podsumowanie PDF i zapisać podsumowanie jako PDF. + Pełny kod i najlepsze praktyki. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: pl +lastmod: 2026-08-08 +og_description: Jak podsumować plik PDF za pomocą Aspose.Pdf.AI. Ten tutorial pokazuje, + jak podsumować PDF przy użyciu AI, wygenerować podsumowanie PDF oraz zapisać podsumowanie + jako PDF w kilku linijkach C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Jak podsumować PDF za pomocą Aspose.Pdf.AI – przewodnik krok po kroku +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Jak podsumować PDF za pomocą Aspose.Pdf.AI – przewodnik +url: /pl/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak podsumować PDF przy użyciu Aspose.Pdf.AI – przewodnik + +Jeśli potrzebujesz **jak podsumować PDF** szybko i niezawodnie, możesz pozwolić modelowi AI wykonać ciężką pracę. Ten samouczek pokazuje dokładnie, jak podsumować PDF przy użyciu AI, wygenerować podsumowanie PDF i zapisać podsumowanie jako PDF przy użyciu SDK Aspose.Pdf.AI dla .NET. Otrzymasz kompletny, działający przykład oraz wyjaśnienie każdej linii, abyś mógł dostosować rozwiązanie do własnych projektów. + +Przewodnik obejmuje: + +* Przygotowanie folderu źródłowego i klucza API +* Utworzenie `OpenAIClient`, który komunikuje się z modelem +* Konfigurowanie opcji podsumowania, takich jak temperatura i ścieżka dokumentu +* Budowanie `SummaryCopilot` i pobieranie tekstu podsumowania asynchronicznie +* Zapisywanie wygenerowanego podsumowania z powrotem do pliku PDF + +Nie są wymagane żadne zewnętrzne usługi poza punktem końcowym OpenAI, a kod działa z .NET 6+ oraz Aspose.Pdf.AI 23.7 (lub nowszą wersją). + +## Wymagania wstępne + +* **.NET 6 SDK** (lub dowolna nowsza wersja .NET) +* **Aspose.Pdf.AI for .NET** – zainstaluj przez NuGet: `dotnet add package Aspose.Pdf.AI` +* Klucz **OpenAI API** z dostępem do modelu, którego chcesz użyć (np. `gpt‑4o`) +* Plik PDF, który chcesz podsumować (przykład używa `SampleDocument.pdf`) + +Upewnij się, że folder określony w `dataDirectory` istnieje i że aplikacja ma uprawnienia do odczytu/zapisu. + +## Krok 1: Konfiguracja struktury projektu + +Utwórz projekt konsolowy (lub zintegrować kod z istniejącą aplikacją .NET). Minimalny plik `Program.cs` wygląda tak: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Dlaczego ta struktura ma znaczenie + +* **`await using`** automatycznie zwalnia `OpenAIClient`, zwalniając połączenia HTTP. +* **`Path.Combine`** tworzy ścieżki niezależne od systemu operacyjnego, zapobiegając błędom w Windows vs. Linux. +* **Temperature** kontroluje kreatywność; `0.5` daje zrównoważone, faktograficzne podsumowanie. +* **`GetSummaryAsync`** zwraca zwykły tekst, natomiast `SaveSummaryAsync` tworzy prawidłowy PDF, który zachowuje czcionki i układ. + +## Krok 2: Zrozumienie opcji podsumowania + +Klasa `OpenAISummaryCopilotOptions` pozwala precyzyjnie dostroić proces podsumowywania: + +| Opcja | Cel | Typowe wartości | +|--------|-----|-----------------| +| `WithTemperature(double)` | Kontroluje losowość. `0.0` = deterministyczny, `1.0` = bardzo kreatywny. | `0.3‑0.7` dla dokumentów biznesowych | +| `WithDocument(string)` | Ścieżka do źródłowego PDF. Musi być plikiem możliwym do odczytu. | Dowolna ścieżka bezwzględna lub względna | +| `WithPrompt(string)` *(optional)* | Niestandardowy prompt, aby ukierunkować model. | “Summarize the key findings in 150 words.” | + +Jeśli masz **duże PDFy** (powyżej 10 MB lub wiele stron), rozważ podzielenie dokumentu na mniejsze fragmenty przed podsumowaniem, aby uniknąć błędów limitu tokenów. SDK nie dzieli automatycznie; możesz użyć `PdfDocument` z `Aspose.Pdf`, aby wyodrębnić strony i podawać je pojedynczo. + +## Krok 3: Uruchom kod i zweryfikuj wynik + +1. Umieść `SampleDocument.pdf` w folderze `Data`, który wskazałeś. +2. Zastąp `"YOUR_API_KEY"` swoim prawdziwym kluczem OpenAI. +3. Uruchom `dotnet run`. + +W konsoli powinny pojawić się dwa sekcje: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Otwórz `Summary_out.pdf` w dowolnej przeglądarce PDF – będzie zawierał ten sam tekst podsumowania, sformatowany domyślną czcionką. PDF jest w pełni przeszukiwalny, ponieważ SDK osadza tekst jako standardową stronę PDF. + +## Krok 4: Typowe warianty i obsługa przypadków brzegowych + +### Podsumowanie tylko części dokumentu + +Jeśli potrzebujesz **podsumować pdf przy użyciu ai** dla konkretnego rozdziału, najpierw wyodrębnij ten zakres: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Następnie wskaż `WithDocument` na `Chapter5.pdf`. + +### Dostosowanie długości podsumowania + +Możesz wpłynąć na długość, dodając niestandardowy prompt: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Obsługa błędów API + +Problemy sieciowe lub limity kwoty generują `Aspose.Pdf.AI.Exceptions.AIException`. Owiń wywołanie w blok `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Zapisywanie podsumowania w niestandardowym układzie + +`SaveSummaryAsync` zapisuje zwykły tekst. Aby sformatować PDF (dodać tytuł, nagłówek lub branding), utwórz nowy `PdfDocument` i wstaw podsumowanie ręcznie: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Krok 5: Wskazówki dotyczące wydajności i najlepsze praktyki + +* **Ponowne użycie `OpenAIClient`** dla wielu podsumowań w tym samym procesie – tworzenie klienta jest tanie, ale ponowne użycie bazowego `HttpClient` zmniejsza wyczerpanie gniazd. +* **Cache'uj podsumowanie** jeśli źródłowy PDF się nie zmienia; możesz przechowywać tekst w bazie danych i pominąć wywołanie API + +## Co powinieneś się nauczyć dalej? + +Poniższe samouczki obejmują ściśle powiązane tematy, które rozwijają techniki przedstawione w tym przewodniku. Każdy zasób zawiera kompletne działające przykłady kodu z wyjaśnieniami krok po kroku, aby pomóc Ci opanować dodatkowe funkcje API i odkrywać alternatywne podejścia implementacyjne w własnych projektach. + +- [How to Extract & Save Specific PDF Pages Using Aspose.PDF for .NET - A Comprehensive Guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [How to Extract and Save PDF Attachments Using Aspose.PDF .NET: A Comprehensive Guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [How to Convert HTML to PDF with Aspose.PDF .NET: A Complete Guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/conversion-export/_index.md b/pdf/portuguese/net/conversion-export/_index.md index ed681c8160..bee95dda14 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. @@ -227,6 +227,9 @@ Um tutorial de código para Aspose.PDF Net ### [Conversão de PDF para TIFF no .NET usando Aspose.PDF: um guia passo a passo](./pdf-to-tiff-conversion-aspose-pdf-net/) Aprenda a converter documentos PDF em imagens TIFF usando o Aspose.PDF para .NET. Domine profundidades de cores personalizadas e técnicas avançadas de processamento de imagens. +### [Salvar PDF como HTML com Aspose.PDF – guia passo a passo](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Aprenda a converter PDFs em HTML preservando layout e recursos usando Aspose.PDF para .NET, com instruções detalhadas passo a passo. + ## 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-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/portuguese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..13025063d9 --- /dev/null +++ b/pdf/portuguese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-08 +description: Salvar PDF como HTML usando Aspose.PDF em C#. Aprenda a converter PDF + para HTML, ignorar imagens raster e lidar com casos de borda comuns. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: pt +lastmod: 2026-08-08 +og_description: Salvar PDF como HTML usando Aspose.PDF. Este guia mostra como converter + PDF para HTML, pular imagens raster e evitar armadilhas comuns. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Salvar PDF como HTML com Aspose.PDF – tutorial completo em C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Salvar PDF como HTML com Aspose.PDF – guia passo a passo +url: /pt/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salvar PDF como HTML com Aspose.PDF – guia passo a passo + +Se você precisa **salvar PDF como HTML** rapidamente, este tutorial mostra exatamente como fazer isso com Aspose.PDF para .NET. Seja construindo um aplicativo web visualizador de documentos ou exportando relatórios para indexação amigável ao SEO, você verá uma solução completa e executável que converte PDF para HTML enquanto lhe dá controle detalhado sobre imagens raster. + +Além da tarefa principal, também abordaremos as opções de **aspose pdf html conversion** que permitem ignorar imagens raster, ajustar o tratamento de CSS e gerenciar documentos grandes de forma eficiente. Ao final deste guia, você terá um programa autônomo que pode ser inserido em qualquer projeto .NET. + +## Pré-requisitos + +* .NET 6.0 SDK ou posterior (o código funciona também com .NET Core e .NET Framework) +* Visual Studio 2022 ou qualquer IDE que suporte C# +* Uma licença do Aspose.PDF para .NET (a avaliação gratuita funciona para testes) +* Um arquivo PDF chamado `report.pdf` colocado em uma pasta que você possa referenciar no código + +Nenhum pacote NuGet adicional é necessário além de `Aspose.Pdf`. + +## Etapa 1: Instalar o pacote NuGet Aspose.PDF + +Abra o terminal na pasta do seu projeto e execute: + +```bash +dotnet add package Aspose.Pdf +``` + +O pacote adiciona o namespace `Aspose.Pdf`, que contém a classe `Document` e o tipo `HtmlSaveOptions` usado para operações de **convert pdf to html**. + +## Etapa 2: Criar um projeto de console e adicionar diretivas using + +Crie uma nova aplicação de console se ainda não tiver uma: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Em seguida, abra `Program.cs` e adicione os namespaces necessários: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Essas diretivas dão acesso à API principal de PDF e às opções de salvamento HTML que controlam o processo **aspose convert pdf html**. + +## Etapa 3: Carregar o documento PDF + +A primeira linha operacional lê o PDF de origem em um objeto `Aspose.Pdf.Document`. Esse objeto representa todo o arquivo PDF na memória e fornece métodos para salvar, editar e extrair conteúdo. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Por que isso importa*: Carregar o documento uma única vez mantém o uso de memória previsível, especialmente para PDFs grandes. Se o arquivo não for encontrado, o Aspose lança uma `FileNotFoundException`, portanto, certifique-se de que o caminho está correto. + +## Etapa 4: Configurar as opções de salvamento HTML + +`HtmlSaveOptions` permite ajustar finamente como o PDF é convertido. Neste tutorial, ignoramos imagens raster para manter a saída leve, mas você pode mudar o modo para `EmbedAll` se precisar delas. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Pontos principais**: + +* `RasterImagesSavingMode.Skip` indica ao Aspose que ignore imagens bitmap (JPEG, PNG) durante a conversão. Isso é ideal quando o PDF de origem contém páginas escaneadas que você não precisa na visualização HTML. +* Você pode mudar para `EmbedAll` ou `External` se quiser que as imagens sejam salvas como arquivos separados. +* A propriedade `ResourcesFolder` torna‑se relevante apenas quando as imagens são salvas externamente. + +## Etapa 5: Salvar o documento como HTML + +Agora você grava o arquivo HTML no disco usando as opções configuradas. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Depois que esta chamada termina, `report.html` contém o conteúdo textual, gráficos vetoriais e layout preservados do PDF original, mas sem nenhuma imagem raster. Você pode abrir o arquivo em um navegador para verificar o resultado. + +## Saída esperada + +Quando você abrir `report.html` no Chrome ou Edge, deverá ver: + +* Todos os títulos, parágrafos e formas vetoriais renderizados corretamente. +* Nenhuma tag `` para imagens raster (elas são omitidas devido ao modo `Skip`). +* CSS limpo e minimalista, seja inline ou em uma folha de estilo separada, dependendo da opção escolhida. + +Se precisar confirmar que as imagens foram omitidas, inspecione o código‑fonte da página (`Ctrl+U`). Você não encontrará entradas ``. + +## Etapa 6: Lidar com casos de borda comuns + +### 6.1 PDFs grandes (> 100 MB) + +Para arquivos muito grandes, habilite streaming para reduzir a pressão de memória: + +```csharp +htmlOpts.Streaming = true; +``` + +### 6.2 PDFs protegidos por senha + +Se o PDF de origem estiver criptografado, forneça a senha antes de salvar: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Tentar salvar sem descriptografar lança uma `InvalidPasswordException`. + +### 6.3 Caracteres Unicode + +Aspose.PDF incorpora automaticamente fontes Unicode, mas você pode forçar uma fonte específica para renderização consistente: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Nomeação de arquivos personalizada para múltiplas páginas + +Se você quiser cada página do PDF como um arquivo HTML separado, defina: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Isso cria `report_page_1.html`, `report_page_2.html`, etc., o que pode ser útil para paginação em aplicações web. + +## Exemplo completo e executável + +Abaixo está o programa completo que incorpora todas as etapas discutidas. Copie‑o para `Program.cs`, ajuste os caminhos e execute `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verificação**: Após a execução, o console imprime a mensagem de sucesso. Abra o arquivo HTML gerado em um navegador para confirmar que o texto e os gráficos vetoriais aparecem corretamente e que as imagens raster foram omitidas. + +## Dicas profissionais e armadilhas + +* **Dica profissional**: Se você precisar das imagens raster posteriormente, altere `RasterImagesSavingMode` para `External` e defina `ResourcesFolder`. Isso cria uma sub‑pasta `images` com os bitmaps extraídos. +* **Cuidado**: Usar o modo padrão `Skip` em PDFs que dependem fortemente de imagens escaneadas produzirá áreas em branco onde essas imagens deveriam estar. Sempre teste com uma amostra representativa dos seus documentos. +* **Dica de desempenho**: Reutilizar uma única instância de `HtmlSaveOptions` para vários documentos reduz a sobrecarga de criação de objetos em conversões em lote. +* **Verificação de versão**: A API mostrada funciona com Aspose.PDF para .NET versão 23.9 e posteriores. Versões anteriores podem usar `HtmlSaveOptions.RasterImagesSavingMode` com um nome de enum ligeiramente diferente. + +## Conclusão + +Agora você sabe como **salvar PDF como HTML** usando Aspose.PDF, como controlar o tratamento de imagens raster e como lidar com desafios típicos como arquivos grandes, proteção por senha e saída HTML por página. Esta solução completa permite integrar a conversão de PDF para HTML em qualquer aplicação C# com confiança. + +### O que vem a seguir? + +* Explore **aspose pdf html conversion** para incorporação de fontes e personalização de CSS. +* Combine esta conversão com uma API web para servir HTML sob demanda. +* Experimente a direção oposta — **convert pdf to html** e depois de volta para PDF — para validar a fidelidade da conversão de ida e volta. + +Sinta‑se à vontade para experimentar as opções e compartilhe suas descobertas nos comentários ou nos fóruns da Aspose. Feliz codificação! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir abordam tópicos estreitamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Converter PDF para HTML em .NET usando Aspose.PDF sem salvar imagens](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [Conversão de PDF para HTML usando Aspose.PDF .NET: Salvar imagens como PNGs externos](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [Converter PDF para HTML com URLs de imagens personalizadas usando Aspose.PDF .NET: Um guia abrangente](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/portuguese/net/digital-signatures/_index.md index 2a6e4f62c0..3d95fb5459 100644 --- a/pdf/portuguese/net/digital-signatures/_index.md +++ b/pdf/portuguese/net/digital-signatures/_index.md @@ -64,6 +64,9 @@ Aprenda a carregar um PDF em C#, convertê‑lo para o padrão PDF/X‑4 e lista ### [Validar assinatura PDF com Aspose – Converter PDF para HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Aprenda a validar assinaturas PDF e converter documentos PDF para HTML usando Aspose.PDF. +### [Como validar PDF com Aspose.PDF – verificar a validade da assinatura PDF em C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Aprenda a validar a assinatura de PDFs usando Aspose.PDF em C#, verificando sua validade passo a passo. + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/portuguese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..627078f519 --- /dev/null +++ b/pdf/portuguese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Como validar PDF usando Aspose.PDF e validar assinatura digital de PDF. + Siga este guia passo a passo para verificar a assinatura do PDF rapidamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: pt +lastmod: 2026-08-08 +og_description: Como validar PDF usando Aspose.PDF. Aprenda a validar assinatura digital + de PDF e verificar a validade da assinatura de PDF em poucas linhas de código C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Como validar PDF – verificar a validade da assinatura PDF com Aspose.PDF + em C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Como validar PDF com Aspose.PDF – verificar a validade da assinatura PDF em + C# +url: /pt/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como validar PDF com Aspose.PDF – verificar a validade da assinatura PDF em C# + +Se você precisa **how to validate PDF** arquivos que contêm assinaturas digitais, este tutorial mostra uma solução completa. Você aprenderá a carregar um PDF, criar um validador de certificado e **check pdf signature** validade com Aspose.PDF para .NET. + +Validar uma assinatura digital de PDF é uma necessidade comum para conformidade, faturamento e troca segura de documentos. Ao final deste guia, você poderá verificar com confiança se um PDF assinado é confiável e entenderá como lidar com casos típicos, como certificados ausentes ou múltiplas assinaturas. + +## Pré-requisitos + +Antes de começar, certifique-se de que você tem: + +- .NET 6.0 ou posterior instalado +- Uma IDE como Visual Studio 2022 (qualquer editor que suporte C# funciona) +- Uma cópia licenciada do **Aspose.PDF for .NET** (a versão de avaliação gratuita funciona para avaliação) +- Um arquivo PDF assinado (`signed.pdf`) e, se a assinatura depender de uma CA privada, o certificado confiável correspondente (`trustedCertificate.pfx`) + +Nenhum pacote NuGet adicional é necessário além de `Aspose.PDF`. + +## Etapa 1: Instalar Aspose.PDF + +Abra um terminal na pasta do seu projeto e execute: + +```bash +dotnet add package Aspose.PDF +``` + +O comando adiciona a biblioteca mais recente do Aspose.PDF, que contém as classes `Document` e `CertificateValidator` usadas posteriormente. + +## Etapa 2: Carregar o documento PDF + +Carregar um PDF é a primeira operação que você realiza ao **how to load pdf** programaticamente. O construtor `Document` aceita um caminho de arquivo, um stream ou um array de bytes. Usar um caminho completo mantém o exemplo claro. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Por que isso importa:** O objeto `Document` representa todo o arquivo PDF na memória. Sem carregar o arquivo, você não pode acessar sua coleção `Signatures`, que é necessária para **check pdf signature** dados. + +## Etapa 3: Preparar o validador de certificado + +Uma assinatura digital é confiável somente se o certificado de assinatura encadeia até uma raiz que você confia. `CertificateValidator` permite apontar o Aspose.PDF para um repositório de certificados confiáveis ou um arquivo PFX específico. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Se o seu PDF usa uma CA pública que o Windows já confia, você pode omitir o `certPath` e instanciar `CertificateValidator` com seu construtor padrão. Fornecer um PFX personalizado é útil para ambientes PKI internos. + +## Etapa 4: Validar a primeira assinatura digital + +Um PDF pode conter múltiplas assinaturas. Para simplificar, este tutorial valida a primeira assinatura (`Signatures[0]`). O método `Validate` retorna `true` quando a assinatura está criptograficamente íntegra **e** o certificado de assinatura é confiável. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**O que acontece nos bastidores:** +- O método verifica o hash do conteúdo assinado em relação ao valor da assinatura. +- Ele constrói a cadeia de certificados usando o validador fornecido. +- O status de revogação (CRL/OCSP) é avaliado se o validador estiver configurado para isso. + +### Manipulando múltiplas assinaturas + +Se o seu PDF contém mais de uma assinatura, itere sobre a coleção `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Este padrão permite que você **check pdf signature** em cada página e reporte resultados individuais. + +## Etapa 5: Exibir o resultado da validação + +Finalmente, escreva o resultado no console. Em código de produção, provavelmente você registraria o resultado ou lançaria uma exceção para uma assinatura inválida. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Saída esperada no console + +``` +Valid +``` + +ou + +``` +Invalid +``` + +A mensagem reflete o boolean retornado por `Validate`. Um resultado “Invalid” pode indicar um documento adulterado, um certificado não confiável ou um certificado de assinatura expirado. + +## Etapa 6: Armadilhas comuns e dicas de boas práticas + +### 1. Certificado confiável ausente +Se você receber `Invalid` e souber que a assinatura deveria ser confiável, verifique se o certificado raiz correto foi fornecido ao `CertificateValidator`. Use a sobrecarga que aceita um `X509Certificate2Collection` para múltiplas raízes. + +### 2. Assinatura com referências externas +Algumas assinaturas cobrem conteúdo externo (por exemplo, um arquivo anexado). Garanta que os recursos externos estejam acessíveis; caso contrário, a verificação de hash falhará. + +### 3. Validação de timestamp +Uma assinatura pode incluir um token de timestamp. Para validá-lo, configure o validador para verificar os certificados da autoridade de timestamp (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Desempenho com PDFs grandes +Carregar um PDF com centenas de páginas pode consumir memória. Se você precisar apenas dos dados da assinatura, use `PdfFileEditor` para extrair o dicionário de assinatura sem renderizar as páginas. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Segurança de thread +Instâncias de `Document` não são seguras para uso em múltiplas threads. Crie um novo `Document` por thread ao validar muitos PDFs em paralelo. + +## Exemplo completo e executável + +Abaixo está o programa completo que você pode copiar, colar e executar após atualizar os caminhos dos arquivos. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Executar o programa** imprime uma linha para cada assinatura, indicando claramente se o PDF passa na verificação de **validate pdf digital signature**. + +## Conclusão + +Agora você sabe **how to validate PDF** arquivos que contêm assinaturas digitais usando Aspose.PDF para .NET. O tutorial abordou o carregamento de um PDF, a configuração de um validador de certificado, a verificação da validade da assinatura pdf, o tratamento de múltiplas assinaturas e a solução de problemas comuns. + +Em seguida, explore tópicos relacionados como **how to sign PDF**, **how to add timestamp tokens** e **how to extract signed content**. Essas extensões permitem que você construa um fluxo de trabalho completo e seguro de documentos de ponta a ponta em C#. + +--- + + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos estreitamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá-lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Como verificar PDF – Validar assinatura PDF com Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Como extrair informações de assinatura PDF usando Aspose.PDF .NET: Um guia passo a passo](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Como remover assinaturas digitais PDF usando Aspose.PDF .NET | Guia completo](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/portuguese/net/document-conversion/_index.md index d854650349..d21eaa0d5a 100644 --- a/pdf/portuguese/net/document-conversion/_index.md +++ b/pdf/portuguese/net/document-conversion/_index.md @@ -57,6 +57,7 @@ Você aprenderá a especificar configurações de conversão, extrair texto e im | [XML para PDF Definir caminho da imagem](./xml-to-pdfset-image-path/) | Aprenda a converter XML para PDF sem esforço usando o Aspose.PDF para .NET. Este guia detalhado orienta você passo a passo, da configuração à conclusão. | | [XPS para PDF](./xps-to-pdf/) Aprenda a converter arquivos XPS para PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Perfeito para desenvolvedores e entusiastas de documentos. | | [Converter PDF para PDF/X‑4 em C# – Tutorial ASP.NET PDF passo a passo](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Aprenda a converter PDFs para o padrão PDF/X‑4 usando Aspose.PDF para .NET em C# com este tutorial passo a passo. | +| [Tutorial de conversão PDF/X‑4 – definir padrão PDF e converter PDF usando Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Aprenda a definir o padrão PDF/X‑4 e converter PDFs usando Aspose.PDF para .NET neste tutorial passo a passo. | | [PDF para PNG tutorial – Converter páginas PDF para PNG em C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Aprenda a converter páginas de PDF em imagens PNG usando Aspose.PDF para .NET em C# com este tutorial passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/portuguese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..1739a8b3f3 --- /dev/null +++ b/pdf/portuguese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,228 @@ +--- +category: general +date: 2026-08-08 +description: Tutorial de conversão pdfx4 que mostra como definir o padrão PDF para + PDF/X‑4 e converter PDF com Aspose para conversão de formato confiável. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: pt +lastmod: 2026-08-08 +og_description: O tutorial de conversão pdfx4 explica como definir o padrão PDF para + PDF/X‑4 e realizar uma conversão confiável de PDF usando Aspose em C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Tutorial de conversão pdfx4 – definir padrão PDF e converter PDF usando + Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Tutorial de conversão pdfx4 – definir padrão PDF e converter PDF usando Aspose +url: /pt/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial de conversão pdfx4 – definir padrão PDF e converter PDF usando Aspose + +Se você precisa de um **tutorial de conversão pdfx4**, este guia o conduz por todo o processo de definir o padrão PDF para PDF/X‑4 e converter um PDF usando Aspose. Seja preparando arquivos prontos para impressão ou garantindo conformidade de arquivamento a longo prazo, você aprenderá um fluxo de trabalho confiável de **aspose pdf format conversion** que funciona com .NET 6 e versões posteriores. + +O tutorial cobre tudo, desde a configuração do projeto até o tratamento de casos extremos, como arquivos de origem ausentes ou recursos não suportados. Ao final do artigo você terá um programa C# autônomo que produz um arquivo compatível com PDF/X‑4 pronto para fluxos de trabalho subsequentes. + +## Pré-requisitos + +Antes de começar, certifique‑se de que você tem: + +- .NET 6 SDK ou mais recente instalado ([download here](https://dotnet.microsoft.com/download)) +- Uma licença válida do Aspose.PDF for .NET (a versão de avaliação gratuita funciona para testes) +- Visual Studio 2022, VS Code ou qualquer IDE que suporte desenvolvimento .NET +- Um arquivo PDF de origem que você deseja converter (coloque‑o em uma pasta conhecida) + +Esses requisitos garantem que o código seja executado sem configuração adicional. + +## Etapa 1: Criar um novo projeto console .NET + +Abra um terminal e execute os seguintes comandos para gerar um aplicativo console chamado `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Adicione o pacote NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +O pacote `Aspose.Pdf` fornece a classe `Document` e `PdfFormatConversionOptions` necessárias para operações de **convert pdf pdfx4**. + +## Etapa 2: Escrever o código de conversão + +Abra `Program.cs` (ou `Program.cs` se você estiver usando as novas declarações de nível superior) e substitua seu conteúdo pelo exemplo completo abaixo. O código demonstra **set pdf standard** para PDF/X‑4, realiza a conversão e inclui tratamento de erros para armadilhas comuns. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Por que cada parte importa + +- **Validação de argumentos** impede que o programa trave quando o usuário esquece o caminho do arquivo. +- **Carregamento de `Document`** lança uma exceção clara se o PDF de origem estiver ausente ou corrompido, o que é essencial para uma experiência robusta de **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** é onde você **set pdf standard**. Ao atribuir `PdfStandard.PdfX4`, o Aspose ajusta automaticamente os espaços de cor, incorpora fontes necessárias e grava os metadados PDF/X‑4 exigidos. +- **`FontEmbeddingMode.EmbedAll`** garante que todas as fontes usadas no PDF de origem sejam incorporadas, um requisito comum para PDFs prontos para impressão. +- **`doc.Convert`** realiza a real **aspose pdf format conversion**. O método grava o novo arquivo em uma única chamada, simplificando o fluxo de trabalho. + +## Etapa 3: Executar o conversor + +Compile o projeto e execute‑o com os caminhos de origem e destino: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Se tudo funcionar, o console exibirá: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Agora você pode abrir `output_pdfx4.pdf` em qualquer visualizador de PDF que suporte PDF/X‑4 (por exemplo, Adobe Acrobat Pro) e verificar a conformidade via *File → Properties → Standards*. + +## Etapa 4: Verificar conformidade PDF/X‑4 (opcional) + +Para pipelines de produção, pode ser útil validar programaticamente a saída. O Aspose fornece a classe `PdfComplianceChecker` (disponível no pacote `Aspose.Pdf`) que pode ser usada da seguinte forma: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Executar este trecho após a conversão fornece um resultado explícito de aprovação/reprovação, útil para pipelines automatizados de CI/CD. + +## Etapa 5: Armadilhas comuns e dicas de boas práticas + +| Problema | Por que acontece | Como evitar | +|----------|------------------|-------------| +| Falta de fontes no PDF de origem | As fontes são referenciadas mas não incorporadas, causando avisos de conversão | Use `FontEmbeddingMode.EmbedAll` como mostrado acima | +| PDF de origem contém objetos transparentes não permitidos no PDF/X‑4 | PDF/X‑4 proíbe certas mesclas de transparência | Pré‑procese o PDF com `doc.ProcessTransparentObjects()` antes da conversão | +| Arquivos grandes causam OutOfMemoryException | O documento inteiro é carregado na memória | Transmita a origem usando `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licença não aplicada | Versão de avaliação adiciona marcas d'água | Chame `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` antes de usar qualquer API do Aspose | + +Aplicar essas dicas garante uma experiência tranquila de **convert pdf pdfx4** em ambientes de produção. + +## Etapa 6: Expandindo o tutorial + +Depois de dominar o básico do **tutorial de conversão pdfx4**, você pode explorar: + +- **Conversão em lote**: percorrer uma pasta de PDFs e converter cada um para PDF/X‑4. +- **Injeção de metadados**: adicionar metadados XMP exigidos por determinadas gráficas. +- **Gerenciamento de perfil de cor**: anexar perfis ICC usando `doc.ColorSpace = ColorSpace.DeviceRGB;` antes da conversão. + +Todas essas extensões se baseiam na mesma fundação de **aspose pdf format conversion** demonstrada aqui. + +## Conclusão + +Este **tutorial de conversão pdfx4** mostrou como **set pdf standard** para PDF/X‑4, executar uma **convert pdf using Aspose** confiável e verificar o resultado. Agora você tem um programa C# completo e executável que pode ser integrado a pipelines maiores de processamento de documentos ou usado como uma ferramenta autônoma. Experimente processamento em lote, manipulação de metadados ou padrões PDF alternativos (PDF/A‑2b, PDF/UA) para aprofundar sua expertise em **aspose pdf format conversion**. + +Happy coding, and enjoy the confidence that comes with PDF/X‑4 compliant output! + +## 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. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/portuguese/net/document-creation/_index.md b/pdf/portuguese/net/document-creation/_index.md index 2d622305f6..6a85ab3323 100644 --- a/pdf/portuguese/net/document-creation/_index.md +++ b/pdf/portuguese/net/document-creation/_index.md @@ -76,9 +76,13 @@ Um tutorial de código para Aspose.PDF Net ### [Criar documento PDF com Aspose.PDF – adicionar página, forma e salvar](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Aprenda a criar um documento PDF, adicionar páginas e formas, e salvar o arquivo usando Aspose.PDF para .NET. + ### [Crie um documento PDF com Aspose.PDF – Guia passo a passo](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aprenda a criar documentos PDF com Aspose.PDF usando um guia passo a passo detalhado. +### [Criar documento PDF em C# com Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Aprenda a criar um documento PDF em C# usando Aspose.PDF passo a passo. + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/portuguese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..c5bcc01d0c --- /dev/null +++ b/pdf/portuguese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Criar documento PDF em C# usando Aspose.Pdf. Aprenda como adicionar uma + página em branco ao PDF, inserir um parágrafo no PDF e posicionar texto no PDF com + coordenadas precisas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: pt +lastmod: 2026-08-08 +og_description: Crie documento PDF em C# rapidamente. Este tutorial mostra como adicionar + uma página em branco ao PDF, adicionar um parágrafo ao PDF e posicionar texto no + PDF usando Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Criar documento PDF em C# com Aspose.Pdf – guia completo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Criar documento PDF em C# com Aspose.Pdf +url: /pt/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Criar documento PDF em C# com Aspose.Pdf + +Se você precisa **criar documento pdf** programaticamente, este guia mostra exatamente como fazer. Usando Aspose.Pdf para .NET você pode adicionar uma página pdf em branco, inserir um parágrafo no pdf e posicionar texto no pdf com precisão de pixel — tudo em poucas linhas de código C#. + +Você terminará o tutorial com um arquivo PDF totalmente funcional que contém uma nota posicionada nas coordenadas que você especificar. Sem ferramentas externas, sem edição manual — apenas código limpo e repetível que pode ser inserido em qualquer projeto .NET. + +## O que você vai aprender + +* Como **criar documento pdf** com Aspose.Pdf. +* A forma correta de **adicionar página pdf em branco** e por que uma página deve existir antes de adicionar conteúdo. +* Como **adicionar parágrafo ao pdf** e anexar uma tag personalizada (útil para extração ou estilização posterior). +* A técnica para **posicionar texto no pdf** usando a classe `Position`. +* Como salvar o resultado em disco e verificar a saída. + +**Pré‑requisitos** + +* .NET 6.0 ou superior (o código também funciona com .NET Framework 4.7+). +* Uma licença válida do Aspose.Pdf para .NET ou uma chave de avaliação gratuita. +* Uma IDE como Visual Studio 2022 ou VS Code com a extensão C#. + +> **Dica profissional:** Se você usar uma avaliação gratuita, o PDF gerado conterá uma pequena marca d'água. Registre uma licença para removê‑la. + +## Como criar documento pdf com Aspose.Pdf + +O primeiro passo é instanciar a classe `Document`. Esse objeto representa todo o arquivo PDF e oferece acesso a páginas, recursos e opções de salvamento. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Criar o documento **não** grava nada em disco ainda; ele apenas prepara uma representação em memória que você pode manipular. Essa abordagem mantém a API rápida e eficiente em memória. + +## Adicionar página pdf em branco usando Aspose.Pdf + +Um PDF deve conter ao menos uma página antes que você possa colocar qualquer conteúdo. Adicionar uma página em branco é uma única chamada de método: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +O método `Add()` cria uma página com tamanho padrão (A4) e orientação (retrato). Se precisar de um tamanho diferente, passe uma instância de `PageSize` para `Add()`. + +## Adicionar parágrafo ao pdf e definir uma nota + +Agora que a página existe, você pode criar um objeto `Paragraph` que contém o texto visível. O parágrafo também pode carregar uma tag personalizada, o que é útil quando você precisar localizar ou estilizar o elemento programaticamente mais tarde. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Por que usar uma tag? + +Tags são metadados que viajam com o elemento PDF. Elas podem ser consultadas posteriormente com `Document.FindObject()` ou usadas por processadores de PDF que dependem de tags para acessibilidade ou indexação. + +## Posicionar texto no pdf com coordenadas precisas + +A colocação padrão de um parágrafo é o canto superior‑esquerdo da margem da página. Para mover o texto para um local exato, defina a propriedade `Position` na tag do parágrafo: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +As coordenadas são medidas em pontos (1 ponto = 1/72 polegada). A origem (0,0) está no canto inferior‑esquerdo da página, o que corresponde à maioria dos mecanismos de renderização PDF. Ajuste os valores `X` e `Y` conforme as necessidades do seu layout. + +Depois de posicionar, adicione o parágrafo à coleção da página: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Salvar o documento pdf + +Por fim, grave o PDF em memória em um arquivo. Você pode especificar o caminho de saída, o formato e até opções de criptografia. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Quando o programa terminar, `output.pdf` conterá uma única página com o texto **Important note** posicionado próximo ao canto superior‑direito (X = 50, Y = 750). Abra o arquivo em qualquer visualizador de PDF para verificar o posicionamento. + +![Documento PDF gerado com C# Aspose.Pdf mostrando nota posicionada](https://example.com/images/generated-pdf.png) + +*Texto alternativo da imagem: Documento PDF gerado com C# Aspose.Pdf mostrando nota posicionada* (inclui palavra‑chave principal). + +## Exemplo completo, executável + +Juntando todas as peças, aqui está um aplicativo de console completo que você pode copiar, compilar e executar: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Saída esperada** ao executar o programa: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Abrindo `output.pdf` você verá uma única página com o texto **Important note** posicionado nas coordenadas que você especificou. + +## Variações comuns e casos de borda + +| Cenário | O que mudar | Por que importa | +|----------|----------------|----------------| +| **Tamanho de página diferente** | `pdfDocument.Pages.Add(PageSize.A5)` | Páginas menores reduzem o tamanho do arquivo e se ajustam a telas móveis. | +| **Múltiplas notas** | Percorrer uma coleção de strings e criar um `Paragraph` para cada, incrementando a coordenada `Y`. | Permite a geração em lote de notas estilo bullet. | +| **Caracteres Unicode** | Garantir que o arquivo‑fonte esteja salvo como UTF‑8 e definir `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf suporta Unicode nativamente, mas a codificação do arquivo deve coincidir. | +| **PDF protegido por senha** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Adiciona segurança para notas confidenciais. | +| **Saída em alta resolução** | Definir `pdfDocument.PageInfo.Width` e `Height` para valores maiores antes de adicionar conteúdo. | Útil para impressão de PDFs em formato grande. | + +## Dicas para uso em produção + +* **Reutilize a instância `Document`** ao gerar muitos PDFs em uma única requisição para reduzir a pressão sobre o GC. +* **Dispose os objetos** (`pdfDocument.Dispose()`) se você criar muitos documentos dentro de um loop. +* **Valide as coordenadas**: o valor `Y` não pode exceder a altura da página; caso contrário o texto será cortado. +* **Use `TextFragmentAbsorber`** para extrair a nota posteriormente pela sua tag (`/P`) caso precise ler o conteúdo de volta. + +## Conclusão + +Agora você sabe como **criar documento pdf** com Aspose.Pdf, **adicionar página pdf em branco**, **adicionar parágrafo ao pdf**, **como adicionar nota pdf** e **posicionar texto no pdf** com precisão. O exemplo completo demonstra um fluxo limpo e repetível que pode ser estendido para faturas, relatórios ou qualquer cenário de automação de documentos. + +Em seguida, explore tópicos relacionados como **adicionar imagens ao pdf**, **construir tabelas com Aspose.Pdf** ou **aplicar assinaturas digitais**. Cada um desses se baseia nos mesmos conceitos centrais abordados aqui, de modo que você estará pronto para enfrentar tarefas de geração de PDF mais sofisticadas. + +Happy coding! + +## 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 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. + +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [How to Add an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [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/images-graphics/_index.md b/pdf/portuguese/net/images-graphics/_index.md index cf3042a283..98222d5801 100644 --- a/pdf/portuguese/net/images-graphics/_index.md +++ b/pdf/portuguese/net/images-graphics/_index.md @@ -131,7 +131,7 @@ Aprenda como extrair imagens de arquivos PDF com eficiência usando o Aspose.PDF ### [Como extrair imagens de PDFs usando Aspose.PDF para .NET: um guia passo a passo](./extract-images-aspose-pdf-net-guide/) Aprenda a extrair imagens de documentos PDF usando o Aspose.PDF para .NET com este guia completo. Perfeito para desenvolvedores que buscam aprimorar os recursos de processamento de documentos. -### [Como extrair imagens de páginas específicas de um PDF usando Aspose.PDF para .NET](./extract-images-pdfs-specific-pages-aspose-dotnet/) +### [Como extrair imagens de PDFs usando Aspose.PDF para .NET: um guia passo a passo](./extract-images-pdfs-specific-pages-aspose-dotnet/) Aprenda a extrair imagens de páginas específicas de um PDF com eficiência usando o Aspose.PDF para .NET. Este guia aborda dicas de configuração, implementação e desempenho. ### [Como extrair informações de páginas de PDF e renderizar imagens com Aspose.PDF para .NET (Guia 2023)](./extract-pdf-info-render-images-aspose-dotnet/) @@ -141,7 +141,7 @@ Aprenda a extrair dimensões de páginas e renderizar imagens de PDFs usando o A Aprenda a redimensionar, compactar e ajustar a qualidade de imagens em PDFs com eficiência usando o Aspose.PDF para .NET. Melhore o desempenho dos documentos e a experiência do usuário. ### [Como remover gráficos de PDFs usando Aspose.PDF .NET: um guia completo](./remove-graphics-aspose-pdf-net/) -Aprenda a remover gráficos de PDFs com eficiência usando o Aspose.PDF para .NET. Siga este guia passo a passo para organizar seus documentos e otimizar o tamanho dos arquivos. +Aprenda a remover gráficos de PDFs com eficiência usando o Aspose.PDF .NET. Siga este guia passo a passo para organizar seus documentos e otimizar o tamanho dos arquivos. ### [Como substituir imagens em PDFs usando Aspose.PDF .NET: um guia para desenvolvedores](./replace-images-pdf-aspose-net-guide/) Aprenda a substituir imagens em documentos PDF com eficiência usando o Aspose.PDF para .NET. Simplifique as atualizações de seus documentos com este guia completo para desenvolvedores. @@ -152,6 +152,9 @@ Aprenda a substituir imagens em documentos PDF com eficiência usando o Aspose.P ### [Como definir o tamanho da imagem em um PDF usando Aspose.PDF para .NET](./set-image-size-pdf-aspose-dotnet/) Aprenda a ajustar o tamanho das imagens em PDFs com o Aspose.PDF para .NET, perfeito para criar documentos e apresentações profissionais. +### [Definir opacidade de PDF em C# com Aspose.PDF – guia completo](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Aprenda a definir a opacidade de elementos em PDFs usando Aspose.PDF para .NET em C# com este guia passo a passo. + ### [Dominando o posicionamento de imagens em PDFs usando Aspose.PDF para .NET](./optimize-image-placement-aspose-pdf-net/) Aprenda a otimizar o posicionamento de imagens em documentos PDF com o Aspose.PDF para .NET. Melhore a qualidade e a eficiência dos seus documentos com guias práticos. diff --git a/pdf/portuguese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/portuguese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..9b8279be1d --- /dev/null +++ b/pdf/portuguese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Defina a opacidade de PDF em C# usando Aspose.PDF – aprenda a ajustar + a transparência de traço e preenchimento com algumas linhas de código. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: pt +lastmod: 2026-08-08 +og_description: Defina a opacidade de PDF em C# rapidamente. Este guia mostra como + modificar a transparência de traço e preenchimento usando a API de estado gráfico + do Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Defina a opacidade de PDF em C# com Aspose.PDF – tutorial passo a passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Defina a opacidade do PDF em C# com Aspose.PDF – guia completo +url: /pt/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Definir opacidade de PDF em C# com Aspose.PDF – guia completo + +Se você precisa **definir a opacidade de PDF** para operações de desenho específicas, este tutorial mostra exatamente como fazer isso com Aspose.PDF para .NET. Seja criando marcas d’água, sobreposições semitransparentes ou gráficos personalizados, você aprenderá uma abordagem concisa e pronta para produção. + +Nas seções a seguir, cobriremos tudo, desde o carregamento de um PDF até a edição de seu estado gráfico, a adição de uma nova definição de opacidade e a gravação do resultado. Nenhuma documentação externa é necessária — apenas o código abaixo e uma breve explicação de cada passo. + +## Pré-requisitos + +Antes de começar, certifique‑se de que você tem: + +* .NET 6.0 ou superior (o código também funciona com .NET Framework 4.7+) +* Uma licença válida do Aspose.PDF para .NET (a avaliação gratuita funciona para testes) +* Um arquivo PDF de entrada (`input.pdf`) localizado em uma pasta que você possa ler/escrever +* Visual Studio 2022 ou qualquer IDE C# de sua preferência + +## Etapa 1 – Carregar o documento PDF (Aspose.PDF para .NET) + +A primeira tarefa é abrir o PDF existente. Aspose.PDF representa um arquivo PDF com a classe `Document`, que fornece acesso total a páginas, recursos e objetos de baixo nível. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Por que isso importa*: Carregar o documento cria um modelo em memória que pode ser modificado com segurança. A instrução `using` garante que o manipulador de arquivo seja liberado automaticamente após a conclusão. + +## Etapa 2 – Obter a primeira página que você deseja editar + +A opacidade é definida por página através do dicionário de recursos da página. Aqui focamos na primeira página, mas você pode percorrer `doc.Pages` para uma operação em lote. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Por que isso importa*: Cada página possui sua própria coleção `Resources`, que armazena estados gráficos, fontes, imagens etc. Modificar a página correta garante que o efeito de opacidade apareça onde você espera. + +## Etapa 3 – Abrir o dicionário de recursos da página para edição + +Aspose.PDF fornece o auxiliar `DictionaryEditor` para manipular dicionários PDF de baixo nível sem quebrar a estrutura do arquivo. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Por que isso importa*: Editar diretamente os dicionários COS (Content Object System) do PDF é a única maneira de inserir um estado gráfico personalizado. O editor abstrai a sintaxe de baixo nível enquanto mantém o PDF válido. + +## Etapa 4 – Recuperar o dicionário ExtGState existente + +O dicionário **ExtGState** (estado gráfico externo) contém opacidade, modo de mesclagem, largura de linha etc. Se ele não existir, Aspose.PDF o cria automaticamente ao adicionar uma nova entrada. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Por que isso importa*: Sem uma entrada `ExtGState` você não pode referenciar uma opacidade personalizada mais tarde no fluxo de conteúdo da página. Esta etapa garante que o contêiner esteja presente. + +## Etapa 5 – Criar um novo estado gráfico com a opacidade desejada + +Um estado gráfico é uma coleção de parâmetros. Para opacidade definimos `CA` (opacidade de traço) e `ca` (opacidade de preenchimento). Também definimos um modo de mesclagem (`BM`) para controlar como os pixels transparentes interagem com o conteúdo subjacente. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Por que isso importa*: `CA` e `ca` aceitam valores de 0 (totalmente transparente) a 1 (totalmente opaco). Ajuste esses números para obter o efeito visual necessário. O modo de mesclagem `"Normal"` é o mais comum, mas você pode experimentar `"Multiply"` ou `"Screen"` para efeitos artísticos. + +## Etapa 6 – Registrar o novo estado gráfico na coleção ExtGState + +Todo estado gráfico deve ter um nome exclusivo (ex.: `GS0`). Adicionamos nosso dicionário à coleção `ExtGState` e, em seguida, atualizamos os recursos da página. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Por que isso importa*: Ao nomear o estado (`GS0`), você pode referenciá‑lo posteriormente no fluxo de conteúdo da página usando o operador `gs`. Se precisar de vários níveis de opacidade, crie entradas adicionais (`GS1`, `GS2`, …). + +## Etapa 7 – Aplicar o estado gráfico aos comandos de desenho (opcional) + +Se quiser aplicar a opacidade imediatamente ao conteúdo existente, é necessário editar o fluxo de conteúdo da página. Abaixo há um exemplo simples que desenha um retângulo semitransparente usando o estado recém‑criado. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Por que isso importa*: O operador `gs` (`SetGraphicsState`) instrui o renderizador PDF a usar os valores de opacidade definidos em `GS0` para quaisquer comandos de desenho subsequentes. O par `grestore`/`gsave` garante que outros elementos da página permaneçam inalterados. + +## Etapa 8 – Salvar o PDF modificado + +Por fim, grave o documento atualizado no disco. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Por que isso importa*: Salvar finaliza todas as alterações, incorpora o novo estado gráfico e produz um PDF que qualquer visualizador (Adobe Acrobat, Chrome, etc.) pode exibir com a transparência pretendida. + +### Resultado esperado + +Abra `output.pdf` em um visualizador de PDF. Você deverá ver um retângulo vermelho cujo contorno tem 80 % de opacidade e cujo preenchimento tem 40 % de opacidade, mesclando suavemente com qualquer conteúdo de fundo. O restante da página permanece inalterado. + +## Variações comuns e casos de borda + +| Situação | O que mudar | Motivo | +|-----------|----------------|--------| +| **Múltiplos níveis de opacidade** | Crie estados gráficos adicionais (`GS1`, `GS2`, …) com valores diferentes de `CA`/`ca` e referencie‑os onde for necessário | Permite controle granular sobre diferentes elementos | +| **Modos de mesclagem diferentes** | Use `"Multiply"`, `"Screen"`, `"Overlay"` etc., em vez de `"Normal"` na entrada `BM` | Produz efeitos artísticos de mesclagem | +| **Aplicar a um fluxo de conteúdo existente** | Insira `SetGraphicsState` antes dos operadores de desenho específicos que deseja afetar | Impede opacidade indesejada em objetos não relacionados | +| **PDFs grandes** | Processe páginas em um loop `foreach (Page p in doc.Pages)` para evitar carregar todo o arquivo na memória de uma vez | Melhora o desempenho e reduz a pressão de memória | +| **Nenhum ExtGState existente** | O código da Etapa 4 já cria um caso esteja ausente, portanto nenhum tratamento extra é necessário | Garante que o dicionário esteja presente | + +### Dica profissional + +Ao adicionar muitos estados gráficos personalizados, mantenha a nomenclatura consistente (`GS0`, `GS1`, …) e documente o propósito de cada um em um bloco de comentários. Isso facilita a manutenção futura, especialmente em projetos colaborativos. + +## Exemplo completo, executável + +Abaixo está o programa completo que você pode copiar, colar e executar. Ele inclui todas as etapas, diretivas `using` necessárias e comentários. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Execute o programa, + +## 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. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..6572f3be5b 100644 --- a/pdf/portuguese/net/programming-with-forms/_index.md +++ b/pdf/portuguese/net/programming-with-forms/_index.md @@ -23,34 +23,35 @@ Estes tutoriais também fornecem exemplos de código detalhados, explicações c | --- | --- | | [Adicionar dica de ferramenta ao campo](./add-tooltip-to-field/) | Aprenda a adicionar dicas de ferramentas a campos de formulário em documentos PDF usando o Aspose.PDF para .NET neste guia passo a passo. Melhore a usabilidade e a experiência do usuário. | | [Preenchimento de texto em árabe](./arabic-text-filling/) | Aprenda a preencher texto em árabe em formulários PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Aprimore suas habilidades de manipulação de PDF. | -| [Caixa de combinação](./combo-box/) Aprenda a adicionar uma Caixa de Combinação a um PDF usando o Aspose.PDF para .NET. Siga nosso guia passo a passo para criar formulários PDF interativos facilmente. | -| [Criar documento](./create-doc/) | Aprenda a criar documentos PDF interativos com botões de opção usando o Aspose.PDF para .NET neste guia passo a passo abrangente. | -| [Excluir campo de formulário em documento PDF](./delete-form-field/) | Aprenda a excluir campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Perfeito para desenvolvedores e entusiastas de PDF. | -| [Determinar campo obrigatório no formulário PDF](./determine-required-field/) | Aprenda a determinar os campos obrigatórios em um formulário PDF usando o Aspose.PDF para .NET. Nosso guia passo a passo simplifica o gerenciamento de formulários e aprimora seu fluxo de trabalho de automação de PDF. | -| [XFA dinâmico para formulário Acro](./dynamic-xfa-to-acro-form/) | Aprenda como converter formulários XFA dinâmicos em AcroForms padrão usando o Aspose.PDF para .NET neste tutorial passo a passo. | -| [Preencher campo do formulário PDF](./fill-form-field/) Aprenda a preencher campos de formulários PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Automatize suas tarefas de PDF sem esforço. | -| [Preencher campos XFA](./fill-xfafields/) | Aprenda a preencher campos XFA programaticamente em PDFs usando o Aspose.PDF para .NET com este tutorial passo a passo. Descubra ferramentas simples e poderosas para manipulação de PDF. | -| [Achatar formulários em documento PDF](./flatten-forms/) | Aprenda a nivelar formulários em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Proteja seus dados sem esforço. | -| [Fonte do campo de formulário 14](./form-field-font-14/) | Aprenda a alterar a fonte dos campos de formulário em um documento PDF usando o Aspose.PDF para .NET. Guia passo a passo com exemplos de código e dicas para criar formulários PDF melhores. | -| [Obter coordenadas de campo de formulário PDF](./get-coordinates/) | Desbloqueie a manipulação de PDF com o Aspose.PDF para .NET! Aprenda a recuperar coordenadas de campos de formulário em apenas alguns passos simples. | -| [Obter campos da região em arquivo PDF](./get-fields-from-region/) Aprenda como extrair campos de uma região especificada em arquivos PDF sem esforço usando o Aspose.PDF para .NET neste guia abrangente. | -| [Obter valor de campo em documento PDF](./get-value-from-field/) | Aprenda como extrair facilmente valores de campos de formulário em um documento PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | -| [Obter valores de todos os campos em um documento PDF](./get-values-from-all-fields/) | Aprenda como extrair valores de todos os campos em um documento PDF usando o Aspose.PDF para .NET com este guia passo a passo. | -| [Obter XFAProperties](./get-xfaproperties/) | Aprenda a recuperar propriedades XFA usando o Aspose.PDF para .NET neste tutorial completo. Guia passo a passo incluído. | -| [Caixas de seleção agrupadas em documento PDF](./grouped-check-boxes/) | Aprenda a criar caixas de seleção agrupadas (botões de opção) em um documento PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | -| [Botões de opção horizontais e verticais](./horizontally-and-vertically-radio-buttons/) Aprenda a criar botões de opção alinhados horizontal e verticalmente em PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | -| [Modificar campo de formulário em documento PDF](./modify-form-field/) | Aprenda a modificar campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Perfeito para desenvolvedores que buscam aprimorar a funcionalidade do PDF. | -| [Mover campo de formulário](./move-form-field/) | Aprenda a mover campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este tutorial detalhado para modificar facilmente a localização das caixas de texto. | -| [Preservar Direitos](./preserve-rights/) | Preserve os direitos de formulário em seus documentos PDF com Aspose.PDF para .NET. | -| [Botão de rádio](./radio-button/) | Aprenda a criar botões de opção interativos em documentos PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | -| [Botão de rádio com opções](./radio-button-with-options/) Libere o potencial dos PDFs interativos adicionando botões de opção com o Aspose.PDF para .NET. Crie formulários envolventes com facilidade e melhore a experiência do usuário. | -| [Recuperar campo de formulário em ordem de tabulação](./retrieve-form-field-in-tab-order/) | Aprenda a recuperar e modificar campos de formulário em ordem de tabulação usando o Aspose.PDF para .NET. Guia passo a passo com exemplos de código para agilizar a navegação em formulários PDF. | -| [Selecionar botão de opção no documento PDF](./select-radio-button/) | Aprenda a selecionar botões de opção em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Automatize interações de formulários facilmente. | -| [Definir limite de campo](./set-field-limit/) | Aprenda a definir limites de campo em formulários PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Aprimore a experiência do usuário e a integridade dos dados. | -| [Definir Java Script](./set-java-script/) | Libere o poder do Aspose.PDF para .NET. Aprenda a configurar JavaScript em campos de formulário com nosso guia passo a passo. | -| [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. | +| [Caixa de combinação](./combo-box/) Aprenda a adicionar uma Caixa de Combinação a um PDF usando o Aspose.PDF para .NET. Siga nosso guia passo a passo para criar formulários PDF interativos facilmente. | +| [Criar documento](./create-doc/) | Aprenda a criar documentos PDF interativos com botões de opção usando o Aspose.PDF para .NET neste guia passo a passo abrangente. | +| [Excluir campo de formulário em documento PDF](./delete-form-field/) | Aprenda a excluir campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Perfeito para desenvolvedores e entusiastas de PDF. | +| [Determinar campo obrigatório no formulário PDF](./determine-required-field/) | Aprenda a determinar os campos obrigatórios em um formulário PDF usando o Aspose.PDF para .NET. Nosso guia passo a passo simplifica o gerenciamento de formulários e aprimora seu fluxo de trabalho de automação de PDF. | +| [XFA dinâmico para formulário Acro](./dynamic-xfa-to-acro-form/) | Aprenda como converter formulários XFA dinâmicos em AcroForms padrão usando o Aspose.PDF para .NET neste tutorial passo a passo. | +| [Preencher campo do formulário PDF](./fill-form-field/) Aprenda a preencher campos de formulários PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Automatize suas tarefas de PDF sem esforço. | +| [Preencher campos XFA](./fill-xfafields/) | Aprenda a preencher campos XFA programaticamente em PDFs usando o Aspose.PDF para .NET com este tutorial passo a passo. Descubra ferramentas simples e poderosas para manipulação de PDF. | +| [Achatar formulários em documento PDF](./flatten-forms/) | Aprenda a nivelar formulários em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Proteja seus dados sem esforço. | +| [Fonte do campo de formulário 14](./form-field-font-14/) | Aprenda a alterar a fonte dos campos de formulário em um documento PDF usando o Aspose.PDF para .NET. Guia passo a passo com exemplos de código e dicas para criar formulários PDF melhores. | +| [Obter coordenadas de campo de formulário PDF](./get-coordinates/) | Desbloqueie a manipulação de PDF com o Aspose.PDF para .NET! Aprenda a recuperar coordenadas de campos de formulário em apenas alguns passos simples. | +| [Obter campos da região em arquivo PDF](./get-fields-from-region/) Aprenda como extrair campos de uma região especificada em arquivos PDF sem esforço usando o Aspose.PDF para .NET neste guia abrangente. | +| [Obter valor de campo em documento PDF](./get-value-from-field/) | Aprenda como extrair facilmente valores de campos de formulário em um documento PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | +| [Obter valores de todos os campos em um documento PDF](./get-values-from-all-fields/) | Aprenda como extrair valores de todos os campos em um documento PDF usando o Aspose.PDF para .NET com este guia passo a passo. | +| [Obter XFAProperties](./get-xfaproperties/) | Aprenda a recuperar propriedades XFA usando o Aspose.PDF para .NET neste tutorial completo. Guia passo a passo incluído. | +| [Caixas de seleção agrupadas em documento PDF](./grouped-check-boxes/) | Aprenda a criar caixas de seleção agrupadas (botões de opção) em um documento PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | +| [Botões de opção horizontais e verticais](./horizontally-and-vertically-radio-buttons/) Aprenda a criar botões de opção alinhados horizontal e verticalmente em PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | +| [Modificar campo de formulário em documento PDF](./modify-form-field/) | Aprenda a modificar campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Perfeito para desenvolvedores que buscam aprimorar a funcionalidade do PDF. | +| [Mover campo de formulário](./move-form-field/) | Aprenda a mover campos de formulário em documentos PDF usando o Aspose.PDF para .NET com este tutorial detalhado para modificar facilmente a localização das caixas de texto. | +| [Preservar Direitos](./preserve-rights/) | Preserve os direitos de formulário em seus documentos PDF com Aspose.PDF para .NET. | +| [Botão de rádio](./radio-button/) | Aprenda a criar botões de opção interativos em documentos PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. | +| [Botão de rádio com opções](./radio-button-with-options/) Libere o potencial dos PDFs interativos adicionando botões de opção com o Aspose.PDF para .NET. Crie formulários envolventes com facilidade e melhore a experiência do usuário. | +| [Recuperar campo de formulário em ordem de tabulação](./retrieve-form-field-in-tab-order/) | Aprenda a recuperar e modificar campos de formulário em ordem de tabulação usando o Aspose.PDF para .NET. Guia passo a passo com exemplos de código para agilizar a navegação em formulários PDF. | +| [Selecionar botão de opção no documento PDF](./select-radio-button/) | Aprenda a selecionar botões de opção em documentos PDF usando o Aspose.PDF para .NET com este guia passo a passo. Automatize interações de formulários facilmente. | +| [Definir limite de campo](./set-field-limit/) | Aprenda a definir limites de campo em formulários PDF usando o Aspose.PDF para .NET com este tutorial passo a passo. Aprimore a experiência do usuário e a integridade dos dados. | +| [Definir Java Script](./set-java-script/) | Libere o poder do Aspose.PDF para .NET. Aprenda a configurar JavaScript em campos de formulário com nosso guia passo a passo. | +| [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. | +| [Salvar documento PDF com Aspose.PDF – guia completo](./save-pdf-document-with-aspose-pdf-complete-guide/) | Aprenda a salvar documentos PDF usando Aspose.PDF em .NET com este guia passo a passo completo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/portuguese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..5a736bd4ca --- /dev/null +++ b/pdf/portuguese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Salve documentos PDF usando Aspose.PDF, aprenda como adicionar páginas + ao PDF, preencher campos de formulário PDF e criar PDF com campos de formulário + em um único tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: pt +lastmod: 2026-08-08 +og_description: Salve documentos PDF com Aspose.PDF e descubra como adicionar páginas + PDF, preencher campos de formulário PDF e criar PDFs com campos de formulário de + forma rápida e confiável. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Salvar documento PDF com Aspose.PDF – guia passo a passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Salvar documento PDF com Aspose.PDF – guia completo +url: /pt/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salvar documento PDF com Aspose.PDF – guia completo + +Se você precisar **salvar documento PDF** que contém campos de formulário interativos, este tutorial mostra exatamente como fazer. Você verá como adicionar páginas PDF, criar um formulário PDF e preencher um campo de formulário PDF — tudo com Aspose.PDF para .NET. + +Nas seções a seguir você aprenderá a: + +* adicionar várias páginas a um novo PDF, +* criar um campo de formulário de caixa de texto na primeira página, +* colocar uma anotação de widget para o mesmo campo em uma segunda página, +* definir o valor do campo (preencher campo de formulário PDF), +* e, finalmente, **salvar documento PDF** no disco. + +Nenhuma ferramenta externa é necessária; o código completo e executável está incluído. + +## Pré-requisitos + +* .NET 6.0 ou posterior (o código também funciona com .NET Framework 4.7.2+). +* Uma licença válida do Aspose.PDF para .NET ou uma chave de avaliação gratuita. +* Visual Studio 2022 (ou qualquer IDE C#). + +Adicione o pacote NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Como adicionar páginas PDF + +O primeiro passo é criar um PDF vazio e adicionar as páginas que você precisa. Adicionar páginas antes de definir campos de formulário garante que as coordenadas de layout sejam precisas. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Por que isso importa:* Cada objeto `Page` representa uma tela imprimível. Ao adicionar páginas cedo, você pode referenciá‑las depois ao posicionar os elementos do formulário. + +## Como criar formulário PDF com Aspose.PDF + +Um formulário PDF consiste em uma **definição de campo** (o contêiner lógico) e uma ou mais **anotações de widget** (a representação visual). O exemplo cria um `TextBoxField` chamado **Comments** na primeira página. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Por que isso importa:* As coordenadas do `Rectangle` são expressas em pontos (1 pt = 1/72 in). Ajuste os valores para se adequar ao seu design. + +## Preencher campo de formulário PDF + +Você pode definir o valor do campo programaticamente antes de salvar o documento. Este é o núcleo de **populate PDF form field**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Se precisar preencher o campo mais tarde (por exemplo, a partir da entrada do usuário), basta atribuir uma nova string a `commentsField.Value` antes de chamar `Save`. + +## Adicionar uma anotação de widget para o mesmo campo na segunda página + +Uma anotação de widget torna o campo de formulário visível em uma página. Ao adicionar um segundo widget, o mesmo campo lógico aparece em ambas as páginas, demonstrando **create PDF with form fields** que se estendem por várias páginas. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Por que isso importa:* A coleção `Widgets` pode conter qualquer número de representações visuais. Os usuários podem interagir com o campo em qualquer página, e o valor inserido permanece sincronizado. + +## Anexar o campo às anotações da primeira página + +Os campos de formulário devem ser adicionados à coleção de anotações de uma página para que o visualizador de PDF possa renderizá‑los. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Salvar documento PDF + +Agora que o formulário está totalmente definido, você pode **salvar documento PDF** em um local de sua escolha. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Ao abrir `output.pdf` no Adobe Acrobat Reader ou em qualquer visualizador de PDF, você verá uma caixa de texto na página 1 e uma caixa correspondente na página 2. Digitar em qualquer uma das caixas atualiza o mesmo campo subjacente. + +## Exemplo completo e executável + +A seguir está o programa completo que você pode copiar‑colar em uma aplicação console. Ele compila e produz o PDF descrito sem nenhuma modificação. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Saída esperada:** Um arquivo chamado `output.pdf` contendo duas páginas. A página 1 mostra uma caixa de texto rotulada “Comments” nas coordenadas (100, 600). A página 2 mostra o mesmo campo em (100, 400). O campo está pré‑preenchido com “Enter your feedback here”. Alterar o texto em qualquer página atualiza o mesmo valor quando o documento for salvo novamente. + +## Perguntas comuns e tratamento de casos extremos + +| Question | Answer | +|----------|--------| +| *Can I add more than one widget for the same field?* | Yes. Append additional `WidgetAnnotation` objects to `commentsField.Widgets`. Each widget can be placed on any page. | +| *What if I need to set the field’s appearance (font, border, background)?* | Use `commentsField.DefaultAppearance` to specify a font and color, and set `commentsField.Border` properties for line style. | +| *How do I make the field read‑only?* | Set `commentsField.ReadOnly = true;`. The field will still display its value but cannot be edited by the user. | +| *Is it possible to populate the field after the PDF is created?* | Yes. Load the saved PDF with `new Document("output.pdf")`, locate the field via `pdfDocument.Form["Comments"]`, assign a new `Value`, and call `Save` again. | +| *What if the PDF must conform to PDF/A for archiving?* | After building the document, call `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` before saving. | + +## Dicas do especialista + +* **Pro tip:** Keep the logical field name short and unique; it’s the identifier you’ll use when programmatically filling the form later. +* **Watch out for:** Overlapping widget rectangles. Overlaps cause rendering artifacts in some viewers. +* **Performance note:** Adding many pages or widgets in a tight loop can be optimized by reusing a single `Rectangle` instance and only changing its coordinates. + +## Conclusão + +Agora você sabe como **salvar documento PDF** que contém um formulário totalmente funcional, como **populate PDF form field**, e como **how to add pages PDF** e **create PDF with form fields** usando Aspose.PDF para .NET. O exemplo completo demonstra o fluxo de trabalho de ponta a ponta, da criação do documento até a gravação final. + +Em seguida, explore tópicos relacionados como **adding check boxes**, **creating drop‑down lists**, ou **flattening the form** para distribuição somente leitura. Cada um desses se baseia nos mesmos princípios abordados aqui e amplia suas capacidades de automação de PDF. + +Boa codificação! + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos intimamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/portuguese/net/programming-with-pdf-pages/_index.md index bd2b7284a2..efb6436846 100644 --- a/pdf/portuguese/net/programming-with-pdf-pages/_index.md +++ b/pdf/portuguese/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Os tutoriais incluem instruções passo a passo, exemplos de código detalhados | [Atualizar dimensões da página PDF](./update-dimensions/) | Descubra como atualizar as dimensões de páginas PDF sem esforço com o Aspose.PDF para .NET neste guia abrangente passo a passo. | | [Ampliar o conteúdo da página em arquivo PDF](./zoom-to-page-contents/) | Aprenda a aplicar zoom no conteúdo de páginas em arquivos PDF usando o Aspose.PDF para .NET neste guia completo. Aprimore seus documentos PDF de acordo com suas necessidades específicas. | | [Adicionar números de página PDF com C# – Guia completo passo a passo](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Aprenda a inserir números de página em PDFs usando C# com o Aspose.PDF, passo a passo. | +| [Adicionar numeração Bates a PDF com Aspose – guia passo a passo](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Aprenda a adicionar numeração Bates a arquivos PDF usando Aspose.PDF em um guia passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/portuguese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..b98ce9c145 --- /dev/null +++ b/pdf/portuguese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Adicionar numeração Bates em PDF usando Aspose.Pdf em C#. Este tutorial + também mostra como adicionar uma página em branco ao PDF e gerar PDF programaticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: pt +lastmod: 2026-08-08 +og_description: Adicione numeração Bates a PDFs com Aspose.Pdf em C#. Aprenda a adicionar + página em branco ao PDF, gerar PDFs programaticamente e salvar o documento final + em minutos. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Adicionar numeração Bates a PDF com Aspose – guia completo em C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Adicionar numeração Bates ao PDF com Aspose – guia passo a passo +url: /pt/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add bates numbering pdf with Aspose – guia passo a passo + +Adicionar bates numbering pdf com Aspose.Pdf é simples uma vez que você entende as etapas principais. Se você também precisar adicionar blank page pdf ou gerar pdf programmatically, este guia cobre tudo o que você precisa. + +In this tutorial you will: + +* Create a new PDF document from scratch. +* Add a blank page pdf that will host the Bates numbers. +* Configure the Bates numbering artifact with a custom prefix. +* Save the PDF so the numbers appear on the generated file. + +By the end you will have a fully functional C# console application that produces a PDF containing Bates numbers like **CASE‑1000**, **CASE‑1001**, … – a common requirement for legal and e‑discovery workflows. + +## Pré-requisitos + +* .NET 6.0 SDK ou posterior (o código também funciona com .NET Framework 4.8). +* Visual Studio 2022 ou qualquer IDE compatível com C#. +* Uma licença válida do Aspose.Pdf for .NET (ou uma chave de avaliação gratuita). +* Familiaridade básica com a sintaxe C#. + +> **Dica:** Se você executar o código sem uma licença, a Aspose adicionará uma pequena marca d'água ao PDF de saída. + +## Etapa 1: Configurar o projeto e importar Aspose.Pdf + +Create a new console project and add the Aspose.Pdf NuGet package: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +The `using` directives required for the example are: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +These namespaces give you access to the `Document`, `Page`, and `BatesNumberingArtifact` classes used later. + +## Etapa 2: Add a blank page pdf + +A Bates number must be attached to a page, so we first create a blank page that will receive the numbering artifact. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +The `Document` class represents the whole PDF file, while `Pages.Add()` inserts a new, empty page at the end of the document’s page collection. Because the document starts empty, this call also creates the first page. + +## Etapa 3: Configurar o BatesNumberingArtifact + +Now we define how the Bates numbers should look. The `BatesNumberingArtifact` lets you set the start number, prefix, suffix, and formatting options. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Por que isso importa:** +Setting `StartNumber` to **1000** matches typical legal case file conventions. The `Prefix` ensures each number appears as **CASE‑1000**, **CASE‑1001**, … which is easier to search and sort. + +## Etapa 4: Anexar o artifact à página + +The artifact must be added to the page’s `Artifacts` collection so that Aspose renders it on every page during saving. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +When the document is saved, Aspose automatically repeats the artifact on all pages, incrementing the number for each subsequent page. + +## Etapa 5: (Opcional) Adicionar páginas adicionais + +If you need more pages, simply repeat `pdfDocument.Pages.Add()`. The Bates numbering artifact you attached in the previous step will automatically appear on each new page. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Etapa 6: Salvar o PDF – gerar pdf programmatically + +Finally, persist the document to disk. This is the point where the Bates numbers are rendered onto the pages. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Resultado esperado:** +Open *BatesNumberedDocument.pdf* and you will see a three‑page PDF. Each page displays a Bates number in the bottom‑right corner: + +* Página 1 → **CASE‑1000** +* Página 2 → **CASE‑1001** +* Página 3 → **CASE‑1002** + +The numbers are automatically incremented because the artifact is attached to the page collection. + +## Exemplo completo e executável + +Putting everything together, here is a complete console program you can copy, paste, and run: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Run the program with `dotnet run`. After execution, locate the file on your desktop and verify the Bates numbers. + +![Exemplo de adição de numeração bates pdf](/images/bates-numbering.png "Exemplo de adição de numeração bates pdf") + +## Perguntas comuns e casos extremos + +### E se eu precisar de uma fonte ou posição diferente? + +The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, `HorizontalAlignment`, and `VerticalAlignment`. For example: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Como excluir uma página específica da numeração? + +Create a separate `BatesNumberingArtifact` for the pages you want to number and add it only to those pages. Pages without an attached artifact will remain unnumbered. + +### Isso funciona com PDFs existentes? + +Yes. Instead of `new Document()`, load an existing file: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Then attach the artifact to the desired pages and save. + +## Conclusão + +You now know how to **add bates numbering pdf** using Aspose.Pdf, how to **add blank page pdf**, and how to **generate pdf programmatically** in a clean, reusable C# solution. The approach works with any number of pages, custom prefixes, and styling options, giving you full control over the final document. + +Next steps you might explore: + +* Use **create pdf as + +## 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 adicionar e personalizar números de página em PDFs usando Aspose.PDF para .NET | Guia de Manipulação de Documentos](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Como adicionar uma página vazia ao final de um PDF usando Aspose.PDF para .NET | Guia passo a passo](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Criar documento PDF com Aspose.PDF – adicionar página, forma e salvar](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 bdab41d47d..4db66f77d4 100644 --- a/pdf/portuguese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/portuguese/net/programming-with-security-and-signatures/_index.md @@ -34,7 +34,9 @@ Este tutorial oferece uma visão geral detalhada de métodos e técnicas para ga | [Assinar com cartão inteligente usando assinatura de arquivo PDF](./sign-with-smart-card-using-pdf-file-signature/) | Aprenda a assinar arquivos PDF usando um cartão inteligente com o Aspose.PDF para .NET. Siga este guia passo a passo para assinaturas digitais seguras. | | [Assinar com cartão inteligente usando o campo de assinatura](./sign-with-smart-card-using-signature-field/) | Aprenda a assinar PDFs com segurança usando um cartão inteligente com o Aspose.PDF para .NET. Siga nosso guia passo a passo para uma implementação fácil. | | [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. | +| [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](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Aprenda a validar assinaturas PDF em C# usando Aspose.PDF, passo a passo, cobrindo verificação, extração e análise de certificados. | +| [Tutorial de assinatura PDF: validar uma assinatura digital PDF com Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Aprenda a validar assinaturas digitais em PDFs usando Aspose.PDF para .NET, passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/portuguese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/portuguese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..9f6e9dfc76 --- /dev/null +++ b/pdf/portuguese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-08-08 +description: tutorial de assinatura PDF que mostra como validar assinatura digital + de PDF usando opções de validação de assinatura e código C# – guia rápido passo + a passo +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: pt +lastmod: 2026-08-08 +og_description: O tutorial de assinatura de PDF orienta você na validação de uma assinatura + digital de PDF com Aspose.PDF. Aprenda a configurar as opções de validação de assinatura + e verificar o resultado. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: tutorial de assinatura PDF – validar assinaturas digitais de PDF em C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Tutorial de assinatura PDF: validar uma assinatura digital PDF com Aspose.PDF' +url: /pt/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial de assinatura pdf – validar uma assinatura digital PDF em C# + +Se você precisa de um **tutorial de assinatura pdf** que mostre exatamente como validar uma assinatura digital PDF, este guia tem tudo o que você precisa. Você verá como carregar um PDF assinado, configurar **opções de validação de assinatura**, executar a validação e exibir o resultado — tudo com código C# claro e executável. + +Validar a assinatura de um PDF é essencial quando você processa contratos, notas fiscais ou qualquer documento legalmente vinculativo. Este tutorial percorre todo o fluxo de trabalho, para que você possa integrar verificações de assinatura em suas próprias aplicações sem adivinhar quais chamadas de API são necessárias. + +## O que você vai alcançar + +Ao final deste tutorial você será capaz de: + +* Carregar um arquivo PDF assinado usando Aspose.PDF. +* Configurar **opções de validação de assinatura** como o algoritmo de hash. +* Chamar o método `Validate` para **validar assinatura digital pdf**. +* Exibir uma mensagem clara “Signature valid” no console. + +**Pré‑requisitos** + +* .NET 6.0 (ou superior) instalado. +* Visual Studio 2022 (ou qualquer IDE C#). +* Pacote NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Dica profissional:** Use a versão mais recente do Aspose.PDF para obter suporte a algoritmos SHA‑3 e desempenho aprimorado de validação. + +## Etapa 1: Instalar o pacote NuGet Aspose.PDF + +Abra seu projeto no Visual Studio e execute o seguinte comando no Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +O pacote adiciona o namespace `Aspose.Pdf`, que contém a classe `Document` e as APIs relacionadas a assinaturas que você usará. + +## Etapa 2: Carregar o documento PDF assinado + +A primeira linha de código cria um objeto `Document` que representa o arquivo PDF no disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Por que isso importa:* A classe `Document` analisa a estrutura do PDF, expondo a coleção `Signatures` que contém todas as assinaturas digitais incorporadas. Se o caminho do arquivo estiver incorreto, uma exceção será lançada, portanto verifique o caminho antes de executar o programa. + +## Etapa 3: Configurar opções de validação de assinatura + +Você pode adaptar o processo de validação com a classe `SignatureValidationOptions`. Neste tutorial especificamos o algoritmo de hash, mas também é possível definir verificações de revogação de certificado, validação de timestamp e muito mais. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Por que isso importa:* O algoritmo de hash deve coincidir com o usado quando a assinatura foi criada. Usar um algoritmo incompatível faz com que a validação falhe mesmo que a assinatura esteja correta. + +## Etapa 4: Validar a primeira assinatura + +A maioria dos PDFs contém uma única assinatura, mas a coleção `Signatures` pode armazenar várias. Este exemplo valida a primeira entrada (`[0]`). O método `Validate` retorna um Boolean indicando sucesso. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Caso extremo:* Se o PDF não possuir assinaturas, `document.Signatures.Count` será `0` e acessar `[0]` lançará um `IndexOutOfRangeException`. Proteja-se com uma verificação simples: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Etapa 5: Exibir o resultado da validação + +Por fim, escreva o resultado no console. Esta etapa demonstra o resultado do **check pdf signature** em um formato legível. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Ao executar o programa, você deverá ver: + +``` +Signature valid: True +``` + +Se a assinatura estiver corrompida, usar um algoritmo não suportado ou o certificado estiver revogado, a saída será `False`. + +## Exemplo completo e executável + +Copie o código a seguir para um novo projeto de console (`dotnet new console`) e substitua `YOUR_DIRECTORY/signed.pdf` pelo caminho do seu arquivo PDF assinado. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Saída esperada + +``` +Signature valid: True +``` + +Se a assinatura falhar na validação, o console exibirá `Signature valid: False`. + +## Perguntas comuns e solução de problemas + +| Pergunta | Resposta | +|----------|----------| +| **E se o PDF usar um algoritmo de hash diferente?** | Altere `HashAlgorithm` em `SignatureValidationOptions` para corresponder, por exemplo, `HashAlgorithm.SHA256`. | +| **Como validar todas as assinaturas em um PDF com múltiplas assinaturas?** | Percorra `document.Signatures` e chame `Validate` para cada entrada. | +| **Posso verificar a cadeia de confiança do certificado de assinatura?** | Defina `validationOptions.CheckCertificateRevocation = true` e, opcionalmente, forneça um `CertificateStore` personalizado para incluir certificados raiz confiáveis. | +| **E se eu precisar suportar validação de timestamp?** | Ative `validationOptions.CheckTimestamp = true`. O Aspose.PDF então verificará o token de timestamp incorporado. | +| **Existe uma forma de obter erros de validação detalhados?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contém `ErrorMessage` e `ErrorCode` para cada falha. | + +## Próximos passos + +* Explore **validate pdf signature** para múltiplas assinaturas iterando sobre `document.Signatures`. +* Combine este tutorial com **check pdf signature** em uma Web API para fornecer verificação em tempo real de contratos enviados. +* aprofunde-se em **signature validation options** como verificações CRL/OCSP, validação de timestamp e stores de confiança personalizados. + +Agora você tem um **tutorial de assinatura pdf** completo que mostra como **validar assinatura digital pdf** usando Aspose.PDF em C#. Sinta-se à vontade para adaptar o código ao seu fluxo de trabalho, adicionar logs ou integrá‑lo a pipelines maiores de processamento de documentos. Boa codificação! + +## 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 em seus próprios projetos. + +- [Tutorial de Assinatura Digital Aspose Pdf .NET](/pdf/german/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial de Assinatura Digital Aspose Pdf .NET](/pdf/french/net/digital-signatures/digital-signature-aspose-pdf-net-tutorial/) +- [Tutorial de Assinatura Digital Aspose Pdf .NET](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/portuguese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..13430a31ce --- /dev/null +++ b/pdf/portuguese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-08-08 +description: Verifique a assinatura de PDF em C# usando Aspose.PDF. Aprenda como validar + a assinatura digital de PDF e listar assinaturas de PDF em apenas algumas linhas + de código. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: pt +lastmod: 2026-08-08 +og_description: Verifique a assinatura de PDF em C# com Aspose.PDF. Este guia mostra + como validar assinaturas digitais de PDF, listar assinaturas de PDF e lidar eficientemente + com assinaturas comprometidas. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Verificar assinatura de PDF em C# – tutorial rápido do Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Verificar assinatura de PDF em C# com Aspose.PDF – guia completo +url: /pt/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verificar assinatura PDF em C# com Aspose.PDF – guia completo + +Se você precisa **verificar assinatura PDF** em uma aplicação .NET, este guia mostra uma maneira concisa de fazer isso com Aspose.PDF. Você aprenderá como **validar assinatura digital PDF**, **listar assinaturas PDF**, e detectar assinaturas comprometidas em apenas algumas linhas de código. + +O tutorial cobre tudo, desde a instalação da biblioteca até o tratamento de casos extremos, como documentos não assinados ou PDFs criptografados. Ao final, você será capaz de integrar a verificação de assinatura em qualquer projeto C#, garantindo a autenticidade dos arquivos PDF recebidos. + +**Pré-requisitos** + +- .NET 6.0 ou posterior (o código também funciona com .NET Framework 4.6+). +- Familiaridade básica com C# e Visual Studio (ou qualquer IDE de sua preferência). +- Uma licença Aspose.PDF for .NET (a avaliação gratuita funciona para testes). + +Se você atende a esses requisitos, está pronto para começar a verificar assinaturas PDF. + +## Verificar assinatura PDF – configurar o projeto + +1. **Adicionar o pacote NuGet Aspose.PDF** + Abra o Console do Gerenciador de Pacotes e execute: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Importar os namespaces necessários** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +## Carregar o documento PDF + +O primeiro passo funcional é abrir o PDF que você deseja inspecionar. Aspose.PDF lê o arquivo na memória, permitindo que você consulte suas assinaturas. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Por que isso importa** – Carregar o documento dentro de um bloco `using` garante que o manipulador de arquivo seja liberado rapidamente, evitando problemas de bloqueio de arquivo em serviços de longa execução. + +## Listar assinaturas PDF + +Antes de validar uma assinatura, você pode querer saber quantas assinaturas estão presentes. Esta etapa demonstra a capacidade de **listar assinaturas PDF**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explicação** + +- `document.Signatures` retorna uma coleção de objetos `Signature`. +- `Count` informa quantas assinaturas existem. +- Cada `Signature` expõe metadados como `Id`, `SignatureType` e `Reason`, que podem ser úteis para logs de auditoria. + +**Caso extremo** – Se o PDF não possuir assinaturas, `Count` será `0` e o loop não será executado. Você pode tratar esse cenário de forma elegante: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validar assinatura digital PDF – detectar assinaturas comprometidas + +Agora que você pode enumerar as assinaturas, a tarefa principal é **verificar a integridade da assinatura PDF**. Aspose.PDF fornece a propriedade `IsCompromised`, que retorna `true` quando o hash criptográfico da assinatura não corresponde mais ao conteúdo do documento. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Por que isso funciona** + +- `Signature.IsCompromised` realiza uma validação criptográfica completa usando a cadeia de certificados incorporada. +- O operador LINQ `Any` interrompe na primeira assinatura comprometida, tornando a verificação eficiente mesmo para documentos com muitas assinaturas. + +### Manipulando assinaturas múltiplas individualmente + +Se você precisar saber qual assinatura específica falhou, itere em vez de usar `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Dica profissional:** Armazene o resultado da validação junto com `sig.Id` em um banco de dados para análise forense posterior. + +## Exibir resultados e considerar casos extremos + +Abaixo está um programa completo e executável que combina as etapas acima. Ele carrega um PDF, lista todas as assinaturas, as valida e imprime um resultado claro. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Saída esperada (assinaturas válidas)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Saída esperada (assinatura comprometida)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Armadilhas comuns e como evitá‑las + +| Armadilha | Solução | +|-----------|----------| +| O PDF está protegido por senha. | Passe a senha via `document.Encrypt.Decrypt(password)` antes de acessar `Signatures`. | +| Nenhuma licença Aspose.PDF está definida. | Use `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` para evitar marcas d'água de avaliação. | +| PDFs grandes causam alto uso de memória. | Processar o arquivo em modo de streaming (`Document.Load(stream)`) em vez de carregar o arquivo inteiro de uma vez. | + +## Conclusão + +Agora você sabe como **verificar assinatura PDF** em C# usando Aspose.PDF, como **validar assinatura digital PDF**, e como **listar assinaturas PDF** para relatórios ou fins de auditoria. O exemplo completo demonstra como carregar um documento, enumerar suas assinaturas, verificar cada uma quanto a comprometimento e lidar com casos extremos típicos. + +Próximos passos que você pode explorar: + +- **Validar tokens de timestamp** para garantir que uma assinatura foi criada antes que o certificado expirasse. +- **Extrair certificados do assinante** (`sig.Certificate`) para validação personalizada de repositório de confiança. +- **Integrar com ASP.NET Core** para rejeitar automaticamente PDFs enviados que falhem na verificação. + +Sinta‑se à vontade para experimentar múltiplas assinaturas, lógica de validação personalizada ou bibliotecas PDF alternativas. Se você achou este guia útil, compartilhe com colegas ou adicione suas próprias dicas nos comentários. + +## O que você deve aprender a seguir? + +Os tutoriais a seguir cobrem tópicos estreitamente relacionados que se baseiam nas técnicas demonstradas neste guia. Cada recurso inclui exemplos de código completos e funcionais com explicações passo a passo para ajudá‑lo a dominar recursos adicionais da API e explorar abordagens de implementação alternativas em seus próprios projetos. + +- [Como Verificar PDF – Validar Assinatura PDF com Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verificar assinatura pdf em C# – Guia Completo para Validar Assinatura Digital PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verificar Assinatura Digital](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/portuguese/net/text-operations/_index.md index e406a5b1ea..aac9253be0 100644 --- a/pdf/portuguese/net/text-operations/_index.md +++ b/pdf/portuguese/net/text-operations/_index.md @@ -27,7 +27,7 @@ Aprenda a adicionar números de página usando o Aspose.PDF para .NET com um gui Aprenda a remover todo o texto de documentos PDF de forma eficiente usando o Aspose.PDF para .NET. Siga este guia passo a passo com exemplos de código e dicas de desempenho. ### [Crie e gire texto em PDFs usando Aspose.PDF .NET: um guia completo para desenvolvedores](./create-rotate-text-aspose-pdf-net/) -Aprenda a criar e girar texto em documentos PDF usando o Aspose.PDF para .NET. Este guia aborda inicialização, configuração de texto e layouts criativos em C#. +Aprenda a criar e girar texto em documentos PDF usando o Aspose.PDF .NET. Este guia aborda inicialização, configuração de texto e layouts criativos em C#. ### [Crie PDFs com texto recuado no .NET usando Aspose.PDF](./create-indented-text-pdfs-net-aspose-pdf/) Um tutorial de código para Aspose.PDF Net @@ -54,7 +54,7 @@ Aprenda a extrair fontes de documentos PDF com eficiência usando o Aspose.PDF p Aprenda a extrair valores de campos de PDFs usando o Aspose.PDF para .NET em C#. Este guia aborda instalação, implementação e práticas recomendadas. ### [Extrair parágrafos de PDF usando Aspose.PDF .NET: um guia completo para operações de texto](./extract-paragraphs-from-pdf-aspose-pdf-net/) -Aprenda a extrair parágrafos de documentos PDF com eficiência usando o Aspose.PDF para .NET. Este guia aborda configuração, implementação e aplicações práticas. +Aprenda a extrair parágrafos de documentos PDF com eficiência usando o Aspose.PDF .NET. Este guia aborda configuração, implementação e aplicações práticas. ### [Extraia texto de cada página usando Aspose.PDF para .NET: um guia completo](./aspose-pdf-net-extract-text-by-page/) Aprenda como extrair texto de cada página de um documento PDF com eficiência usando o Aspose.PDF para .NET com este tutorial passo a passo. @@ -108,7 +108,7 @@ Aprenda a usar o Aspose.PDF para .NET para abrir e pesquisar documentos PDF. Est Aprenda a dominar paradas de tabulação personalizadas em documentos PDF usando o Aspose.PDF para .NET, aprimorando suas habilidades de formatação e apresentação de documentos. ### [Domine a edição eficiente de texto em PDF com Aspose.PDF .NET](./aspose-pdf-net-edit-pdfs-efficiency/) -Aprenda a editar texto em PDF com eficiência usando o Aspose.PDF para .NET. Este guia aborda a configuração, pesquisa, modificação e salvamento de PDFs em C#. +Aprenda a editar texto em PDF com eficiência usando o Aspose.PDF .NET. Este guia aborda a configuração, pesquisa, modificação e salvamento de PDFs em C#. ### [Substituição de fontes em PDFs usando Aspose.PDF para .NET: um guia completo](./mastering-font-substitution-aspose-pdf-net/) Aprenda a lidar perfeitamente com substituições de fontes em documentos PDF com o Aspose.PDF para .NET. Este tutorial fornece orientações passo a passo sobre como configurar e implementar soluções eficazes. @@ -164,6 +164,8 @@ Um tutorial de código para Aspose.PDF Net ### [Estilizar texto em PDFs marcados usando Aspose.PDF para .NET | Guia para criação de PDFs acessíveis e estéticos](./style-text-tagged-pdfs-aspose-pdf-net/) Aprenda a estilizar texto em documentos PDF marcados com o Aspose.PDF para .NET. Este guia aborda instalação, técnicas e aplicações práticas para aprimorar a acessibilidade. +### [Como resumir PDF com Aspose.Pdf.AI – guia](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## Recursos adicionais - [Aspose.PDF para documentação da Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/portuguese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/portuguese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..91e3f3a0fd --- /dev/null +++ b/pdf/portuguese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-08-08 +description: Como resumir PDF com Aspose.Pdf.AI – aprenda a resumir PDF com IA, gerar + um resumo de PDF e salvar o resumo como PDF. Código completo e melhores práticas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: pt +lastmod: 2026-08-08 +og_description: Como resumir PDF com Aspose.Pdf.AI. Este tutorial mostra como resumir + PDF com IA, gerar um resumo de PDF e salvar o resumo como PDF em poucas linhas de + C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Como resumir PDF com Aspose.Pdf.AI – guia passo a passo +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Como resumir PDF com Aspose.Pdf.AI – guia +url: /pt/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como resumir PDF com Aspose.Pdf.AI – guia + +Se você precisa **como resumir PDF** rápida e confiavelmente, pode deixar que um modelo de IA faça o trabalho pesado. Este tutorial mostra exatamente como resumir PDF com IA, gerar um resumo em PDF e salvar o resumo como PDF usando o SDK Aspose.Pdf.AI para .NET. Você receberá um exemplo completo e executável e uma explicação de cada linha para que possa adaptar a solução aos seus próprios projetos. + +O guia cobre: + +* Preparar a pasta de origem e a chave de API +* Criar um `OpenAIClient` que se comunica com o modelo +* Configurar opções de resumo como temperatura e caminho do documento +* Construir um `SummaryCopilot` e obter o texto do resumo de forma assíncrona +* Salvar o resumo gerado de volta em um arquivo PDF + +Nenhum serviço externo além do endpoint da OpenAI é necessário, e o código funciona com .NET 6+ e Aspose.Pdf.AI 23.7 (ou posterior). + +## Pré-requisitos + +* **.NET 6 SDK** (ou qualquer versão mais recente do .NET) +* **Aspose.Pdf.AI for .NET** – instale via NuGet: `dotnet add package Aspose.Pdf.AI` +* Uma **chave de API OpenAI** com acesso ao modelo que você deseja usar (por exemplo, `gpt‑4o`) +* Um arquivo PDF que você deseja resumir (o exemplo usa `SampleDocument.pdf`) + +Certifique-se de que a pasta especificada em `dataDirectory` exista e que a aplicação tenha permissões de leitura/escrita. + +## Etapa 1: Configurar a estrutura do projeto + +Crie um projeto de console (ou integre o código em qualquer aplicativo .NET existente). O `Program.cs` mínimo fica assim: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Por que essa estrutura importa + +* **`await using`** descarta o `OpenAIClient` automaticamente, liberando conexões HTTP. +* **`Path.Combine`** cria caminhos independentes do SO, evitando erros no Windows vs. Linux. +* **Temperature** controla a criatividade; `0.5` fornece um resumo equilibrado e factual. +* **`GetSummaryAsync`** retorna texto puro, enquanto `SaveSummaryAsync` cria um PDF adequado que preserva fontes e layout. + +## Etapa 2: Entender as opções de resumo + +A classe `OpenAISummaryCopilotOptions` permite ajustar finamente o processo de sumarização: + +| Opção | Propósito | Valores típicos | +|--------|-----------|-----------------| +| `WithTemperature(double)` | Controla a aleatoriedade. `0.0` = determinístico, `1.0` = muito criativo. | `0.3‑0.7` para documentos empresariais | +| `WithDocument(string)` | Caminho para o PDF de origem. Deve ser um arquivo legível. | Qualquer caminho absoluto ou relativo | +| `WithPrompt(string)` *(opcional)* | Prompt personalizado para orientar o modelo. | “Summarize the key findings in 150 words.” | + +Se você tem **large PDFs** (mais de 10 MB ou muitas páginas), considere dividir o documento em blocos menores antes da sumarização para evitar erros de limite de tokens. O SDK não divide automaticamente; você pode usar `PdfDocument` de `Aspose.Pdf` para extrair páginas e alimentá‑las uma a uma. + +## Etapa 3: Executar o código e verificar a saída + +1. Coloque `SampleDocument.pdf` dentro da pasta `Data` que você referenciou. +2. Substitua `"YOUR_API_KEY"` pela sua chave real da OpenAI. +3. Execute `dotnet run`. + +Você deverá ver duas seções no console: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Abra `Summary_out.pdf` com qualquer visualizador de PDF – ele conterá o mesmo texto do resumo, formatado com uma fonte padrão. O PDF é totalmente pesquisável porque o SDK incorpora o texto como uma página PDF padrão. + +## Etapa 4: Variações comuns e tratamento de casos extremos + +### Resumir apenas uma parte do documento + +Se você precisa **summarize pdf with ai** para um capítulo específico, extraia esse intervalo primeiro: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Então aponte `WithDocument` para `Chapter5.pdf`. + +### Ajustando o tamanho do resumo + +Você pode influenciar o tamanho adicionando um prompt personalizado: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Tratamento de erros da API + +Falhas de rede ou limites de cota levantam `Aspose.Pdf.AI.Exceptions.AIException`. Envolva a chamada em um bloco `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Salvando o resumo em um layout personalizado + +`SaveSummaryAsync` grava texto puro. Para estilizar o PDF (adicionar título, cabeçalho ou branding), crie um novo `PdfDocument` e insira o resumo manualmente: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Etapa 5: Dicas de desempenho e boas práticas + +* **Reutilize o `OpenAIClient`** para múltiplos resumos no mesmo processo – criar um cliente é barato, mas reutilizar o `HttpClient` subjacente reduz o esgotamento de sockets. +* **Cache o resumo** se o PDF de origem não mudar; você pode armazenar o texto em um banco de dados e pular a chamada à API. + +## 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 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. + +- [Como Extrair & Salvar Páginas PDF Específicas Usando Aspose.PDF para .NET - Guia Abrangente](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Como Extrair e Salvar Anexos PDF Usando Aspose.PDF .NET: Guia Abrangente](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Como Converter HTML para PDF com Aspose.PDF .NET: Guia Completo](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/conversion-export/_index.md b/pdf/russian/net/conversion-export/_index.md index cef572e3ce..0a10c5de23 100644 --- a/pdf/russian/net/conversion-export/_index.md +++ b/pdf/russian/net/conversion-export/_index.md @@ -110,7 +110,7 @@ ### [Конвертация PS в PDF на C# с помощью Aspose.PDF .NET: пошаговое руководство](./convert-ps-to-pdf-aspose-dotnet-csharp/) Узнайте, как эффективно преобразовывать файлы PostScript в PDF в ваших приложениях .NET с помощью Aspose.PDF. Следуйте этому всеобъемлющему руководству с примерами кода. -### [Конвертируйте RGB PDF-файлы в оттенки серого с помощью Aspose.PDF для .NET | Подробное руководство](./convert-rgb-pdfs-to-grayscale-aspose-pdf-net/) +### [Конвертируйте PDF в RGB в оттенки серого с помощью Aspose.PDF для .NET | Подробное руководство](./convert-rgb-pdfs-to-grayscale-aspose-pdf-net/) Узнайте, как эффективно преобразовать RGB PDF в оттенки серого с помощью Aspose.PDF для .NET. Это пошаговое руководство обеспечивает согласованность дизайна и уменьшение размера файла. ### [Конвертируйте TeX в PDF с помощью Aspose.PDF для .NET: пошаговое руководство](./convert-tex-to-pdf-aspose-dotnet-guide/) @@ -227,6 +227,9 @@ ### [Преобразование PDF в TIFF в .NET с использованием Aspose.PDF: пошаговое руководство](./pdf-to-tiff-conversion-aspose-pdf-net/) Узнайте, как преобразовывать документы PDF в изображения TIFF с помощью Aspose.PDF для .NET. Освойте пользовательские глубины цвета и передовые методы обработки изображений. +### [Сохраните PDF как HTML с помощью Aspose.PDF – пошаговое руководство](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Узнайте, как сохранить PDF в формате HTML с помощью Aspose.PDF для .NET, используя пошаговые примеры кода. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/russian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..b9411d894b --- /dev/null +++ b/pdf/russian/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-08-08 +description: Сохраните PDF в HTML с помощью Aspose.PDF на C#. Узнайте, как преобразовать + PDF в HTML, пропустить растровые изображения и обработать типичные граничные случаи. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: ru +lastmod: 2026-08-08 +og_description: Сохраните PDF в формате HTML с помощью Aspose.PDF. Это руководство + покажет, как конвертировать PDF в HTML, пропустить растровые изображения и избежать + распространённых ошибок. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Сохранить PDF в HTML с помощью Aspose.PDF – полный учебник по C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Сохранить PDF в HTML с помощью Aspose.PDF – пошаговое руководство +url: /ru/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сохранить PDF как HTML с Aspose.PDF – пошаговое руководство + +Если вам нужно **быстро сохранить PDF как HTML**, этот учебник покажет, как это сделать с помощью Aspose.PDF для .NET. Независимо от того, создаёте ли вы веб‑приложение‑просмотрщик документов или экспортируете отчёты для SEO‑дружественного индексирования, вы увидите полное, готовое к запуску решение, которое конвертирует PDF в HTML, предоставляя детальный контроль над растровыми изображениями. + +Помимо основной задачи, мы также рассмотрим параметры **aspose pdf html conversion**, позволяющие пропускать растровые изображения, настраивать обработку CSS и эффективно управлять большими документами. К концу руководства у вас будет автономная программа, которую можно добавить в любой проект .NET. + +## Требования + +* .NET 6.0 SDK или новее (код работает также с .NET Core и .NET Framework) +* Visual Studio 2022 или любая IDE, поддерживающая C# +* Лицензия Aspose.PDF для .NET (бесплатная пробная версия подходит для оценки) +* PDF‑файл с именем `report.pdf`, размещённый в папке, к которой можно обратиться из кода + +Дополнительные пакеты NuGet не требуются, кроме `Aspose.Pdf`. + +## Шаг 1: Установить пакет Aspose.PDF через NuGet + +Откройте терминал в папке проекта и выполните: + +```bash +dotnet add package Aspose.Pdf +``` + +Пакет добавляет пространство имён `Aspose.Pdf`, которое содержит класс `Document` и тип `HtmlSaveOptions`, используемые для операций **convert pdf to html**. + +## Шаг 2: Создать консольный проект и добавить директивы using + +Создайте новое консольное приложение, если у вас его ещё нет: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Затем откройте `Program.cs` и добавьте необходимые пространства имён: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Эти директивы дают доступ к основному PDF API и параметрам сохранения HTML, которые управляют процессом **aspose convert pdf html**. + +## Шаг 3: Загрузить PDF‑документ + +Первая рабочая строка считывает исходный PDF в объект `Aspose.Pdf.Document`. Этот объект представляет весь PDF‑файл в памяти и предоставляет методы для сохранения, редактирования и извлечения содержимого. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Почему это важно*: Загрузка документа один раз делает использование памяти предсказуемым, особенно для больших PDF‑файлов. Если файл не найден, Aspose бросает `FileNotFoundException`, поэтому убедитесь, что путь указан правильно. + +## Шаг 4: Настроить параметры сохранения HTML + +`HtmlSaveOptions` позволяет точно настроить процесс конвертации PDF. В этом руководстве мы пропускаем растровые изображения, чтобы результат был лёгким, но при необходимости можно изменить режим на `EmbedAll`. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Ключевые моменты**: + +* `RasterImagesSavingMode.Skip` указывает Aspose игнорировать растровые изображения (JPEG, PNG) во время конвертации. Это идеально, когда исходный PDF содержит отсканированные страницы, которые не нужны в HTML‑просмотре. +* Можно переключиться на `EmbedAll` или `External`, если требуется сохранять изображения в виде отдельных файлов. +* Свойство `ResourcesFolder` имеет значение только когда изображения сохраняются внешне. + +## Шаг 5: Сохранить документ как HTML + +Теперь вы записываете HTML‑файл на диск, используя настроенные параметры. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +После завершения этого вызова `report.html` содержит текстовое содержание, векторную графику и макет, сохранённые из оригинального PDF, но без растровых изображений. Вы можете открыть файл в браузере, чтобы проверить результат. + +## Ожидаемый результат + +При открытии `report.html` в Chrome или Edge вы должны увидеть: + +* Все заголовки, абзацы и векторные формы отображаются корректно. +* Отсутствуют теги `` для растровых изображений (они опущены из‑за режима `Skip`). +* Чистый, минимальный CSS, либо встроенный, либо в отдельном файле стилей, в зависимости от выбранной опции. + +Если необходимо убедиться, что изображения были опущены, откройте исходный код страницы (`Ctrl+U`). Вы не найдёте записей ``. + +## Шаг 6: Обработать распространённые граничные случаи + +### 6.1 Большие PDF (> 100 МБ) + +Для очень больших файлов включите потоковую запись, чтобы уменьшить нагрузку на память: + +```csharp +htmlOpts.Streaming = true; +``` + +### 6.2 PDF, защищённые паролем + +Если исходный PDF зашифрован, укажите пароль перед сохранением: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Попытка сохранить без расшифровки вызывает `InvalidPasswordException`. + +### 6.3 Юникод‑символы + +Aspose.PDF автоматически встраивает шрифты Unicode, но вы можете принудительно задать конкретный шрифт для согласованного отображения: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Пользовательское именование файлов для нескольких страниц + +Если вы хотите, чтобы каждая страница PDF сохранялась в отдельный HTML‑файл, установите: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Это создаст `report_page_1.html`, `report_page_2.html` и т.д., что может быть полезно для пагинации в веб‑приложениях. + +## Полный, готовый к запуску пример + +Ниже приведена полная программа, включающая все обсуждаемые шаги. Скопируйте её в `Program.cs`, скорректируйте пути и выполните `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Проверка**: После выполнения в консоли выводится сообщение об успехе. Откройте сгенерированный HTML‑файл в браузере, чтобы убедиться, что текст и векторная графика отображаются корректно, а растровые изображения отсутствуют. + +## Профессиональные советы и подводные камни + +* **Pro tip**: Если позже понадобятся растровые изображения, измените `RasterImagesSavingMode` на `External` и задайте `ResourcesFolder`. Это создаст подпапку `images` с извлечёнными битмапами. +* **Watch out for**: Использование режима `Skip` по умолчанию в PDF, сильно зависящих от отсканированных изображений, приведёт к пустым областям там, где должны быть изображения. Всегда тестируйте на репрезентативной выборке ваших документов. +* **Performance tip**: Повторное использование одного экземпляра `HtmlSaveOptions` для нескольких документов уменьшает накладные расходы на создание объектов при пакетных конверсиях. +* **Version check**: Показанный API работает с Aspose.PDF для .NET версии 23.9 и новее. В более ранних версиях может использоваться `HtmlSaveOptions.RasterImagesSavingMode` с немного другим названием перечисления. + +## Заключение + +Теперь вы знаете, как **сохранить PDF как HTML** с помощью Aspose.PDF, как управлять обработкой растровых изображений и как решать типичные задачи, такие как большие файлы, защита паролем и вывод HTML по страницам. Это полное решение позволяет уверенно интегрировать конвертацию PDF в HTML в любое приложение C#. + +### Что дальше? + +* Изучите **aspose pdf html conversion** для встраивания шрифтов и настройки CSS. +* Объедините эту конвертацию с веб‑API для предоставления HTML по запросу. +* Попробуйте обратный процесс — **convert pdf to html** и затем обратно в PDF — чтобы проверить точность обратного преобразования. + +Не стесняйтесь экспериментировать с параметрами и делиться результатами в комментариях или на форумах Aspose. Приятного кодинга! + +## Что вам следует изучить дальше? + +Следующие учебники охватывают тесно связанные темы, основанные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полные работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы к реализации в ваших проектах. + +- [Конвертировать PDF в HTML в .NET с использованием Aspose.PDF без сохранения изображений](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [Конвертация PDF в HTML с использованием Aspose.PDF .NET: Сохранить изображения как внешние PNG](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [Конвертировать PDF в HTML с пользовательскими URL‑адресами изображений с помощью Aspose.PDF .NET: Полное руководство](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/russian/net/digital-signatures/_index.md index 4550fdd125..669ad82c9d 100644 --- a/pdf/russian/net/digital-signatures/_index.md +++ b/pdf/russian/net/digital-signatures/_index.md @@ -47,6 +47,9 @@ ### [Как проверить PDF – проверка подписи PDF с помощью Aspose](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) Узнайте, как проверять подписи PDF с помощью Aspose, обеспечивая подлинность и целостность документов. +### [Как проверить PDF с помощью Aspose.PDF – проверка действительности подписи PDF в C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Узнайте, как проверить действительность подписи PDF в C# с помощью Aspose.PDF. + ### [Загрузка PDF‑документа C# – Конвертация в PDF/X‑4 и список подписей](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Узнайте, как загрузить PDF‑документ, преобразовать его в формат PDF/X‑4 и получить список цифровых подписей с помощью Aspose.PDF для .NET. diff --git a/pdf/russian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/russian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..cd3ea64fe2 --- /dev/null +++ b/pdf/russian/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,267 @@ +--- +category: general +date: 2026-08-08 +description: Как проверить PDF с помощью Aspose.PDF и проверить цифровую подпись PDF. + Следуйте этому пошаговому руководству, чтобы быстро проверить подпись PDF. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: ru +lastmod: 2026-08-08 +og_description: Как проверять PDF с помощью Aspose.PDF. Узнайте, как проверять цифровую + подпись PDF и проверять её действительность в несколько строк кода C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Как проверить PDF – проверить действительность подписи PDF с помощью Aspose.PDF + в C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Как проверить PDF с помощью Aspose.PDF — проверка действительности подписи + PDF в C# +url: /ru/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как проверить PDF с помощью Aspose.PDF – проверка действительности подписи PDF в C# + +Если вам нужно **как проверить PDF**‑файлы, содержащие цифровые подписи, этот учебник покажет полное решение. Вы научитесь загружать PDF, создавать валидатор сертификатов и проверять действительность подписи PDF с помощью Aspose.PDF для .NET. + +Проверка цифровой подписи PDF — распространённое требование для соответствия нормативам, выставления счетов и безопасного обмена документами. К концу этого руководства вы сможете уверенно определить, является ли подписанный PDF надёжным, а также поймёте, как обрабатывать типичные граничные случаи, такие как отсутствие сертификатов или несколько подписей. + +## Необходимые условия + +Прежде чем начать, убедитесь, что у вас есть: + +- .NET 6.0 или более поздняя версия +- IDE, например Visual Studio 2022 (подойдёт любой редактор, поддерживающий C#) +- Лицензированная копия **Aspose.PDF for .NET** (бесплатная пробная версия подходит для оценки) +- Подписанный PDF‑файл (`signed.pdf`) и, если подпись опирается на частный CA, соответствующий доверенный сертификат (`trustedCertificate.pfx`) + +Дополнительные пакеты NuGet не требуются, кроме `Aspose.PDF`. + +## Шаг 1: Установить Aspose.PDF + +Откройте терминал в папке проекта и выполните: + +```bash +dotnet add package Aspose.PDF +``` + +Эта команда добавит последнюю библиотеку Aspose.PDF, содержащую классы `Document` и `CertificateValidator`, которые будут использованы далее. + +## Шаг 2: Загрузить PDF‑документ + +Загрузка PDF — первая операция, которую вы выполняете, когда **как загрузить pdf** программно. Конструктор `Document` принимает путь к файлу, поток или массив байтов. Использование полного пути делает пример более понятным. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Почему это важно:** Объект `Document` представляет весь PDF‑файл в памяти. Без загрузки файла вы не сможете получить доступ к его коллекции `Signatures`, которая необходима для **проверки подписи pdf**. + +## Шаг 3: Подготовить валидатор сертификатов + +Цифровая подпись считается доверенной только в том случае, если сертификат подписи цепочкой ведёт к корню, которому вы доверяете. `CertificateValidator` позволяет указать Aspose.PDF хранилище доверенных сертификатов или конкретный PFX‑файл. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Если ваш PDF использует публичный CA, уже доверенный Windows, вы можете опустить `certPath` и создать `CertificateValidator` через конструктор по умолчанию. Предоставление собственного PFX полезно в средах внутренней PKI. + +## Шаг 4: Проверить первую цифровую подпись + +PDF может содержать несколько подписей. Для простоты в этом учебнике проверяется первая подпись (`Signatures[0]`). Метод `Validate` возвращает `true`, когда подпись криптографически целостна **и** сертификат подписи доверенный. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Что происходит «под капотом»:** +- Метод проверяет хеш подписанного содержимого против значения подписи. +- Строит цепочку сертификатов, используя указанный валидатор. +- Оценивает статус отзыва (CRL/OCSP), если валидатор настроен на это. + +### Обработка нескольких подписей + +Если ваш PDF содержит более одной подписи, пройдитесь по коллекции `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Такой подход позволяет **проверять подпись pdf** на каждой странице и сообщать отдельные результаты. + +## Шаг 5: Вывести результат проверки + +Наконец, выведите результат в консоль. В производственном коде, вероятно, вы будете логировать результат или генерировать исключение при недействительной подписи. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Ожидаемый вывод в консоль + +``` +Valid +``` + +или + +``` +Invalid +``` + +Сообщение отражает булево значение, возвращаемое `Validate`. Результат «Invalid» может указывать на подделанный документ, недоверенный сертификат или просроченный сертификат подписи. + +## Шаг 6: Распространённые подводные камни и рекомендации лучшей практики + +### 1. Отсутствует доверенный сертификат +Если вы получаете `Invalid`, а подпись должна быть доверенной, проверьте, что правильный корневой сертификат передан в `CertificateValidator`. Используйте перегрузку, принимающую `X509Certificate2Collection` для нескольких корней. + +### 2. Подпись с внешними ссылками +Некоторые подписи охватывают внешнее содержимое (например, вложенный файл). Убедитесь, что внешние ресурсы доступны; иначе проверка хеша завершится неудачей. + +### 3. Проверка временной метки +Подпись может включать токен временной метки. Чтобы проверить её, настройте валидатор для проверки сертификатов службы временных меток (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Производительность при работе с большими PDF +Загрузка PDF‑документа в несколько сотен страниц может потреблять много памяти. Если нужны только данные подписи, используйте `PdfFileEditor` для извлечения словаря подписи без рендеринга страниц. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Потокобезопасность +Экземпляры `Document` не являются потокобезопасными. Создавайте новый `Document` для каждого потока при параллельной проверке большого количества PDF. + +## Полный, готовый к запуску пример + +Ниже приведена полная программа, которую можно скопировать, вставить и запустить после обновления путей к файлам. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Запуск программы** выводит строку для каждой подписи, чётко указывая, проходит ли PDF проверку **validate pdf digital signature**. + +## Заключение + +Теперь вы знаете **как проверить PDF**‑файлы, содержащие цифровые подписи, с помощью Aspose.PDF для .NET. В учебнике рассмотрены загрузка PDF, настройка валидатора сертификатов, проверка действительности подписи PDF, обработка нескольких подписей и устранение типичных проблем. + +Далее изучайте связанные темы, такие как **how to sign PDF**, **how to add timestamp tokens** и **how to extract signed content**. Эти расширения позволят построить полностью автоматизированный безопасный документооборот в C#. + +--- + + +## Что следует изучить дальше? + + +Следующие учебники охватывают тесно связанные темы, опираясь на техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, помогающими освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/russian/net/document-conversion/_index.md index 5a81e5e5fd..30ca5512fb 100644 --- a/pdf/russian/net/document-conversion/_index.md +++ b/pdf/russian/net/document-conversion/_index.md @@ -23,41 +23,42 @@ | --- | --- | | [Добавить вложение в PDFA](./add-attachment-to-pdfa/) | Узнайте, как добавлять вложения в документ PDF/A с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. | | [CGM в файлы PDF](./cgm-to-pdf/) | Узнайте, как преобразовать файлы CGM в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит как для разработчиков, так и для дизайнеров. | -| [EPUB в PDF](./epub-to-pdf/) Узнайте, как конвертировать EPUB в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Легко, эффективно и идеально подходит для всех пользователей. | -| [Получить размеры SVG](./get-svg-dimensions/) | Узнайте, как использовать Aspose.PDF для .NET для преобразования файлов SVG в PDF с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих работать с PDF. | -| [HTML в PDF](./html-to-pdf/) | Узнайте, как преобразовать HTML в PDF с помощью Aspose.PDF для .NET с помощью этого подробного пошагового руководства. | -| [Разметка в PDF](./markdown-to-pdf/) | Узнайте, как преобразовать Markdown в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков, желающих оптимизировать преобразование документов. | -| [MHT в PDF](./mht-to-pdf/) | Узнайте, как конвертировать файлы MHT в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Простое и эффективное преобразование документов. | -| [Ориентация страницы в соответствии с размерами изображения](./page-orientation-according-image-dimensions/) Узнайте, как создавать PDF-файлы с помощью Aspose.PDF для .NET, настраивая ориентацию страницы на основе размеров изображения в этом пошаговом руководстве. | -| [PCL в PDF](./pcl-to-pdf/) | Узнайте, как преобразовать файлы PCL в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и предприятий. | -| [PDFA в PDF](./pdfa-to-pdf/) | Узнайте, как преобразовать PDF/A в PDF с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | -| [PDF в DOC](./pdf-to-doc/) | Узнайте, как конвертировать PDF в DOC с помощью Aspose.PDF для .NET в этом подробном руководстве. Пошаговые инструкции и советы включены. | -| [PDF в EPUB](./pdf-to-epub/) | Узнайте, как конвертировать PDF в EPUB с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и создателей контента. | -| [PDF в HTML](./pdf-to-html/) | Узнайте, как преобразовать PDF в HTML с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и создателей контента. | -| [PDF в PDFA](./pdf-to-pdfa/) Узнайте, как преобразовать файлы PDF в формат PDF/A с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. | -| [PDF в PDFA3b](./pdf-to-pdfa3b/) | Научитесь легко конвертировать файлы PDF в формат PDF/A-3B с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | +| [EPUB в PDF](./epub-to-pdf/) Узнайте, как конвертировать EPUB в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Легко, эффективно и идеально подходит для всех пользователей. | +| [Получить размеры SVG](./get-svg-dimensions/) | Узнайте, как использовать Aspose.PDF для .NET для преобразования файлов SVG в PDF с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих работать с PDF. | +| [HTML в PDF](./html-to-pdf/) | Узнайте, как преобразовать HTML в PDF с помощью Aspose.PDF для .NET с помощью этого подробного пошагового руководства. | +| [Разметка в PDF](./markdown-to-pdf/) | Узнайте, как преобразовать Markdown в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков, желающих оптимизировать преобразование документов. | +| [MHT в PDF](./mht-to-pdf/) | Узнайте, как конвертировать файлы MHT в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Простое и эффективное преобразование документов. | +| [Ориентация страницы в соответствии с размерами изображения](./page-orientation-according-image-dimensions/) Узнайте, как создавать PDF-файлы с помощью Aspose.PDF для .NET, настраивая ориентацию страницы на основе размеров изображения в этом пошаговом руководстве. | +| [PCL в PDF](./pcl-to-pdf/) | Узнайте, как преобразовать файлы PCL в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и предприятий. | +| [PDFA в PDF](./pdfa-to-pdf/) | Узнайте, как преобразовать PDF/A в PDF с помощью Aspose.PDF для .NET в этом подробном руководстве. | +| [PDF в DOC](./pdf-to-doc/) | Узнайте, как конвертировать PDF в DOC с помощью Aspose.PDF для .NET в этом подробном руководстве. Пошаговые инструкции и советы включены. | +| [PDF в EPUB](./pdf-to-epub/) | Узнайте, как конвертировать PDF в EPUB с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и создателей контента. | +| [PDF в HTML](./pdf-to-html/) | Узнайте, как преобразовать PDF в HTML с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и создателей контента. | +| [PDF в PDFA](./pdf-to-pdfa/) Узнайте, как преобразовать файлы PDF в формат PDF/A с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. | +| [PDF в PDFA3b](./pdf-to-pdfa3b/) | Научитесь легко конвертировать файлы PDF в формат PDF/A-3B с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | | [Подсказка шрифта PDF в PNG](./pdf-to-png-font-hinting/) | Узнайте, как преобразовать PDF в PNG с подсказками шрифтов с помощью Aspose.PDF для .NET в простом пошаговом руководстве. | | [PDF в PNG – Конвертировать страницы PDF в PNG на C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Узнайте, как конвертировать страницы PDF в PNG с помощью Aspose.PDF для .NET на C# в этом пошаговом руководстве. | -| [PDF в PPT](./pdf-to-ppt/) | Узнайте, как преобразовать PDF в PPT с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Легко, эффективно и идеально подходит для презентаций. | -| [PDF в SVG](./pdf-to-svg/) | Узнайте, как преобразовать файлы PDF в формат SVG с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и дизайнеров. | -| [PDF в TeX](./pdf-to-tex/) | Узнайте, как преобразовать PDF в TeX с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих улучшить навыки обработки документов. | -| [PDF в XLS](./pdf-to-xls/) Легко конвертируйте файлы PDF в формат XLS с помощью Aspose.PDF для .NET. Следуйте нашему пошаговому руководству для бесперебойного извлечения данных. | -| [PDF в XML](./pdf-to-xml/) | Узнайте, как преобразовать PDF в XML с помощью Aspose.PDF для .NET в этом подробном руководстве. Пошаговое руководство с примерами кода. | -| [PDF в XPS](./pdf-to-xps/) | Узнайте, как преобразовать PDF в XPS с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и энтузиастов обработки документов. | -| [Постскриптум в PDF](./postscript-to-pdf/) | Узнайте, как преобразовать файлы Postscript в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков всех уровней. | -| [Предоставьте учетные данные во время преобразования HTML в PDF](./provide-credentials-during-html-to-pdf/) | Узнайте, как преобразовать HTML в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих оптимизировать создание документов. | -| [Удалить гиперссылки после преобразования из HTML](./remove-hyperlinks-after-converting-from-html/) Узнайте, как удалить гиперссылки из HTML-документов после преобразования в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | -| [Заменить отсутствующие шрифты](./replace-missing-fonts/) | Узнайте, как заменить отсутствующие шрифты в документах PDF с помощью Aspose.PDF для .NET, с помощью этого пошагового руководства. | -| [Установить имя шрифта по умолчанию](./set-default-font-name/) | Узнайте, как задать имя шрифта по умолчанию при рендеринге PDF-файлов в изображения с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются предварительные условия, пошаговые инструкции и часто задаваемые вопросы. | -| [SVG в PDF](./svg-to-pdf/) | Узнайте, как преобразовать SVG в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и дизайнеров. | -| [TeX в PDF](./tex-to-pdf/) | Узнайте, как преобразовать TeX в PDF с помощью Aspose.PDF для .NET с помощью этого подробного пошагового руководства. Идеально подходит для разработчиков и профессионалов в области документов. | -| [Текст в PDF](./text-to-pdf/) Узнайте, как преобразовать текстовые файлы в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков, желающих улучшить свои приложения. | -| [Улучшение производительности TIFF в PDF](./tiff-to-pdf-performance-improvement/) | Эффективно конвертируйте изображения TIFF в PDF с помощью Aspose.PDF для .NET. Изучите пошаговые инструкции по оптимизации производительности для плавной обработки больших файлов изображений. | -| [Веб-страница в PDF](./web-page-to-pdf/) | Узнайте, как преобразовать веб-страницы в PDF с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | -| [XML в PDF](./xml-to-pdf/) | Узнайте, как преобразовать XML в PDF с помощью Aspose.PDF для .NET в этом подробном руководстве, дополненном примерами кода и подробными объяснениями. | -| [XML в PDFУстановить путь к изображению](./xml-to-pdfset-image-path/) | Узнайте, как легко конвертировать XML в PDF с помощью Aspose.PDF для .NET. Это подробное руководство проведет вас через процесс шаг за шагом, от настройки до завершения. | -| [XPS в PDF](./xps-to-pdf/) Узнайте, как преобразовать файлы XPS в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и энтузиастов документов. | +| [PDF в PPT](./pdf-to-ppt/) | Узнайте, как преобразовать PDF в PPT с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Легко, эффективно и идеально подходит для презентаций. | +| [PDF в SVG](./pdf-to-svg/) | Узнайте, как преобразовать файлы PDF в формат SVG с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и дизайнеров. | +| [PDF в TeX](./pdf-to-tex/) | Узнайте, как преобразовать PDF в TeX с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих улучшить навыки обработки документов. | +| [PDF в XLS](./pdf-to-xls/) Легко конвертируйте файлы PDF в формат XLS с помощью Aspose.PDF для .NET. Следуйте нашему пошаговому руководству для бесперебойного извлечения данных. | +| [PDF в XML](./pdf-to-xml/) | Узнайте, как преобразовать PDF в XML с помощью Aspose.PDF для .NET в этом подробном руководстве. Пошаговое руководство с примерами кода. | +| [PDF в XPS](./pdf-to-xps/) | Узнайте, как преобразовать PDF в XPS с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и энтузиастов обработки документов. | +| [Постскриптум в PDF](./postscript-to-pdf/) | Узнайте, как преобразовать файлы Postscript в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков всех уровней. | +| [Предоставьте учетные данные во время преобразования HTML в PDF](./provide-credentials-during-html-to-pdf/) | Узнайте, как преобразовать HTML в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков, желающих оптимизировать создание документов. | +| [Удалить гиперссылки после преобразования из HTML](./remove-hyperlinks-after-converting-from-html/) Узнайте, как удалить гиперссылки из HTML-документов после преобразования в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | +| [Заменить отсутствующие шрифты](./replace-missing-fonts/) | Узнайте, как заменить отсутствующие шрифты в документах PDF с помощью Aspose.PDF для .NET, с помощью этого пошагового руководства. | +| [Установить имя шрифта по умолчанию](./set-default-font-name/) | Узнайте, как задать имя шрифта по умолчанию при рендеринге PDF-файлов в изображения с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются предварительные условия, пошаговые инструкции и часто задаваемые вопросы. | +| [SVG в PDF](./svg-to-pdf/) | Узнайте, как преобразовать SVG в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков и дизайнеров. | +| [TeX в PDF](./tex-to-pdf/) | Узнайте, как преобразовать TeX в PDF с помощью Aspose.PDF для .NET с помощью этого подробного пошагового руководства. Идеально подходит для разработчиков и профессионалов в области документов. | +| [Текст в PDF](./text-to-pdf/) Узнайте, как преобразовать текстовые файлы в PDF с помощью Aspose.PDF для .NET в этом пошаговом руководстве. Идеально подходит для разработчиков, желающих улучшить свои приложения. | +| [Улучшение производительности TIFF в PDF](./tiff-to-pdf-performance-improvement/) | Эффективно конвертируйте изображения TIFF в PDF с помощью Aspose.PDF для .NET. Изучите пошаговые инструкции по оптимизации производительности для плавной обработки больших файлов изображений. | +| [Веб-страница в PDF](./web-page-to-pdf/) | Узнайте, как преобразовать веб-страницы в PDF с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | +| [XML в PDF](./xml-to-pdf/) | Узнайте, как преобразовать XML в PDF с помощью Aspose.PDF для .NET в этом подробном руководстве, дополненном примерами кода и подробными объяснениями. | +| [XML в PDFУстановить путь к изображению](./xml-to-pdfset-image-path/) | Узнайте, как легко конвертировать XML в PDF с помощью Aspose.PDF для .NET. Это подробное руководство проведет вас через процесс шаг за шагом, от настройки до завершения. | +| [XPS в PDF](./xps-to-pdf/) Узнайте, как преобразовать файлы XPS в PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Идеально подходит для разработчиков и энтузиастов документов. | | [Конвертировать PDF в PDF/X‑4 на C# – пошаговое руководство ASP.NET PDF](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Узнайте, как конвертировать PDF в PDF/X‑4 с помощью Aspose.PDF для .NET в этом пошаговом руководстве. | +| [Учебник по конвертации PDF в PDF/X‑4 – установить стандарт PDF и выполнить конвертацию с помощью Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Узнайте, как установить стандарт PDF/X‑4 и конвертировать PDF с помощью Aspose.PDF для .NET в этом руководстве. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/russian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..c9fb294040 --- /dev/null +++ b/pdf/russian/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: Учебник по конвертации pdfx4, показывающий, как установить стандарт PDF + в PDF/X‑4 и конвертировать PDF с помощью Aspose для надёжного преобразования формата. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: ru +lastmod: 2026-08-08 +og_description: Учебник по конвертации pdfx4 объясняет, как установить стандарт PDF + в PDF/X‑4 и выполнить надёжное преобразование PDF с использованием Aspose в C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Учебник по конвертации pdfx4 – установить стандарт PDF и конвертировать + PDF с помощью Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Учебник по конвертации PDF/X‑4 – установка стандарта PDF и конвертация PDF + с помощью Aspose +url: /ru/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + +Если вам нужен **pdfx4 conversion tutorial**, это руководство проведёт вас через полный процесс установки стандарта PDF в PDF/X‑4 и конвертации PDF с помощью Aspose. Независимо от того, готовите ли вы файлы для печати или обеспечиваете долгосрочное архивное соответствие, вы изучите надёжный **aspose pdf format conversion** рабочий процесс, работающий с .NET 6 и новее. + +В руководстве рассматривается всё: от настройки проекта до обработки исключительных ситуаций, таких как отсутствие исходных файлов или неподдерживаемые функции. К концу статьи у вас будет автономная программа на C#, создающая файл, соответствующий PDF/X‑4, готовый к дальнейшим процессам. + +## Prerequisites + +Прежде чем начать, убедитесь, что у вас есть: + +- .NET 6 SDK или новее ([download here](https://dotnet.microsoft.com/download)) +- Действительная лицензия Aspose.PDF for .NET (бесплатная trial‑версия подходит для тестов) +- Visual Studio 2022, VS Code или любая IDE, поддерживающая разработку на .NET +- Исходный PDF‑файл, который нужно конвертировать (разместите его в известной папке) + +Эти требования гарантируют, что код будет работать без дополнительной настройки. + +## Step 1: Create a new .NET console project + +Откройте терминал и выполните следующие команды, чтобы создать консольное приложение с именем `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Добавьте пакет Aspose.PDF через NuGet: + +```bash +dotnet add package Aspose.Pdf +``` + +Пакет `Aspose.Pdf` предоставляет класс `Document` и `PdfFormatConversionOptions`, необходимые для операций **convert pdf pdfx4**. + +## Step 2: Write the conversion code + +Откройте `Program.cs` (или `Program.cs`, если используете новые top‑level statements) и замените его содержимое полным примером ниже. Код демонстрирует **set pdf standard** в PDF/X‑4, выполняет конвертацию и включает обработку ошибок для типичных проблем. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Why each part matters + +- **Argument validation** предотвращает падение программы, когда пользователь забывает указать путь к файлу. +- **`Document` loading** бросает понятное исключение, если исходный PDF отсутствует или повреждён, что важно для надёжного **convert pdf using aspose** опыта. +- **`PdfFormatConversionOptions`** — место, где вы **set pdf standard**. При назначении `PdfStandard.PdfX4` Aspose автоматически корректирует цветовые пространства, встраивает требуемые шрифты и записывает необходимую метадату PDF/X‑4. +- **`FontEmbeddingMode.EmbedAll`** гарантирует встраивание каждого шрифта, использованного в исходном PDF, что часто требуется для печатных файлов. +- **`doc.Convert`** выполняет фактическую **aspose pdf format conversion**. Метод записывает новый файл одним вызовом, упрощая рабочий процесс. + +## Step 3: Run the converter + +Соберите проект и запустите его, указав пути к исходному и целевому файлам: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Если всё прошло успешно, консоль выведет: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Теперь вы можете открыть `output_pdfx4.pdf` в любом PDF‑просмотрщике, поддерживающем PDF/X‑4 (например, Adobe Acrobat Pro) и проверить соответствие через *File → Properties → Standards*. + +## Step 4: Verify PDF/X‑4 compliance (optional) + +Для производственных конвейеров может потребоваться программно проверять результат. Aspose предоставляет класс `PdfComplianceChecker` (доступен в пакете `Aspose.Pdf`), который можно использовать так: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Запуск этого фрагмента после конвертации даст явный результат «пройдено/не пройдено», что полезно для автоматизированных CI/CD конвейеров. + +## Step 5: Common pitfalls and best‑practice tips + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| Missing fonts in the source PDF | Шрифты указаны, но не встроены, вызывая предупреждения при конвертации | Использовать `FontEmbeddingMode.EmbedAll`, как показано выше | +| Source PDF contains transparent objects not allowed in PDF/X‑4 | PDF/X‑4 запрещает некоторые типы прозрачности | Предобработать PDF с помощью `doc.ProcessTransparentObjects()` перед конвертацией | +| Large files cause OutOfMemoryException | Весь документ загружается в память | Потоково читать источник через `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| License not applied | Trial‑версия добавляет водяные знаки | Вызвать `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` перед любым использованием API Aspose | + +Применение этих советов обеспечивает плавный **convert pdf pdfx4** опыт в производственной среде. + +## Step 6: Extending the tutorial + +Освоив базовый **pdfx4 conversion tutorial**, вы можете исследовать: + +- **Batch conversion**: перебрать папку с PDF‑файлами и конвертировать каждый в PDF/X‑4. +- **Metadata injection**: добавить XMP‑метаданные, требуемые конкретными типографиями. +- **Color profile management**: прикрепить ICC‑профили с помощью `doc.ColorSpace = ColorSpace.DeviceRGB;` перед конвертацией. + +Все эти расширения опираются на ту же основу **aspose pdf format conversion**, продемонстрированную здесь. + +## Conclusion + +Это **pdfx4 conversion tutorial** показало, как **set pdf standard** в PDF/X‑4, выполнить надёжную **convert pdf using Aspose** и проверить результат. Теперь у вас есть полностью готовая C#‑программа, которую можно интегрировать в более крупные конвейеры обработки документов или использовать как отдельную утилиту. Поэкспериментируйте с пакетной обработкой, управлением метаданными или альтернативными PDF‑стандартами (PDF/A‑2b, PDF/UA), чтобы углубить свои навыки в **aspose pdf format conversion**. + +Happy coding, and enjoy the confidence that comes with PDF/X‑4 compliant output! + +## What Should You Learn Next? + +Следующие руководства охватывают тесно связанные темы, построенные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полностью рабочие примеры кода с пошаговыми объяснениями, помогающими освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/russian/net/document-creation/_index.md b/pdf/russian/net/document-creation/_index.md index 3ed82c21b5..da7215ab15 100644 --- a/pdf/russian/net/document-creation/_index.md +++ b/pdf/russian/net/document-creation/_index.md @@ -77,6 +77,9 @@ ### [Создание PDF-документа с Aspose.PDF – добавить страницу, форму и сохранить](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Узнайте, как добавить страницу, форму и сохранить PDF-документ с помощью Aspose.PDF для .NET. +### [Создание PDF‑документа в C# с Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Узнайте, как создать PDF‑документ в C# с помощью Aspose.PDF. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/russian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..4531a1a3d1 --- /dev/null +++ b/pdf/russian/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: Создайте PDF‑документ на C# с использованием Aspose.Pdf. Узнайте, как + добавить пустую страницу в PDF, добавить абзац в PDF и разместить текст в PDF с + точными координатами. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: ru +lastmod: 2026-08-08 +og_description: Создайте PDF‑документ на C# быстро. Этот учебник показывает, как добавить + пустую страницу в PDF, добавить абзац в PDF и разместить текст в PDF с помощью Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Создание PDF‑документа в C# с помощью Aspose.Pdf – полное руководство +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Создание PDF‑документа в C# с помощью Aspose.Pdf +url: /ru/net/document-creation/create-pdf-document-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-документ** программно, это руководство покажет вам, как это сделать. С помощью Aspose.Pdf для .NET вы можете добавить пустую страницу PDF, вставить абзац в PDF и разместить текст в PDF с пиксельной точностью — всё это в нескольких строках кода на C#. + +Вы завершите учебник полностью рабочим PDF‑файлом, содержащим заметку, размещённую в указанных вами координатах. Никаких внешних инструментов, никакого ручного редактирования — только чистый, повторяемый код, который можно вставить в любой проект .NET. + +## Что вы узнаете + +* Как **создать PDF-документ** с Aspose.Pdf. +* Правильный способ **добавить пустую страницу PDF** и почему страница должна существовать до добавления содержимого. +* Как **добавить абзац в PDF** и прикрепить пользовательский тег (полезно для последующего извлечения или стилизации). +* Техника **позиционирования текста в PDF** с использованием класса `Position`. +* Как сохранить результат на диск и проверить вывод. + +**Требования** + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7+). +* Действительная лицензия Aspose.Pdf для .NET или бесплатный оценочный ключ. +* IDE, например Visual Studio 2022 или VS Code с расширением C#. + +> **Pro tip:** Если вы используете бесплатную оценочную версию, сгенерированный PDF будет содержать небольшую водяную метку. Зарегистрируйте лицензию, чтобы её убрать. + +## Как создать PDF-документ с Aspose.Pdf + +Первый шаг — создать экземпляр класса `Document`. Этот объект представляет весь PDF‑файл и даёт доступ к страницам, ресурсам и параметрам сохранения. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Создание документа **не** записывает ничего на диск; оно лишь подготавливает представление в памяти, которое вы можете изменять. Такой подход сохраняет API быстрым и экономичным по памяти. + +## Добавление пустой страницы PDF с помощью Aspose.Pdf + +PDF должен содержать как минимум одну страницу, прежде чем вы сможете разместить любой контент. Добавление пустой страницы — это один вызов метода: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Метод `Add()` создаёт страницу с размером по умолчанию (A4) и ориентацией (портрет). Если нужен иной размер, передайте в `Add()` экземпляр `PageSize`. + +## Добавление абзаца в PDF и установка заметки + +Теперь, когда страница существует, вы можете создать объект `Paragraph`, который будет содержать видимый текст. Абзац также может нести пользовательский тег, что удобно, когда позже нужно программно найти или стилизовать элемент. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Зачем использовать тег? + +Теги — это метаданные, которые сопровождают элемент PDF. Их можно запросить позже с помощью `Document.FindObject()` или использовать в последующих процессорах PDF, которые опираются на теги для доступности или индексации. + +## Позиционирование текста в PDF с точными координатами + +Размещение абзаца по умолчанию находится в левом верхнем углу полей страницы. Чтобы переместить текст в точное место, задайте свойство `Position` у тега абзаца: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Координаты измеряются в пунктах (1 пункт = 1/72 дюйма). Начало координат (0,0) находится в левом нижнем углу страницы, что соответствует большинству движков рендеринга PDF. Отрегулируйте значения `X` и `Y` под нужды вашего макета. + +После позиционирования добавьте абзац в коллекцию страницы: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Сохранение PDF-документа + +Наконец, запишите PDF из памяти в файл. Вы можете указать путь вывода, формат и даже параметры шифрования. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Когда программа завершится, `output.pdf` будет содержать одну страницу с текстом **Important note**, размещённым рядом с верхним правым углом (X = 50, Y = 750). Откройте файл в любом PDF‑просмотрщике, чтобы проверить позицию. + +![Сгенерированный PDF-документ, созданный с помощью C# Aspose.Pdf, показывающий расположенную заметку](https://example.com/images/generated-pdf.png) + +*Текст alt изображения: Сгенерированный PDF-документ, созданный с помощью C# Aspose.Pdf, показывающий расположенную заметку* (включает основной ключевой запрос). + +## Полный, исполняемый пример + +Объединив все части, получаем полное консольное приложение, которое можно скопировать, собрать и запустить: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Ожидаемый вывод** при запуске программы: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Открытие `output.pdf` показывает одну страницу с текстом **Important note**, размещённым в указанных координатах. + +## Распространённые варианты и крайние случаи + +| Сценарий | Что изменить | Почему это важно | +|----------|----------------|----------------| +| **Разный размер страницы** | `pdfDocument.Pages.Add(PageSize.A5)` | Меньшие страницы уменьшают размер файла и подходят для мобильных экранов. | +| **Несколько заметок** | Loop over a collection of strings and create a `Paragraph` for each, incrementing the `Y` coordinate. | Позволяет пакетно генерировать заметки в виде маркеров. | +| **Unicode‑символы** | Ensure the source file is saved as UTF-8 and set `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf поддерживает Unicode из коробки, но кодировка файла должна соответствовать. | +| **PDF, защищённый паролем** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Добавляет безопасность для конфиденциальных заметок. | +| **Вывод с высоким разрешением** | Set `pdfDocument.PageInfo.Width` and `Height` to larger values before adding content. | Полезно для печати PDF большого формата. | + +## Советы для использования в продакшене + +* **Повторно используйте экземпляр `Document`** при генерации множества PDF в одном запросе, чтобы снизить нагрузку на сборщик мусора. +* **Освобождайте объекты** (`pdfDocument.Dispose()`), если создаёте много документов в цикле. +* **Проверяйте координаты**: значение `Y` не может превышать высоту страницы; иначе текст будет обрезан. +* **Используйте `TextFragmentAbsorber`** для последующего извлечения заметки по её тегу (`/P`), если нужно прочитать содержимое обратно. + +## Заключение + +Теперь вы знаете, как **создать PDF-документ** с Aspose.Pdf, **добавить пустую страницу PDF**, **добавить абзац в PDF**, **как добавить заметку PDF** и **позиционировать текст в PDF** с точностью. Полный пример демонстрирует чистый, повторяемый процесс, который можно расширять для счетов‑фактур, отчётов или любой задачи автоматизации документов. + +Далее изучайте связанные темы, такие как **добавление изображений в PDF**, **создание таблиц с Aspose.Pdf** или **применение цифровых подписей**. Все они опираются на те же базовые концепции, поэтому вы будете готовы к более сложным задачам генерации PDF. + +Удачной разработки! + +## Что следует изучить дальше? + +Следующие учебники охватывают тесно связанные темы, которые развивают техники, продемонстрированные в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, помогая вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [Создание PDF‑документа с Aspose.PDF – Добавление страницы, фигуры и сохранение](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Как добавить пустую страницу в конец PDF с помощью Aspose.PDF для .NET | Пошаговое руководство](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Как добавить текстовый штамп в 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/images-graphics/_index.md b/pdf/russian/net/images-graphics/_index.md index bca9317acf..60f375c2c2 100644 --- a/pdf/russian/net/images-graphics/_index.md +++ b/pdf/russian/net/images-graphics/_index.md @@ -44,6 +44,9 @@ ### [Рисуйте прозрачные фигуры в PDF-файлах с помощью Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Учебник по коду для Aspose.PDF Net +### [Установка непрозрачности PDF в C# с Aspose.PDF – полное руководство](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Подробное руководство по настройке прозрачности PDF в C# с использованием Aspose.PDF. + ### [Эффективная идентификация изображений PDF с помощью Aspose.PDF для .NET](./master-image-identification-aspose-pdf-net/) Узнайте, как определить изображения в оттенках серого и RGB в PDF-файлах с помощью Aspose.PDF для .NET. В этом руководстве рассматриваются вопросы установки, извлечения изображений и советы по производительности. diff --git a/pdf/russian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/russian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..057ff0e403 --- /dev/null +++ b/pdf/russian/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Установите непрозрачность PDF в C# с помощью Aspose.PDF — узнайте, как + настроить прозрачность обводки и заливки несколькими строками кода. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: ru +lastmod: 2026-08-08 +og_description: Быстро задайте непрозрачность PDF в C#. Это руководство показывает, + как изменить прозрачность обводки и заливки с помощью API графического состояния + Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Установите непрозрачность PDF в C# с Aspose.PDF – пошаговое руководство +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Установка непрозрачности PDF в C# с Aspose.PDF – полное руководство +url: /ru/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Установить непрозрачность PDF в C# с Aspose.PDF – полное руководство + +Если вам нужно **установить непрозрачность PDF** для конкретных операций рисования, этот учебник покажет, как сделать это с помощью Aspose.PDF для .NET. Будь то водяные знаки, полупрозрачные наложения или пользовательская графика — вы узнаете лаконичный, готовый к продакшну подход. + +В последующих разделах мы рассмотрим всё: от загрузки PDF до редактирования его графического состояния, добавления нового определения непрозрачности и сохранения результата. Внешняя документация не требуется — только код ниже и краткое пояснение к каждому шагу. + +## Требования + +Прежде чем начать, убедитесь, что у вас есть: + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7+) +* Действующая лицензия Aspose.PDF for .NET (бесплатная trial‑версия подходит для оценки) +* Входной PDF‑файл (`input.pdf`) в папке, к которой есть права чтения/записи +* Visual Studio 2022 или любой другой предпочитаемый IDE для C# + +## Шаг 1 – Загрузка PDF‑документа (Aspose.PDF for .NET) + +Первая задача — открыть существующий PDF. Aspose.PDF представляет файл PDF классом `Document`, который предоставляет полный доступ к страницам, ресурсам и объектам низкого уровня. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Почему это важно*: Загрузка документа создаёт модель в памяти, которую можно безопасно изменять. Оператор `using` гарантирует автоматическое освобождение файлового дескриптора после завершения работы. + +## Шаг 2 – Получить первую страницу для редактирования + +Непрозрачность задаётся на уровне страницы через её словарь ресурсов. Здесь мы работаем с первой страницей, но при необходимости можно перебрать `doc.Pages` для пакетной обработки. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Почему это важно*: У каждой страницы есть собственная коллекция `Resources`, где хранятся графические состояния, шрифты, изображения и т.д. Изменяя нужную страницу, вы гарантируете, что эффект непрозрачности появится в ожидаемом месте. + +## Шаг 3 – Открыть словарь ресурсов страницы для редактирования + +Aspose.PDF предоставляет вспомогательный класс `DictionaryEditor` для работы со словарями PDF низкого уровня без нарушения структуры файла. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Почему это важно*: Прямое редактирование словарей COS (Content Object System) — единственный способ внедрить пользовательское графическое состояние. Редактор абстрагирует низкоуровневый синтаксис, сохраняя валидность PDF. + +## Шаг 4 – Получить существующий словарь ExtGState + +Словарь **ExtGState** (external graphics state) хранит параметры непрозрачности, режим смешивания, толщину линий и т.д. Если он отсутствует, Aspose.PDF автоматически создаст его при добавлении новой записи. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Почему это важно*: Без записи `ExtGState` нельзя будет позже сослаться на пользовательскую непрозрачность в потоке содержимого страницы. Этот шаг гарантирует наличие контейнера. + +## Шаг 5 – Создать новое графическое состояние с требуемой непрозрачностью + +Графическое состояние — это набор параметров. Для непрозрачности задаём `CA` (stroke opacity) и `ca` (fill opacity). Также задаём режим смешивания (`BM`), чтобы контролировать взаимодействие полупрозрачных пикселей с нижележащим содержимым. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Почему это важно*: `CA` и `ca` принимают значения от 0 (полностью прозрачно) до 1 (полностью непрозрачно). Подбирайте эти числа, чтобы достичь нужного визуального эффекта. Режим смешивания `"Normal"` самый распространённый, но можно экспериментировать с `"Multiply"` или `"Screen"` для художественных эффектов. + +## Шаг 6 – Зарегистрировать новое графическое состояние в коллекции ExtGState + +Каждое графическое состояние должно иметь уникальное имя (например, `GS0`). Мы добавляем наш словарь в коллекцию `ExtGState`, затем обновляем ресурсы страницы. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Почему это важно*: Присвоив состояние имени (`GS0`), вы сможете сослаться на него позже в потоке содержимого страницы с помощью оператора `gs`. Если требуется несколько уровней непрозрачности, создайте дополнительные записи (`GS1`, `GS2`, …). + +## Шаг 7 – Применить графическое состояние к командам рисования (по желанию) + +Если нужно сразу применить непрозрачность к существующему содержимому, необходимо отредактировать поток содержимого страницы. Ниже простой пример, рисующий полупрозрачный прямоугольник с использованием только что созданного состояния. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Почему это важно*: Оператор `gs` (`SetGraphicsState`) указывает рендереру PDF использовать значения непрозрачности, определённые в `GS0`, для всех последующих команд рисования. Пара `grestore`/`gsave` гарантирует, что остальные элементы страницы останутся без изменений. + +## Шаг 8 – Сохранить изменённый PDF + +Наконец, запишите обновлённый документ обратно на диск. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Почему это важно*: Сохранение фиксирует все изменения, встраивает новое графическое состояние и создаёт PDF, который любой просмотрщик (Adobe Acrobat, Chrome и др.) отобразит с требуемой прозрачностью. + +### Ожидаемый результат + +Откройте `output.pdf` в просмотрщике PDF. Вы должны увидеть красный прямоугольник, контур которого непрозрачен на 80 %, а заливка — на 40 %, плавно смешиваясь с фоном. Остальная часть страницы остаётся без изменений. + +## Распространённые варианты и граничные случаи + +| Ситуация | Что изменить | Причина | +|-----------|----------------|--------| +| **Несколько уровней непрозрачности** | Создать дополнительные графические состояния (`GS1`, `GS2`, …) с разными значениями `CA`/`ca` и ссылаться на них при необходимости | Позволяет тонко управлять различными элементами | +| **Разные режимы смешивания** | Использовать `"Multiply"`, `"Screen"`, `"Overlay"` и т.д. вместо `"Normal"` в записи `BM` | Дает художественные эффекты смешивания | +| **Применение к существующему потоку содержимого** | Вставить `SetGraphicsState` перед конкретными операторами рисования, которые нужно затронуть | Предотвращает нежелательную непрозрачность у несвязанных объектов | +| **Большие PDF‑файлы** | Обрабатывать страницы в цикле `foreach (Page p in doc.Pages)` чтобы не загружать весь файл в память сразу | Улучшает производительность и снижает нагрузку на память | +| **Отсутствует ExtGState** | Код в Шаге 4 уже создаёт его при необходимости, дополнительная обработка не требуется | Гарантирует наличие словаря | + +### Профессиональный совет + +При добавлении множества пользовательских графических состояний придерживайтесь единой схемы именования (`GS0`, `GS1`, …) и документируйте назначение каждого в блоке комментариев. Это упростит будущую поддержку, особенно в командных проектах. + +## Полный, готовый к запуску пример + +Ниже представлена полная программа, которую можно скопировать, вставить и запустить. В ней включены все шаги, необходимые директивы `using` и комментарии. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Запустите программу, + +## Что изучать дальше? + +Следующие учебники охватывают тесно связанные темы, расширяющие техники, продемонстрированные в этом руководстве. Каждый ресурс содержит полностью работающие примеры кода с пошаговыми объяснениями, помогающими освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..c04d797c88 100644 --- a/pdf/russian/net/programming-with-forms/_index.md +++ b/pdf/russian/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-документ с Aspose.PDF – полное руководство](./save-pdf-document-with-aspose-pdf-complete-guide/) | Узнайте, как полностью сохранить PDF-документ с помощью Aspose.PDF для .NET в этом подробном руководстве. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/russian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..48e7a0abed --- /dev/null +++ b/pdf/russian/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Сохраните PDF‑документ с помощью Aspose.PDF, узнайте, как добавить страницы + в PDF, заполнить поля формы PDF и создать PDF с полями формы в одном руководстве. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: ru +lastmod: 2026-08-08 +og_description: Сохраняйте PDF‑документ с помощью Aspose.PDF и узнайте, как добавлять + страницы в PDF, заполнять поля формы PDF и быстро и надёжно создавать PDF с полями + формы. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Сохранение PDF‑документа с помощью Aspose.PDF – пошаговое руководство +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Сохранение PDF‑документа с помощью Aspose.PDF — полное руководство +url: /ru/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сохранить PDF‑документ с Aspose.PDF – полное руководство + +Если вам нужно **сохранить PDF‑документ**, содержащий интерактивные поля формы, это руководство покажет, как это сделать. Вы увидите, как добавить страницы в PDF, создать форму PDF и заполнить поле формы — все это с помощью Aspose.PDF for .NET. + +В следующих разделах вы научитесь: + +* добавлять несколько страниц в новый PDF, +* создавать текстовое поле формы на первой странице, +* размещать widget‑аннотацию того же поля на второй странице, +* задавать значение поля (заполнять поле формы PDF), +* и, наконец, **сохранить PDF‑документ** на диск. + +Никакие внешние инструменты не требуются; полностью готовый исполняемый код включён. + +## Предварительные требования + +* .NET 6.0 или новее (код также работает с .NET Framework 4.7.2+). +* Действительная лицензия Aspose.PDF for .NET или бесплатный оценочный ключ. +* Visual Studio 2022 (или любой другой IDE для C#). + +Установите пакет NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Как добавить страницы в PDF + +Первый шаг — создать пустой PDF и добавить нужные страницы. Добавление страниц до определения полей формы гарантирует точность координат разметки. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Почему это важно:* Каждый объект `Page` представляет печатное полотно. Добавляя страницы заранее, вы сможете ссылаться на них позже при позиционировании элементов формы. + +## Как создать форму PDF с Aspose.PDF + +Форма PDF состоит из **определения поля** (логический контейнер) и одной или нескольких **widget‑аннотаций** (визуальное представление). В примере создаётся `TextBoxField` с именем **Comments** на первой странице. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Почему это важно:* Координаты `Rectangle` задаются в пунктах (1 pt = 1/72 in). Подгоните значения под ваш дизайн. + +## Заполнить поле формы PDF + +Вы можете программно задать значение поля до сохранения документа. Это и есть суть **заполнения поля формы PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Если нужно заполнить поле позже (например, из ввода пользователя), просто присвойте новое значение `commentsField.Value` перед вызовом `Save`. + +## Добавить widget‑аннотацию того же поля на второй странице + +Widget‑аннотация делает поле формы видимым на странице. Добавив вторую widget‑аннотацию, одно логическое поле появляется на обеих страницах, демонстрируя **создание PDF с полями формы**, охватывающими несколько страниц. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Почему это важно:* Коллекция `Widgets` может содержать любое количество визуальных представлений. Пользователи могут взаимодействовать с полем на любой странице, а введённое значение остаётся синхронным. + +## Привязать поле к аннотациям первой страницы + +Поля формы должны быть добавлены в коллекцию аннотаций страницы, чтобы PDF‑просмотрщик мог их отобразить. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Сохранить PDF‑документ + +Теперь, когда форма полностью определена, вы можете **сохранить PDF‑документ** в выбранное место. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Когда откроете `output.pdf` в Adobe Acrobat Reader или любом другом PDF‑просмотрщике, вы увидите текстовое поле на странице 1 и соответствующее поле на странице 2. Ввод текста в любое из полей обновит одно и то же логическое поле. + +## Полный, исполняемый пример + +Ниже приведена полная программа, которую можно скопировать в консольное приложение. Она компилируется и создаёт описанный PDF без каких‑либо изменений. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Ожидаемый результат:** Файл `output.pdf` с двумя страницами. На странице 1 отображается текстовое поле с меткой «Comments» в координатах (100, 600). На странице 2 то же поле в координатах (100, 400). Поле предварительно заполнено текстом «Enter your feedback here». Изменение текста на любой странице обновит значение при повторном сохранении документа. + +## Часто задаваемые вопросы и обработка граничных случаев + +| Вопрос | Ответ | +|----------|--------| +| *Можно ли добавить более одной widget‑аннотации для одного и того же поля?* | Да. Добавляйте дополнительные объекты `WidgetAnnotation` в `commentsField.Widgets`. Каждая widget может быть размещена на любой странице. | +| *Как задать внешний вид поля (шрифт, граница, фон)?* | Используйте `commentsField.DefaultAppearance` для указания шрифта и цвета, а свойства `commentsField.Border` — для стиля линии. | +| *Как сделать поле только для чтения?* | Установите `commentsField.ReadOnly = true;`. Поле будет отображать значение, но пользователь не сможет его изменить. | +| *Можно ли заполнить поле после создания PDF?* | Да. Загрузите сохранённый PDF через `new Document("output.pdf")`, найдите поле через `pdfDocument.Form["Comments"]`, присвойте новое `Value` и снова вызовите `Save`. | +| *Что если PDF должен соответствовать PDF/A для архивирования?* | После построения документа вызовите `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` перед сохранением. | + +## Советы от практиков + +* **Pro tip:** Делайте логическое имя поля коротким и уникальным; это идентификатор, который будет использоваться при программном заполнении формы. +* **Watch out for:** Перекрывающиеся прямоугольники widget‑ов. Перекрытия могут вызывать артефакты отображения в некоторых просмотрщиках. +* **Performance note:** При добавлении большого количества страниц или widget‑ов в цикле оптимизируйте код, переиспользуя один объект `Rectangle` и меняя только его координаты. + +## Заключение + +Теперь вы знаете, как **сохранить PDF‑документ**, содержащий полностью функционирующую форму, как **заполнять поле формы PDF**, а также как **добавлять страницы в PDF** и **создавать PDF с полями формы** с помощью Aspose.PDF for .NET. Полный пример демонстрирует сквозной процесс от создания документа до окончательного сохранения. + +Далее изучайте связанные темы, такие как **добавление флажков**, **создание выпадающих списков** или **уплощение формы** для распространения только для чтения. Все они опираются на те же принципы, рассмотренные здесь, и расширяют ваши возможности автоматизации PDF. + +Удачной разработки! + +## Что изучать дальше? + +Следующие руководства охватывают близко связанные темы, построенные на техниках, продемонстрированных в этом руководстве. Каждый ресурс содержит полностью работающие примеры кода с пошаговыми объяснениями, помогающими освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/russian/net/programming-with-pdf-pages/_index.md index 6b6094da15..7d66071b82 100644 --- a/pdf/russian/net/programming-with-pdf-pages/_index.md +++ b/pdf/russian/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ | [Обновить размеры страницы PDF](./update-dimensions/) | Узнайте, как легко обновить размеры страницы PDF с помощью Aspose.PDF для .NET в этом подробном пошаговом руководстве. | | [Увеличить содержимое страницы в PDF-файле](./zoom-to-page-contents/) | Узнайте, как увеличить масштаб содержимого страницы в файлах PDF с помощью Aspose.PDF для .NET в этом подробном руководстве. Улучшите свои документы PDF в соответствии с вашими конкретными потребностями. | | [Добавить номера страниц в PDF с C# – Полное пошаговое руководство](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Пошаговое руководство по добавлению номеров страниц в PDF-файлы с помощью C# и Aspose.PDF для .NET. | +| [Добавить нумерацию Бейтса в PDF с Aspose – пошаговое руководство](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Пошаговое руководство по добавлению нумерации Бейтса в PDF-файлы с помощью Aspose.PDF для .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/russian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..820fa4c83b --- /dev/null +++ b/pdf/russian/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Добавьте нумерацию Бейтса в PDF с помощью Aspose.Pdf на C#. Этот учебник + также показывает, как добавить пустую страницу в PDF и генерировать PDF программно. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: ru +lastmod: 2026-08-08 +og_description: Добавьте нумерацию Бейтса в PDF с помощью Aspose.Pdf на C#. Узнайте, + как добавить пустую страницу в PDF, генерировать PDF программно и сохранять готовый + документ за считанные минуты. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Добавление нумерации Бейтса в PDF с Aspose — полное руководство по C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Добавление нумерации Бейтса в PDF с помощью Aspose – пошаговое руководство +url: /ru/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Add bates numbering pdf with Aspose – пошаговое руководство + +Добавление bates numbering pdf с Aspose.Pdf довольно простое, как только вы поймёте основные шаги. Если вам также нужно добавить blank page pdf или генерировать pdf программно, это руководство охватывает всё необходимое. + +В этом учебнике вы: + +* Создадите новый PDF‑документ с нуля. +* Добавите blank page pdf, который будет содержать номера Бейтса. +* Настроите артефакт BatesNumberingArtifact с пользовательским префиксом. +* Сохраните PDF, чтобы номера отобразились в сгенерированном файле. + +К концу вы получите полностью рабочее консольное приложение C#, которое создаёт PDF с номерами Бейтса, например **CASE‑1000**, **CASE‑1001**, … – типичное требование для юридических и e‑discovery процессов. + +## Требования + +* .NET 6.0 SDK или новее (код также работает с .NET Framework 4.8). +* Visual Studio 2022 или любой совместимый с C# IDE. +* Действительная лицензия Aspose.Pdf for .NET (или бесплатный оценочный ключ). +* Базовое знакомство с синтаксисом C#. + +> **Pro tip:** Если запустить код без лицензии, Aspose добавит небольшую водяную метку в выходной PDF. + +## Шаг 1: Настройка проекта и импорт Aspose.Pdf + +Создайте новый консольный проект и добавьте пакет Aspose.Pdf NuGet: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Необходимые директивы `using` для примера: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Эти пространства имён дают доступ к классам `Document`, `Page` и `BatesNumberingArtifact`, которые будут использованы позже. + +## Шаг 2: Добавление blank page pdf + +Номер Бейтса должен быть привязан к странице, поэтому сначала создаём пустую страницу, которая получит артефакт нумерации. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Класс `Document` представляет весь PDF‑файл, а `Pages.Add()` вставляет новую пустую страницу в конец коллекции страниц документа. Поскольку документ изначально пуст, этот вызов также создаёт первую страницу. + +## Шаг 3: Настройка BatesNumberingArtifact + +Теперь определим, как должны выглядеть номера Бейтса. `BatesNumberingArtifact` позволяет задать стартовый номер, префикс, суффикс и параметры форматирования. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Почему это важно:** +Установка `StartNumber` в **1000** соответствует типичным конвенциям юридических дел. `Prefix` гарантирует, что каждый номер будет выглядеть как **CASE‑1000**, **CASE‑1001**, …, что упрощает поиск и сортировку. + +## Шаг 4: Привязка артефакта к странице + +Артефакт необходимо добавить в коллекцию `Artifacts` страницы, чтобы Aspose отрисовал его на каждой странице при сохранении. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +При сохранении документа Aspose автоматически повторяет артефакт на всех страницах, увеличивая номер для каждой последующей страницы. + +## Шаг 5: (Опционально) Добавление дополнительных страниц + +Если нужны дополнительные страницы, просто повторите `pdfDocument.Pages.Add()`. Прикреплённый в предыдущем шаге артефакт BatesNumberingArtifact автоматически появится на каждой новой странице. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Шаг 6: Сохранение PDF – генерация pdf программно + +Наконец, сохраняем документ на диск. В этот момент номера Бейтса отрисовываются на страницах. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Ожидаемый результат:** +Откройте *BatesNumberedDocument.pdf* — вы увидите трёхстраничный PDF. Каждая страница отображает номер Бейтса в правом нижнем углу: + +* Страница 1 → **CASE‑1000** +* Страница 2 → **CASE‑1001** +* Страница 3 → **CASE‑1002** + +Номера автоматически инкрементируются, потому что артефакт привязан к коллекции страниц. + +## Полный, исполняемый пример + +Объединив всё вместе, получаем полностью готовую консольную программу, которую можно скопировать, вставить и запустить: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Запустите программу командой `dotnet run`. После выполнения найдите файл на рабочем столе и проверьте номера Бейтса. + +![Пример добавления bates numbering pdf](/images/bates-numbering.png "Пример добавления bates numbering pdf") + +## Часто задаваемые вопросы и особые случаи + +### Что если мне нужен другой шрифт или позиция? + +`BatesNumberingArtifact` раскрывает свойства, такие как `FontSize`, `FontColor`, `HorizontalAlignment` и `VerticalAlignment`. Например: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Как исключить конкретную страницу из нумерации? + +Создайте отдельный `BatesNumberingArtifact` для страниц, которые нужно пронумеровать, и добавьте его только к этим страницам. Страницы без прикреплённого артефакта останутся ненумерованными. + +### Работает ли это с существующими PDF? + +Да. Вместо `new Document()` загрузите существующий файл: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Затем привяжите артефакт к нужным страницам и сохраните. + +## Заключение + +Теперь вы знаете, как **add bates numbering pdf** с помощью Aspose.Pdf, как **add blank page pdf**, и как **generate pdf programmatically** в чистом, переиспользуемом решении на C#. Подход работает с любым количеством страниц, пользовательскими префиксами и параметрами стиля, предоставляя полный контроль над конечным документом. + +Следующие шаги, которые вы можете изучить: + +* Use **create pdf as + +## Что вам стоит изучить дальше? + +Следующие учебники охватывают тесно связанные темы, построенные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, помогая вам освоить дополнительные возможности API и исследовать альтернативные подходы в ваших проектах. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 588884d965..229b796841 100644 --- a/pdf/russian/net/programming-with-security-and-signatures/_index.md +++ b/pdf/russian/net/programming-with-security-and-signatures/_index.md @@ -24,7 +24,7 @@ | [Изменить пароль в PDF-файле](./change-password/) | Узнайте, как легко менять пароли PDF с помощью Aspose.PDF для .NET. Наше пошаговое руководство безопасно проведет вас через весь процесс. | | [Расшифровать PDF-файл](./decrypt/) | Узнайте, как безопасно расшифровать файлы PDF с помощью Aspose.PDF для .NET. Получите пошаговое руководство по улучшению навыков управления документами. | | [Определить правильный пароль в PDF-файле](./determine-correct-password/) | Разблокируйте PDF-файлы с помощью правильного пароля с помощью Aspose.PDF для .NET. Узнайте, как легко определить правильный пароль. | -| [Цифровая регистрация в PDF-файле](./digitally-sign/) Узнайте, как подписывать PDF-файлы цифровой подписью с помощью Aspose.PDF для .NET. Пошаговое руководство, которое гарантирует безопасность и подлинность ваших документов. | +| [Цифровая регистрация в PDF-файле](./digitally-sign/) Узнайте, как подписывать PDF-файлы цифровой подписью с помощью Aspose.PDF для .NET. Пошаговое руководство, которое гарантирует безопасность и подлинность ваших документов. | | [Цифровая подпись с отметкой времени в PDF-файле](./digitally-sign-with-time-stamp/) | Узнайте, как подписать PDF-файл цифровой подписью с временной меткой с помощью Aspose.PDF для .NET. Это пошаговое руководство охватывает предварительные условия, настройку сертификата, временную метку и многое другое. | | [Зашифровать PDF-файл](./encrypt/) | Узнайте, как легко шифровать файлы PDF с помощью Aspose.PDF для .NET. Защитите конфиденциальную информацию с помощью нашего простого пошагового руководства. | | [Извлечение изображения](./extracting-image/) | Легко научитесь извлекать изображения из PDF-файлов с помощью Aspose.PDF для .NET. Следуйте нашему пошаговому руководству для бесперебойного извлечения изображений. | @@ -33,8 +33,10 @@ | [Установить привилегии в PDF-файле](./set-privileges/) | Узнайте, как установить привилегии PDF с помощью Aspose.PDF для .NET с помощью этого пошагового руководства. Эффективно защитите свои документы. | | [Подпишите с помощью смарт-карты, используя подпись в файле PDF](./sign-with-smart-card-using-pdf-file-signature/) | Узнайте, как подписывать файлы PDF с помощью смарт-карты с Aspose.PDF для .NET. Следуйте этому пошаговому руководству для безопасных цифровых подписей. | | [Подпишите с помощью смарт-карты, используя поле подписи](./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 и читать подписанные файлы с помощью Aspose.PDF для .NET на C#. | -| [Как восстановить PDF-файлы – Полное руководство на C# с Aspose.Pdf](./how-to-repair-pdf-files-complete-c-guide-with-aspose-pdf/) | Узнайте, как восстанавливать поврежденные PDF-файлы с помощью Aspose.PDF для .NET. Пошаговое руководство на C#. | +| [Проверка подписей PDF в C# – Как читать подписанные PDF-файлы](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Узнайте, как проверять подписи PDF и читать подписанные файлы с помощью Aspose.PDF для .NET на C#. | +| [Проверка подписи PDF в C# с Aspose.PDF – полное руководство](./verify-pdf-signature-in-c-with-aspose-pdf-complete-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 с Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Узнайте, как проверить цифровую подпись PDF-файла с помощью Aspose.PDF для .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/russian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/russian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..a049be32e8 --- /dev/null +++ b/pdf/russian/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-08-08 +description: Учебник по подписи PDF, показывающий, как проверять цифровую подпись + PDF с использованием параметров проверки подписи и кода C# — быстрый пошаговый гид. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: ru +lastmod: 2026-08-08 +og_description: Учебник по подписи PDF проведёт вас через процесс проверки цифровой + подписи PDF с помощью Aspose.PDF. Узнайте, как настроить параметры проверки подписи + и проверить результат. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: Учебник по подписи PDF – проверка цифровых подписей PDF в C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Учебник по подписи PDF: проверка цифровой подписи PDF с помощью Aspose.PDF' +url: /ru/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signature tutorial – проверка цифровой подписи PDF в C# + +Если вам нужен **pdf signature tutorial**, который точно показывает, как проверить цифровую подпись PDF, это руководство вам поможет. Вы увидите, как загрузить подписанный PDF, настроить **signature validation options**, выполнить проверку и отобразить результат — всё с понятным, исполняемым кодом C#. + +Проверка подписи PDF имеет решающее значение при обработке контрактов, счетов‑фактур или любых юридически обязательных документов. Это руководство проходит весь рабочий процесс, чтобы вы могли интегрировать проверку подписей в свои приложения без догадок о необходимых вызовах API. + +## Что вы сможете сделать + +* Загрузить подписанный PDF‑файл с помощью Aspose.PDF. +* Настроить **signature validation options**, например, алгоритм хеширования. +* Вызвать метод `Validate` для **validate pdf digital signature**. +* Вывести в консоль чёткое сообщение «Signature valid». + +**Prerequisites** + +* .NET 6.0 (или новее) установлен. +* Visual Studio 2022 (или любой IDE для C#). +* NuGet‑пакет Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Pro tip:** Используйте последнюю версию Aspose.PDF, чтобы получить поддержку алгоритмов SHA‑3 и улучшенную производительность проверки. + +## Шаг 1: Установите NuGet‑пакет Aspose.PDF + +Откройте проект в Visual Studio и выполните следующую команду в консоли диспетчера пакетов: + +```bash +Install-Package Aspose.Pdf +``` + +Пакет добавляет пространство имён `Aspose.Pdf`, которое содержит класс `Document` и API, связанные с подписью, которые вы будете использовать. + +## Шаг 2: Загрузите подписанный PDF‑документ + +Первая строка кода создаёт объект `Document`, представляющий PDF‑файл на диске. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* Класс `Document` разбирает структуру PDF, предоставляя коллекцию `Signatures`, в которой хранятся все встроенные цифровые подписи. Если путь к файлу неверен, будет выброшено исключение, поэтому проверьте путь перед запуском программы. + +## Шаг 3: Настройте параметры проверки подписи + +Вы можете адаптировать процесс проверки с помощью класса `SignatureValidationOptions`. В этом руководстве мы указываем алгоритм хеширования, но также можно задать проверку отзыва сертификатов, проверку временной метки и многое другое. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* Алгоритм хеширования должен совпадать с тем, который использовался при создании подписи. Несоответствие алгоритма приводит к провалу проверки, даже если подпись в остальном корректна. + +## Шаг 4: Проверьте первую подпись + +Большинство PDF‑файлов содержат одну подпись, но коллекция `Signatures` может хранить их несколько. В этом примере проверяется первая запись (`[0]`). Метод `Validate` возвращает Boolean, указывающий на успех. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* Если в PDF нет подписей, `document.Signatures.Count` будет `0`, и обращение к `[0]` вызовет `IndexOutOfRangeException`. Защититесь от этого простой проверкой: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Шаг 5: Выведите результат проверки + +Наконец, запишите результат в консоль. Этот шаг демонстрирует результат **check pdf signature** в человекочитаемом виде. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +При запуске программы вы должны увидеть: + +``` +Signature valid: True +``` + +Если подпись повреждена, использует неподдерживаемый алгоритм или сертификат отозван, вывод будет `False`. + +## Полный, исполняемый пример + +Скопируйте следующий код в новый консольный проект (`dotnet new console`) и замените `YOUR_DIRECTORY/signed.pdf` на путь к вашему подписанному PDF‑файлу. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Ожидаемый вывод + +``` +Signature valid: True +``` + +Если проверка подписи не прошла, консоль отобразит `Signature valid: False`. + +## Часто задаваемые вопросы и устранение неполадок + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## Следующие шаги + +* Исследуйте **validate pdf signature** для нескольких подписей, перебирая `document.Signatures`. +* Объедините это руководство с **check pdf signature** в веб‑API, чтобы предоставлять проверку в реальном времени для загружаемых контрактов. +* Углубитесь в **signature validation options**, такие как проверки CRL/OCSP, проверка временных меток и пользовательские хранилища доверия. + +Теперь у вас есть полноценный **pdf signature tutorial**, показывающий, как **validate pdf digital signature** с помощью Aspose.PDF в C#. Смело адаптируйте код под свой рабочий процесс, добавляйте логирование или интегрируйте его в более крупные конвейеры обработки документов. Приятного кодинга! + +## Что стоит изучить дальше? + +Следующие руководства охватывают тесно связанные темы, построенные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы в собственных проектах. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/russian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..d86666ec83 --- /dev/null +++ b/pdf/russian/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: Проверьте подпись PDF в C# с помощью Aspose.PDF. Узнайте, как валидировать + цифровую подпись PDF и перечислять подписи PDF всего в несколько строк кода. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: ru +lastmod: 2026-08-08 +og_description: Проверьте подпись PDF в C# с помощью Aspose.PDF. Это руководство покажет, + как проверять цифровую подпись PDF, перечислять подписи PDF и эффективно обрабатывать + скомпрометированные подписи. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Проверка подписи PDF в C# – быстрый учебник по Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Проверка подписи PDF в C# с помощью Aspose.PDF – полное руководство +url: /ru/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Проверка подписи PDF в C# с помощью Aspose.PDF – полное руководство + +Если вам нужно **проверить подпись PDF** в .NET‑приложении, это руководство покажет лаконичный способ сделать это с Aspose.PDF. Вы узнаете, как **валидировать цифровую подпись PDF**, **перечислить подписи PDF** и обнаружить компрометированные подписи всего в нескольких строках кода. + +В руководстве рассматривается всё: от установки библиотеки до обработки особых случаев, таких как неподписанные документы или зашифрованные PDF. К концу вы сможете интегрировать проверку подписи в любой проект на C#, гарантируя подлинность получаемых PDF‑файлов. + +**Prerequisites** + +- .NET 6.0 или новее (код также работает с .NET Framework 4.6+). +- Базовые знания C# и Visual Studio (или любой другой IDE). +- Лицензия Aspose.PDF for .NET (бесплатная пробная версия подходит для оценки). + +Если вы соответствуете этим требованиям, вы готовы начать проверку подписей PDF. + +## Verify PDF signature – set up the project + +1. **Add the Aspose.PDF NuGet package** + Откройте консоль диспетчера пакетов и выполните: + + ```bash + Install-Package Aspose.PDF + ``` + + Это добавит сборку `Aspose.Pdf` и её зависимости. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` предоставляет расширение `Any`, используемое позже, а `Aspose.Pdf` содержит классы `Document` и `Signature`. + +## Load the PDF document + +Первый практический шаг – открыть PDF, который нужно проанализировать. Aspose.PDF читает файл в память, позволяя запрашивать его подписи. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – Загрузка документа внутри блока `using` гарантирует своевременное освобождение файлового дескриптора, предотвращая блокировки файлов в длительно работающих сервисах. + +## List PDF signatures + +Прежде чем валидировать подпись, возможно, захотите узнать, сколько подписей присутствует. Этот шаг демонстрирует возможность **list PDF signatures**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` возвращает коллекцию объектов `Signature`. +- `Count` показывает, сколько подписей существует. +- Каждый `Signature` раскрывает метаданные, такие как `Id`, `SignatureType` и `Reason`, что может быть полезно для журналов аудита. + +**Edge case** – Если в PDF нет подписей, `Count` будет `0`, и цикл не выполнится. Вы можете обработать эту ситуацию так: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validate digital signature PDF – detect compromised signatures + +Теперь, когда вы можете перечислять подписи, основная задача – **verify PDF signature** на целостность. Aspose.PDF предоставляет свойство `IsCompromised`, которое возвращает `true`, когда криптографический хеш подписи больше не соответствует содержимому документа. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised` выполняет полную криптографическую проверку с использованием встроенной цепочки сертификатов. +- Оператор LINQ `Any` останавливается на первой компрометированной подписи, делая проверку эффективной даже для документов с множеством подписей. + +### Handling multiple signatures individually + +Если нужно узнать, какая именно подпись не прошла проверку, используйте перебор вместо `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** Сохраняйте результат проверки вместе с `sig.Id` в базе данных для последующего судебно‑технического анализа. + +## Output results and consider edge cases + +Ниже представлена полная, готовая к запуску программа, объединяющая описанные шаги. Она загружает PDF, перечисляет все подписи, валидирует их и выводит понятный результат. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Common pitfalls and how to avoid them + +| Pitfall | Solution | +|---------|----------| +| The PDF is password‑protected. | Pass the password via `document.Encrypt.Decrypt(password)` before accessing `Signatures`. | +| No Aspose.PDF license is set. | Use `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` to avoid evaluation watermarks. | +| Large PDFs cause high memory usage. | Process the file in a streaming mode (`Document.Load(stream)`) instead of loading the whole file at once. | + +## Conclusion + +Теперь вы знаете, как **verify PDF signature** в C# с помощью Aspose.PDF, как **validate digital signature PDF** и как **list PDF signatures** для отчётности или аудита. Полный пример демонстрирует загрузку документа, перечисление его подписей, проверку каждой на компрометацию и обработку типичных особых случаев. + +Дальнейшие шаги, которые стоит изучить: + +- **Validate timestamp tokens** to ensure a signature was created before a certificate expired. +- **Extract signer certificates** (`sig.Certificate`) for custom trust‑store validation. +- **Integrate with ASP.NET Core** to automatically reject uploaded PDFs that fail verification. + +Экспериментируйте с несколькими подписями, пользовательской логикой проверки или альтернативными PDF‑библиотеками. Если это руководство оказалось полезным, поделитесь им с коллегами или добавьте свои советы в комментариях. + + +## 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 Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/russian/net/text-operations/_index.md index b2b9faa33c..f946f7fabe 100644 --- a/pdf/russian/net/text-operations/_index.md +++ b/pdf/russian/net/text-operations/_index.md @@ -164,6 +164,9 @@ ### [Стиль текста в тегированных PDF-файлах с использованием Aspose.PDF для .NET | Руководство по созданию доступных и эстетичных PDF-файлов](./style-text-tagged-pdfs-aspose-pdf-net/) Узнайте, как стилизовать текст в тегированных документах PDF с помощью Aspose.PDF для .NET. Это руководство охватывает установку, методы и практические приложения для улучшения доступности. +### [Как суммировать PDF с помощью Aspose.Pdf.AI – руководство](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Узнайте, как быстро создавать резюме PDF-документов с помощью Aspose.Pdf.AI в .NET. + ## Дополнительные ресурсы - [Документация Aspose.PDF для сети](https://docs.aspose.com/pdf/net/) diff --git a/pdf/russian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/russian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..78946db89e --- /dev/null +++ b/pdf/russian/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Как суммировать PDF с помощью Aspose.Pdf.AI — узнайте, как суммировать + PDF с помощью ИИ, создать сводку PDF и сохранить её в виде PDF. Полный код и лучшие + практики. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: ru +lastmod: 2026-08-08 +og_description: Как суммировать PDF с помощью Aspose.Pdf.AI. Этот учебник показывает, + как суммировать PDF с помощью ИИ, создать сводку PDF и сохранить её как PDF в несколько + строк кода C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Как суммировать PDF с помощью Aspose.Pdf.AI – пошаговое руководство +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Как создать резюме PDF с помощью Aspose.Pdf.AI – руководство +url: /ru/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как суммировать PDF с помощью Aspose.Pdf.AI – руководство + +Если вам нужно **как суммировать PDF** быстро и надёжно, вы можете позволить модели ИИ выполнить тяжёлую работу. В этом руководстве показано, как суммировать PDF с помощью ИИ, создать сводку PDF и сохранить её как PDF, используя Aspose.Pdf.AI SDK для .NET. Вы получите полностью готовый пример и объяснение каждой строки, чтобы вы могли адаптировать решение под свои проекты. + +В руководстве рассматриваются: + +* Подготовка исходной папки и API‑ключа +* Создание `OpenAIClient`, который взаимодействует с моделью +* Настройка параметров суммирования, таких как temperature и путь к документу +* Создание `SummaryCopilot` и асинхронное получение текста сводки +* Сохранение сгенерированной сводки обратно в PDF‑файл + +Внешние сервисы, кроме конечной точки OpenAI, не требуются, а код работает с .NET 6+ и Aspose.Pdf.AI 23.7 (или более новой версией). + +## Требования + +* **.NET 6 SDK** (или более новая версия .NET) +* **Aspose.Pdf.AI for .NET** – установить через NuGet: `dotnet add package Aspose.Pdf.AI` +* API‑ключ **OpenAI** с доступом к нужной модели (например, `gpt‑4o`) +* PDF‑файл, который нужно суммировать (в примере используется `SampleDocument.pdf`) + +Убедитесь, что папка, указанная в `dataDirectory`, существует и у приложения есть права чтения/записи. + +## Шаг 1: Настройка структуры проекта + +Создайте консольный проект (или интегрируйте код в любое существующее .NET‑приложение). Минимальный `Program.cs` выглядит так: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Почему эта структура важна + +* **`await using`** автоматически освобождает `OpenAIClient`, закрывая HTTP‑соединения. +* **`Path.Combine`** формирует пути, независимые от ОС, предотвращая ошибки в Windows и Linux. +* **Temperature** контролирует креативность; `0.5` даёт сбалансированную, фактическую сводку. +* **`GetSummaryAsync`** возвращает обычный текст, тогда как `SaveSummaryAsync` создаёт корректный PDF, сохраняющий шрифты и макет. + +## Шаг 2: Понимание параметров суммирования + +Класс `OpenAISummaryCopilotOptions` позволяет точно настроить процесс суммирования: + +| Опция | Назначение | Типичные значения | +|--------|------------|-------------------| +| `WithTemperature(double)` | Контролирует случайность. `0.0` = детерминированный, `1.0` = очень креативный. | `0.3‑0.7` для бизнес‑документов | +| `WithDocument(string)` | Путь к исходному PDF. Должен быть доступен для чтения. | Любой абсолютный или относительный путь | +| `WithPrompt(string)` *(optional)* | Пользовательский запрос для управления моделью. | «Суммировать ключевые выводы в 150 словах.» | + +Если у вас **большие PDF** (более 10 МБ или много страниц), рассмотрите возможность разбить документ на более мелкие части перед суммированием, чтобы избежать ошибок ограничения токенов. SDK не разбивает автоматически; вы можете использовать `PdfDocument` из `Aspose.Pdf` для извлечения страниц и подачи их по одной. + +## Шаг 3: Запуск кода и проверка вывода + +1. Поместите `SampleDocument.pdf` в папку `Data`, которую вы указали. +2. Замените `"YOUR_API_KEY"` на ваш реальный ключ OpenAI. +3. Выполните `dotnet run`. + +В консоли вы должны увидеть два раздела: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Откройте `Summary_out.pdf` в любом просмотрщике PDF — он будет содержать тот же текст сводки, отформатированный стандартным шрифтом. PDF полностью доступен для поиска, потому что SDK встраивает текст как обычную страницу PDF. + +## Шаг 4: Распространённые варианты и обработка граничных случаев + +### Суммировать только часть документа + +Если вам нужно **summarize pdf with ai** для конкретной главы, сначала извлеките этот диапазон: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Затем укажите `WithDocument` на `Chapter5.pdf`. + +### Регулировка длины сводки + +Вы можете влиять на длину, добавив пользовательский запрос: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Обработка ошибок API + +Сетевые сбои или ограничения квоты вызывают `Aspose.Pdf.AI.Exceptions.AIException`. Оберните вызов в блок `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Сохранение сводки в пользовательском макете + +`SaveSummaryAsync` записывает обычный текст. Чтобы оформить PDF (добавить заголовок, шапку или брендинг), создайте новый `PdfDocument` и вставьте сводку вручную: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Шаг 5: Советы по производительности и лучшие практики + +* **Повторное использование `OpenAIClient`** для нескольких сводок в одном процессе — создание клиента дешево, но повторное использование базового `HttpClient` уменьшает истощение сокетов. +* **Кешировать сводку** если исходный PDF не меняется; вы можете хранить текст в базе данных и пропускать вызов API + +## Что изучать дальше? + +Следующие руководства охватывают тесно связанные темы, основанные на техниках, продемонстрированных в этом руководстве. Каждый ресурс включает полностью работающие примеры кода с пошаговыми объяснениями, чтобы помочь вам освоить дополнительные возможности API и исследовать альтернативные подходы к реализации в ваших проектах. + +- [Как извлечь и сохранить отдельные страницы PDF с помощью Aspose.PDF для .NET — полное руководство](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Как извлечь и сохранить вложения PDF с помощью Aspose.PDF .NET: полное руководство](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Как конвертировать HTML в PDF с помощью Aspose.PDF .NET: полное руководство](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/conversion-export/_index.md b/pdf/spanish/net/conversion-export/_index.md index d83ea04f04..1327404505 100644 --- a/pdf/spanish/net/conversion-export/_index.md +++ b/pdf/spanish/net/conversion-export/_index.md @@ -209,6 +209,9 @@ Aprenda a supervisar eficientemente el progreso de la conversión de PDF con Asp ### [Domine Aspose.PDF .NET: Convierta PDF a HTML con CSS personalizado](./aspose-pdf-net-license-html-conversion-custom-css/) Aprenda a aplicar una licencia Aspose.PDF y a convertir archivos PDF a HTML con CSS personalizado usando C#. Desbloquee todas las capacidades de procesamiento de documentos hoy mismo. +### [Guardar PDF como HTML con Aspose.PDF – guía paso a paso](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Aprenda a guardar documentos PDF como HTML utilizando Aspose.PDF con una guía paso a paso. + ### [Domine la sustitución de fuentes y la conversión de PDF con Aspose.PDF .NET para lograr conformidad y coherencia de marca](./mastering-font-substitution-pdf-conversion-asposepdf-net/) Aprenda a gestionar las fuentes faltantes sustituyéndolas y a convertir archivos PDF a formatos estandarizados con Aspose.PDF .NET. Garantice el cumplimiento normativo y la coherencia de marca en todas las plataformas. diff --git a/pdf/spanish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/spanish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..7b7e74864a --- /dev/null +++ b/pdf/spanish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Guardar PDF como HTML usando Aspose.PDF en C#. Aprende cómo convertir + PDF a HTML, omitir imágenes raster y manejar casos límite comunes. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: es +lastmod: 2026-08-08 +og_description: Guarda PDF como HTML usando Aspose.PDF. Esta guía te muestra cómo + convertir PDF a HTML, omitir imágenes rasterizadas y evitar errores comunes. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Guardar PDF como HTML con Aspose.PDF – tutorial completo de C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Guardar PDF como HTML con Aspose.PDF – guía paso a paso +url: /es/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Guardar PDF como HTML con Aspose.PDF – guía paso a paso + +If you need to **save PDF as HTML** quickly, this tutorial shows you exactly how to do it with Aspose.PDF for .NET. Whether you are building a document‑viewer web app or exporting reports for SEO‑friendly indexing, you’ll see a complete, runnable solution that converts PDF to HTML while giving you fine‑grained control over raster images. + +In addition to the primary task, we’ll also cover the **aspose pdf html conversion** options that let you skip raster images, adjust CSS handling, and manage large documents efficiently. By the end of this guide you’ll have a self‑contained program you can drop into any .NET project. + +## Requisitos previos + +* .NET 6.0 SDK o posterior (el código funciona también con .NET Core y .NET Framework) +* Visual Studio 2022 o cualquier IDE que soporte C# +* Una licencia de Aspose.PDF para .NET (la prueba gratuita sirve para evaluación) +* Un archivo PDF llamado `report.pdf` ubicado en una carpeta que pueda referenciar desde el código + +No se requieren paquetes NuGet adicionales más allá de `Aspose.Pdf`. + +## Paso 1: Instalar el paquete NuGet Aspose.PDF + +Abra la terminal en la carpeta de su proyecto y ejecute: + +```bash +dotnet add package Aspose.Pdf +``` + +El paquete agrega el espacio de nombres `Aspose.Pdf`, que contiene la clase `Document` y el tipo `HtmlSaveOptions` utilizado para operaciones de **convert pdf to html**. + +## Paso 2: Crear un proyecto de consola y agregar directivas using + +Cree una nueva aplicación de consola si aún no tiene una: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Luego abra `Program.cs` y agregue los espacios de nombres requeridos: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Estas directivas le dan acceso a la API central de PDF y a las opciones de guardado HTML que controlan el proceso **aspose convert pdf html**. + +## Paso 3: Cargar el documento PDF + +La primera línea operativa lee el PDF de origen en un objeto `Aspose.Pdf.Document`. Este objeto representa todo el archivo PDF en memoria y proporciona métodos para guardar, editar y extraer contenido. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Por qué es importante*: Cargar el documento una sola vez mantiene predecible el uso de memoria, especialmente para PDFs grandes. Si el archivo no se encuentra, Aspose lanza una `FileNotFoundException`, así que asegúrese de que la ruta sea correcta. + +## Paso 4: Configurar las opciones de guardado HTML + +`HtmlSaveOptions` le permite afinar cómo se convierte el PDF. En este tutorial omitimos las imágenes raster para mantener la salida ligera, pero puede cambiar el modo a `EmbedAll` si las necesita. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Puntos clave**: + +* `RasterImagesSavingMode.Skip` indica a Aspose que ignore las imágenes de mapa de bits (JPEG, PNG) durante la conversión. Esto es ideal cuando el PDF de origen contiene páginas escaneadas que no necesita en la vista HTML. +* Puede cambiar a `EmbedAll` o `External` si desea que las imágenes se guarden como archivos separados. +* La propiedad `ResourcesFolder` solo es relevante cuando las imágenes se guardan externamente. + +## Paso 5: Guardar el documento como HTML + +Ahora escribe el archivo HTML en disco usando las opciones configuradas. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Después de que esta llamada finalice, `report.html` contiene el contenido textual, los gráficos vectoriales y el diseño preservado del PDF original, pero sin imágenes raster. Puede abrir el archivo en un navegador para verificar el resultado. + +## Resultado esperado + +Al abrir `report.html` en Chrome o Edge, debería ver: + +* Todos los encabezados, párrafos y formas vectoriales renderizados correctamente. +* No hay etiquetas `` para imágenes raster (se omiten debido al modo `Skip`). +* CSS limpio y mínimo, ya sea en línea o en una hoja de estilo separada, según la opción que haya elegido. + +Si necesita confirmar que las imágenes fueron omitidas, inspeccione el código fuente de la página (`Ctrl+U`). No encontrará entradas ``. + +## Paso 6: Manejar casos límite comunes + +### 6.1 PDFs grandes (> 100 MB) + +Para archivos muy grandes, habilite el streaming para reducir la presión de memoria: + +```csharp +htmlOpts.Streaming = true; +``` + +El streaming escribe fragmentos de HTML directamente en disco, evitando que todo el documento se mantenga en memoria. + +### 6.2 PDFs protegidos con contraseña + +Si el PDF de origen está cifrado, proporcione la contraseña antes de guardar: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Intentar guardar sin descifrar lanza una `InvalidPasswordException`. + +### 6.3 Caracteres Unicode + +Aspose.PDF incrusta automáticamente fuentes Unicode, pero puede forzar una fuente específica para un renderizado consistente: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Nomenclatura de archivos personalizada para múltiples páginas + +Si desea que cada página del PDF sea un archivo HTML separado, establezca: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Esto crea `report_page_1.html`, `report_page_2.html`, etc., lo que puede ser útil para la paginación en aplicaciones web. + +## Ejemplo completo y ejecutable + +A continuación se muestra el programa completo que incorpora todos los pasos descritos. Copielo en `Program.cs`, ajuste las rutas y ejecute `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verificación**: Después de ejecutar, la consola muestra el mensaje de éxito. Abra el archivo HTML generado en un navegador para confirmar que el texto y los gráficos vectoriales aparecen correctamente y que las imágenes raster están omitidas. + +## Consejos profesionales y trampas + +* **Consejo profesional**: Si más adelante necesita las imágenes raster, cambie `RasterImagesSavingMode` a `External` y establezca `ResourcesFolder`. Esto crea una subcarpeta `images` con los mapas de bits extraídos. +* **Cuidado con**: Usar el modo predeterminado `Skip` en PDFs que dependen en gran medida de imágenes escaneadas producirá áreas en blanco donde esas imágenes deberían estar. Siempre pruebe con una muestra representativa de sus documentos. +* **Consejo de rendimiento**: Reutilizar una única instancia de `HtmlSaveOptions` para varios documentos reduce la sobrecarga de creación de objetos en conversiones por lotes. +* **Verificación de versión**: La API mostrada funciona con Aspose.PDF para .NET versión 23.9 y posteriores. Las versiones anteriores pueden usar `HtmlSaveOptions.RasterImagesSavingMode` con un nombre de enumeración ligeramente diferente. + +## Conclusión + +Ahora sabe cómo **save PDF as HTML** usando Aspose.PDF, cómo controlar el manejo de imágenes raster y cómo abordar desafíos típicos como archivos grandes, protección con contraseña y salida HTML por página. Esta solución completa le permite integrar la conversión de PDF a HTML en cualquier aplicación C# con confianza. + +### ¿Qué sigue? + +* Explore **aspose pdf html conversion** para incrustar fuentes y personalizar CSS. +* Combine esta conversión con una API web para servir HTML bajo demanda. +* Pruebe la dirección opuesta—**convert pdf to html** y luego vuelva a PDF—para validar la fidelidad del proceso de ida y vuelta. + +¡Siéntase libre de experimentar con las opciones y comparta sus hallazgos en los comentarios o en los foros de Aspose! ¡Feliz codificació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 ayudarle a dominar funciones adicionales de la API y explorar enfoques de implementación alternativos en sus propios proyectos. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/spanish/net/digital-signatures/_index.md index ff2ccf3a48..6164fb28c1 100644 --- a/pdf/spanish/net/digital-signatures/_index.md +++ b/pdf/spanish/net/digital-signatures/_index.md @@ -64,6 +64,9 @@ Aprenda a cargar un PDF en C#, convertirlo a PDF/X‑4 y listar sus firmas digit ### [Validar firma PDF con Aspose – Convertir PDF a HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Aprenda a validar firmas PDF y convertir documentos a HTML usando Aspose.PDF para .NET. +### [Cómo validar PDF con Aspose.PDF – comprobar la validez de la firma PDF en C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Aprenda a validar la firma de un PDF usando Aspose.PDF en C# con una guía paso a paso. + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/spanish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..3ec2e8bcf4 --- /dev/null +++ b/pdf/spanish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Cómo validar PDF usando Aspose.PDF y validar la firma digital del PDF. + Sigue esta guía paso a paso para comprobar la firma del PDF rápidamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: es +lastmod: 2026-08-08 +og_description: Cómo validar PDF usando Aspose.PDF. Aprende a validar la firma digital + de PDF y a comprobar la validez de la firma PDF en unas pocas líneas de código C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Cómo validar PDF – comprobar la validez de la firma PDF con Aspose.PDF en + C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Cómo validar PDF con Aspose.PDF – comprobar la validez de la firma PDF en C# +url: /es/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo validar PDF con Aspose.PDF – comprobar la validez de la firma PDF en C# + +Si necesitas **cómo validar PDF** que contengan firmas digitales, este tutorial te muestra una solución completa. Aprenderás a cargar un PDF, crear un validador de certificados y comprobar la validez de la firma PDF con Aspose.PDF para .NET. + +Validar una firma digital en un PDF es un requisito frecuente para cumplimiento, facturación e intercambio seguro de documentos. Al final de esta guía podrás verificar con confianza si un PDF firmado es fiable, y entenderás cómo manejar casos típicos como certificados ausentes o firmas múltiples. + +## Requisitos previos + +Antes de comenzar, asegúrate de tener: + +- .NET 6.0 o posterior instalado +- Un IDE como Visual Studio 2022 (cualquier editor que soporte C# funciona) +- Una copia con licencia de **Aspose.PDF for .NET** (la versión de prueba gratuita sirve para evaluación) +- Un archivo PDF firmado (`signed.pdf`) y, si la firma depende de una CA privada, el certificado de confianza correspondiente (`trustedCertificate.pfx`) + +No se requieren paquetes NuGet adicionales más allá de `Aspose.PDF`. + +## Paso 1: Instalar Aspose.PDF + +Abre una terminal en la carpeta de tu proyecto y ejecuta: + +```bash +dotnet add package Aspose.PDF +``` + +El comando agrega la última biblioteca Aspose.PDF, que contiene las clases `Document` y `CertificateValidator` que se usarán más adelante. + +## Paso 2: Cargar el documento PDF + +Cargar un PDF es la primera operación que realizas cuando **cómo cargar pdf** de forma programática. El constructor `Document` acepta una ruta de archivo, un stream o un arreglo de bytes. Usar una ruta completa mantiene el ejemplo claro. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Por qué es importante:** El objeto `Document` representa todo el archivo PDF en memoria. Sin cargar el archivo, no puedes acceder a su colección `Signatures`, que es necesaria para **comprobar la firma pdf**. + +## Paso 3: Preparar el validador de certificados + +Una firma digital es de confianza solo si el certificado de firma encadena a una raíz que tú confíes. `CertificateValidator` te permite apuntar Aspose.PDF a un almacén de certificados de confianza o a un archivo PFX específico. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Si tu PDF usa una CA pública que Windows ya confía, puedes omitir `certPath` e instanciar `CertificateValidator` con su constructor predeterminado. Proveer un PFX personalizado es útil para entornos PKI internos. + +## Paso 4: Validar la primera firma digital + +Un PDF puede contener múltiples firmas. Para simplificar, este tutorial valida la primera firma (`Signatures[0]`). El método `Validate` devuelve `true` cuando la firma está criptográficamente intacta **y** el certificado de firma es de confianza. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Qué ocurre internamente:** +- El método verifica el hash del contenido firmado contra el valor de la firma. +- Construye la cadena de certificados usando el validador proporcionado. +- Se evalúa el estado de revocación (CRL/OCSP) si el validador está configurado para ello. + +### Manejo de firmas múltiples + +Si tu PDF contiene más de una firma, itera sobre la colección `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Este patrón te permite **comprobar la firma pdf** en cada página y reportar resultados individuales. + +## Paso 5: Mostrar el resultado de la validación + +Finalmente, escribe el resultado en la consola. En código de producción probablemente registrarías el resultado o lanzarías una excepción para una firma inválida. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Salida esperada en la consola + +``` +Valid +``` + +o + +``` +Invalid +``` + +El mensaje refleja el valor booleano devuelto por `Validate`. Un resultado “Invalid” puede indicar un documento manipulado, un certificado no confiable o un certificado de firma expirado. + +## Paso 6: Trampas comunes y consejos de buenas prácticas + +### 1. Certificado de confianza ausente +Si recibes `Invalid` y sabes que la firma debería ser confiable, verifica que el certificado raíz correcto se haya suministrado a `CertificateValidator`. Usa la sobrecarga que acepta una `X509Certificate2Collection` para múltiples raíces. + +### 2. Firma con referencias externas +Algunas firmas cubren contenido externo (p. ej., un archivo adjunto). Asegúrate de que los recursos externos sean accesibles; de lo contrario, la verificación del hash fallará. + +### 3. Validación de sello de tiempo +Una firma puede incluir un token de sello de tiempo. Para validarlo, configura el validador para comprobar los certificados de la autoridad de sello de tiempo (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Rendimiento con PDFs grandes +Cargar un PDF de cientos de páginas puede consumir mucha memoria. Si solo necesitas los datos de la firma, usa `PdfFileEditor` para extraer el diccionario de firmas sin renderizar páginas. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Seguridad en hilos +Las instancias de `Document` no son seguras para acceso concurrente. Crea un nuevo `Document` por hilo cuando estés validando muchos PDFs en paralelo. + +## Ejemplo completo y ejecutable + +A continuación tienes el programa completo que puedes copiar, pegar y ejecutar después de actualizar las rutas de archivo. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Ejecutar el programa** muestra una línea por cada firma, indicando claramente si el PDF pasa la comprobación de **validar firma digital pdf**. + +## Conclusión + +Ahora sabes **cómo validar PDF** que contienen firmas digitales usando Aspose.PDF para .NET. El tutorial cubrió la carga de un PDF, la configuración de un validador de certificados, la comprobación de la validez de la firma pdf, el manejo de firmas múltiples y la solución de problemas comunes. + +A continuación, explora temas relacionados como **cómo firmar PDF**, **cómo agregar tokens de sello de tiempo** y **cómo extraer contenido firmado**. Estas extensiones te permiten construir un flujo de trabajo de documentos seguros de extremo a extremo en C#. + +--- + + +## ¿Qué deberías aprender después? + + +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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/spanish/net/document-conversion/_index.md index 3fee8c790e..67f44907b3 100644 --- a/pdf/spanish/net/document-conversion/_index.md +++ b/pdf/spanish/net/document-conversion/_index.md @@ -57,6 +57,7 @@ Aprenderá a especificar la configuración de conversión, extraer texto e imág | [Ruta de la imagen de XML a PDF](./xml-to-pdfset-image-path/) Aprenda a convertir XML a PDF fácilmente con Aspose.PDF para .NET. Esta guía detallada le guiará paso a paso por el proceso, desde la configuración hasta la finalización. | [XPS a PDF](./xps-to-pdf/) Aprenda a convertir archivos XPS a PDF con Aspose.PDF para .NET con este tutorial paso a paso. Ideal para desarrolladores y aficionados a la documentación. | [Convertir PDF a PDF/X‑4 en C# – Tutorial paso a paso ASP.NET PDF](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Aprenda a convertir PDF a PDF/X‑4 con Aspose.PDF para .NET en este tutorial paso a paso. | +| [Tutorial de conversión pdfx4 – establecer estándar PDF y convertir PDF con Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Aprenda a establecer el estándar PDF/X‑4 y convertir PDFs usando Aspose.PDF para .NET. | | [pdf a png tutorial – Convertir páginas PDF a PNG en C#](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Aprenda a convertir páginas PDF a PNG usando Aspose.PDF para .NET con esta guía paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/spanish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..1c04de94f9 --- /dev/null +++ b/pdf/spanish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: Tutorial de conversión pdfx4 que muestra cómo establecer el estándar + PDF a PDF/X‑4 y convertir PDF con Aspose para una conversión de formato confiable. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: es +lastmod: 2026-08-08 +og_description: El tutorial de conversión pdfx4 explica cómo establecer el estándar + PDF a PDF/X‑4 y realizar una conversión fiable de PDF usando Aspose en C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Tutorial de conversión pdfx4 – establecer el estándar PDF y convertir PDF + usando Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Tutorial de conversión pdfx4 – establecer el estándar PDF y convertir PDF usando + Aspose +url: /es/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial de conversión pdfx4 – establecer estándar PDF y convertir PDF usando Aspose + +Si necesitas un **tutorial de conversión pdfx4**, esta guía te lleva paso a paso por el proceso completo de establecer el estándar PDF a PDF/X‑4 y convertir un PDF usando Aspose. Ya sea que estés preparando archivos listos para impresión o asegurando el cumplimiento de archivado a largo plazo, aprenderás un flujo de trabajo fiable de **aspose pdf format conversion** que funciona con .NET 6 y versiones posteriores. + +El tutorial cubre todo, desde la configuración del proyecto hasta el manejo de casos límite como archivos de origen ausentes o funciones no compatibles. Al final del artículo tendrás un programa C# autónomo que produce un archivo compatible con PDF/X‑4 listo para flujos de trabajo posteriores. + +## Requisitos previos + +Antes de comenzar, asegúrate de tener: + +- .NET 6 SDK o una versión más reciente instalada ([download here](https://dotnet.microsoft.com/download)) +- Una licencia válida de Aspose.PDF for .NET (la versión de prueba gratuita sirve para pruebas) +- Visual Studio 2022, VS Code o cualquier IDE que soporte desarrollo .NET +- Un archivo PDF de origen que quieras convertir (colócalo en una carpeta conocida) + +Estos requisitos garantizan que el código se ejecute sin configuraciones adicionales. + +## Paso 1: Crear un nuevo proyecto de consola .NET + +Abre una terminal y ejecuta los siguientes comandos para generar una aplicación de consola llamada `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Agrega el paquete NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +El paquete `Aspose.Pdf` proporciona la clase `Document` y `PdfFormatConversionOptions` necesarios para operaciones de **convert pdf pdfx4**. + +## Paso 2: Escribir el código de conversión + +Abre `Program.cs` (o `Program.cs` si usas las nuevas declaraciones de nivel superior) y reemplaza su contenido con el ejemplo completo a continuación. El código muestra cómo **set pdf standard** a PDF/X‑4, realiza la conversión e incluye manejo de errores para los problemas más comunes. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Por qué cada parte es importante + +- **Validación de argumentos** evita que el programa se bloquee cuando el usuario olvida la ruta del archivo. +- **Carga de `Document`** lanza una excepción clara si el PDF de origen falta o está corrupto, lo cual es esencial para una experiencia robusta de **convert pdf using aspose**. +- **`PdfFormatConversionOptions`** es donde **set pdf standard**. Al asignar `PdfStandard.PdfX4`, Aspose ajusta automáticamente los espacios de color, incrusta las fuentes requeridas y escribe los metadatos PDF/X‑4 necesarios. +- **`FontEmbeddingMode.EmbedAll`** garantiza que cada fuente usada en el PDF de origen se incruste, un requisito frecuente para PDFs listos para impresión. +- **`doc.Convert`** realiza la **aspose pdf format conversion** real. El método escribe el nuevo archivo en una sola llamada, simplificando el flujo de trabajo. + +## Paso 3: Ejecutar el conversor + +Compila el proyecto y ejecútalo con las rutas de origen y destino: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Si todo funciona, la consola mostrará: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Ahora puedes abrir `output_pdfx4.pdf` en cualquier visor de PDF que soporte PDF/X‑4 (p. ej., Adobe Acrobat Pro) y verificar el cumplimiento mediante *Archivo → Propiedades → Estándares*. + +## Paso 4: Verificar el cumplimiento PDF/X‑4 (opcional) + +Para pipelines de producción puede que quieras validar programáticamente la salida. Aspose ofrece la clase `PdfComplianceChecker` (disponible en el paquete `Aspose.Pdf`) que puede usarse de la siguiente manera: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Ejecutar este fragmento después de la conversión te brinda un resultado explícito de aprobado/reprobado, útil para pipelines automatizados de CI/CD. + +## Paso 5: Problemas comunes y consejos de buenas prácticas + +| Problema | Por qué ocurre | Cómo evitarlo | +|----------|----------------|---------------| +| Falta de fuentes en el PDF de origen | Las fuentes están referenciadas pero no incrustadas, provocando advertencias de conversión | Usa `FontEmbeddingMode.EmbedAll` como se muestra arriba | +| El PDF de origen contiene objetos transparentes no permitidos en PDF/X‑4 | PDF/X‑4 prohíbe ciertas combinaciones de transparencia | Pre‑procesa el PDF con `doc.ProcessTransparentObjects()` antes de la conversión | +| Archivos grandes provocan OutOfMemoryException | El documento completo se carga en memoria | Transmite el origen usando `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licencia no aplicada | La versión de prueba añade marcas de agua | Llama `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` antes de usar cualquier API de Aspose | + +Aplicar estos consejos asegura una experiencia fluida de **convert pdf pdfx4** en entornos de producción. + +## Paso 6: Extender el tutorial + +Una vez domines el **tutorial de conversión pdfx4** básico, puedes explorar: + +- **Conversión por lotes**: recorrer una carpeta de PDFs y convertir cada uno a PDF/X‑4. +- **Inyección de metadatos**: añadir metadatos XMP requeridos por casas de impresión específicas. +- **Gestión de perfiles de color**: adjuntar perfiles ICC usando `doc.ColorSpace = ColorSpace.DeviceRGB;` antes de la conversión. + +Todas estas extensiones se basan en la misma base de **aspose pdf format conversion** demostrada aquí. + +## Conclusión + +Este **tutorial de conversión pdfx4** te mostró cómo **set pdf standard** a PDF/X‑4, realizar una **convert pdf using Aspose** fiable y verificar el resultado. Ahora dispones de un programa C# completo y ejecutable que puede integrarse en pipelines de procesamiento de documentos más amplios o usarse como una utilidad independiente. Experimenta con procesamiento por lotes, manejo de metadatos o estándares PDF alternativos (PDF/A‑2b, PDF/UA) para profundizar tu dominio de **aspose pdf format conversion**. + +¡Feliz codificación y disfruta de la confianza que brinda una salida compatible con PDF/X‑4! + +## ¿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. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/spanish/net/document-creation/_index.md b/pdf/spanish/net/document-creation/_index.md index 54e7fcf3d3..17f670469d 100644 --- a/pdf/spanish/net/document-creation/_index.md +++ b/pdf/spanish/net/document-creation/_index.md @@ -79,6 +79,9 @@ Aprenda a crear un documento PDF, agregar una página y una forma, y guardarlo u ### [Crear documento PDF con Aspose.PDF – Guía paso a paso](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aprenda a crear documentos PDF mediante Aspose.PDF con una guía paso a paso y ejemplos de código. +### [Crear documento PDF en C# con Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Aprenda a crear un documento PDF básico en C# utilizando Aspose.PDF, con ejemplos de código paso a paso. + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/spanish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..5f484407ab --- /dev/null +++ b/pdf/spanish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Crear documento PDF en C# usando Aspose.Pdf. Aprende cómo agregar una + página en blanco al PDF, añadir un párrafo al PDF y posicionar texto en el PDF con + coordenadas precisas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: es +lastmod: 2026-08-08 +og_description: Crea documentos PDF en C# rápidamente. Este tutorial muestra cómo + añadir una página en blanco al PDF, agregar un párrafo al PDF y posicionar texto + en el PDF usando Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Crear documento PDF en C# con Aspose.Pdf – guía completa +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Crear documento PDF en C# con Aspose.Pdf +url: /es/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear documento pdf en C# con Aspose.Pdf + +Si necesitas **crear documento pdf** programáticamente, esta guía te muestra exactamente cómo. Usando Aspose.Pdf para .NET puedes agregar una página pdf en blanco, insertar un párrafo en pdf y posicionar texto en pdf con precisión de píxel, todo en unas pocas líneas de código C#. + +Terminarás el tutorial con un archivo PDF totalmente funcional que contiene una nota colocada en las coordenadas que especificas. Sin herramientas externas, sin edición manual—solo código limpio y repetible que puedes insertar en cualquier proyecto .NET. + +## Lo que aprenderás + +* Cómo **crear documento pdf** con Aspose.Pdf. +* La forma correcta de **agregar página pdf en blanco** y por qué una página debe existir antes de añadir contenido. +* Cómo **agregar párrafo a pdf** y adjuntar una etiqueta personalizada (útil para extracción o estilo posteriores). +* La técnica para **posicionar texto en pdf** usando la clase `Position`. +* Cómo guardar el resultado en disco y verificar la salida. + +**Requisitos previos** + +* .NET 6.0 o posterior (el código también funciona con .NET Framework 4.7+). +* Una licencia válida de Aspose.Pdf para .NET o una clave de evaluación gratuita. +* Un IDE como Visual Studio 2022 o VS Code con la extensión C#. + +> **Consejo profesional:** Si utilizas una evaluación gratuita, el PDF generado contendrá una pequeña marca de agua. Registra una licencia para eliminarla. + +## Cómo crear documento pdf con Aspose.Pdf + +El primer paso es instanciar la clase `Document`. Este objeto representa todo el archivo PDF y te da acceso a páginas, recursos y opciones de guardado. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Crear el documento **no** escribe nada en disco todavía; solo prepara una representación en memoria que puedes manipular. Este enfoque mantiene la API rápida y eficiente en memoria. + +## Agregar página pdf en blanco usando Aspose.Pdf + +Un PDF debe contener al menos una página antes de que puedas colocar cualquier contenido. Agregar una página en blanco es una única llamada a método: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +El método `Add()` crea una página con tamaño predeterminado (A4) y orientación (vertical). Si necesitas un tamaño diferente, pasa una instancia de `PageSize` a `Add()`. + +## Agregar párrafo a pdf y establecer una nota + +Ahora que la página existe, puedes crear un objeto `Paragraph` que contiene el texto visible. El párrafo también puede llevar una etiqueta personalizada, lo cual es práctico cuando luego necesitas localizar o estilizar el elemento programáticamente. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### ¿Por qué usar una etiqueta? + +Las etiquetas son metadatos que viajan con el elemento PDF. Pueden consultarse más tarde con `Document.FindObject()` o ser usadas por procesadores PDF posteriores que dependen de etiquetas para accesibilidad o indexación. + +## Posicionar texto en pdf con coordenadas precisas + +La ubicación predeterminada de un párrafo es la esquina superior‑izquierda del margen de la página. Para mover el texto a una ubicación exacta, establece la propiedad `Position` en la etiqueta del párrafo: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Las coordenadas se miden en puntos (1 punto = 1/72 pulgada). El origen (0,0) está en la esquina inferior‑izquierda de la página, lo que coincide con la mayoría de los motores de renderizado PDF. Ajusta los valores `X` y `Y` para adaptarlos a tus necesidades de diseño. + +Después de posicionar, agrega el párrafo a la colección de la página: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Guardar el documento pdf + +Finalmente, escribe el PDF en memoria a un archivo. Puedes especificar la ruta de salida, el formato e incluso opciones de cifrado. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Cuando el programa termina, `output.pdf` contiene una sola página con el texto **Important note** colocado cerca de la esquina superior‑derecha (X = 50, Y = 750). Abre el archivo en cualquier visor PDF para verificar la ubicación. + +![Documento PDF generado con C# Aspose.Pdf mostrando nota posicionada](https://example.com/images/generated-pdf.png) + +*Texto alternativo de la imagen: Documento PDF generado con C# Aspose.Pdf mostrando nota posicionada* (incluye la palabra clave principal). + +## Ejemplo completo y ejecutable + +Uniendo todas las piezas, aquí tienes una aplicación de consola completa que puedes copiar, compilar y ejecutar: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Salida esperada** al ejecutar el programa: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Abrir `output.pdf` muestra una sola página con el texto **Important note** posicionado en las coordenadas que especificaste. + +## Variaciones comunes y casos límite + +| Escenario | Qué cambiar | Por qué es importante | +|----------|-------------|-----------------------| +| **Tamaño de página diferente** | `pdfDocument.Pages.Add(PageSize.A5)` | Páginas más pequeñas reducen el tamaño del archivo y se adaptan a pantallas móviles. | +| **Múltiples notas** | Recorrer una colección de cadenas y crear un `Paragraph` para cada una, incrementando la coordenada `Y`. | Permite la generación por lotes de notas estilo viñetas. | +| **Caracteres Unicode** | Asegúrate de que el archivo fuente se guarde como UTF‑8 y establece `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf soporta Unicode de forma nativa, pero la codificación del archivo debe coincidir. | +| **PDF protegido con contraseña** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Añade seguridad para notas confidenciales. | +| **Salida de alta resolución** | Establece `pdfDocument.PageInfo.Width` y `Height` a valores mayores antes de agregar contenido. | Útil para imprimir PDFs de gran formato. | + +## Consejos para uso en producción + +* **Reutiliza la instancia `Document`** al generar muchos PDFs en una sola solicitud para reducir la presión del GC. +* **Descarta objetos** (`pdfDocument.Dispose()`) si creas muchos documentos en un bucle. +* **Valida las coordenadas**: el valor `Y` no puede exceder la altura de la página; de lo contrario el texto se recortará. +* **Usa `TextFragmentAbsorber`** para extraer luego la nota por su etiqueta (`/P`) si necesitas leer el contenido. + +## Conclusión + +Ahora sabes cómo **crear documento pdf** con Aspose.Pdf, **agregar página pdf en blanco**, **agregar párrafo a pdf**, **cómo agregar nota pdf**, y **posicionar texto en pdf** con precisión. El ejemplo completo demuestra un flujo de trabajo limpio y repetible que puedes ampliar para facturas, informes o cualquier escenario de automatización de documentos. + +A continuación, explora temas relacionados como **agregar imágenes a pdf**, **construir tablas con Aspose.Pdf**, o **aplicar firmas digitales**. Cada uno de estos se basa en los mismos conceptos centrales cubiertos aquí, por lo que estarás listo para abordar tareas de generación de PDF más sofisticadas. + +¡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. + +- [Crear documento PDF con Aspose.PDF – Agregar página, forma y guardar](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Cómo agregar una página vacía al final de un PDF usando Aspose.PDF para .NET | Guía paso a paso](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Cómo agregar 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/images-graphics/_index.md b/pdf/spanish/net/images-graphics/_index.md index 53b1e6fe86..73e4278401 100644 --- a/pdf/spanish/net/images-graphics/_index.md +++ b/pdf/spanish/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Aprenda a crear archivos PDF accesibles, etiquetados e incrustados con imágenes ### [Cómo crear rectángulos transparentes en archivos PDF con Aspose.PDF para .NET](./create-transparent-rectangles-aspose-pdf-dotnet/) Aprenda a mejorar sus documentos PDF creando rectángulos con transparencia alfa con Aspose.PDF para .NET. Siga esta guía paso a paso. +### [Cómo establecer la opacidad de PDF en C# con Aspose.PDF – guía completa](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Aprenda a ajustar la opacidad de elementos en archivos PDF usando Aspose.PDF para .NET con C#. + ### [Cómo eliminar imágenes de archivos PDF con Aspose.PDF para .NET: guía completa](./delete-images-aspose-pdf-net/) Aprenda a eliminar imágenes de archivos PDF de forma eficiente con Aspose.PDF para .NET. Esta guía abarca la configuración, ejemplos de código y prácticas recomendadas. diff --git a/pdf/spanish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/spanish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..d76b7e147b --- /dev/null +++ b/pdf/spanish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Establece la opacidad del PDF en C# usando Aspose.PDF – aprende a ajustar + la transparencia de trazo y relleno con unas pocas líneas de código. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: es +lastmod: 2026-08-08 +og_description: Establece la opacidad de PDF en C# rápidamente. Esta guía te muestra + cómo modificar la transparencia de trazo y relleno usando la API de estado gráfico + de Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Establecer la opacidad del PDF en C# con Aspose.PDF – tutorial paso a paso +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Establecer la opacidad del PDF en C# con Aspose.PDF – guía completa +url: /es/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Establecer la opacidad de PDF en C# con Aspose.PDF – guía completa + +Si necesitas **establecer la opacidad de PDF** para operaciones de dibujo específicas, este tutorial te muestra exactamente cómo hacerlo con Aspose.PDF para .NET. Ya sea que estés creando marcas de agua, superposiciones semitransparentes o gráficos personalizados, aprenderás un enfoque conciso y listo para producción. + +En las siguientes secciones cubriremos todo, desde cargar un PDF hasta editar su estado gráfico, agregar una nueva definición de opacidad y guardar el resultado. No se requiere documentación externa, solo el código a continuación y una breve explicación de cada paso. + +## 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+) +* Una licencia válida de Aspose.PDF para .NET (la prueba gratuita sirve para evaluación) +* Un archivo PDF de entrada (`input.pdf`) ubicado en una carpeta con permisos de lectura/escritura +* Visual Studio 2022 o cualquier IDE de C# que prefieras + +## Paso 1 – Cargar el documento PDF (Aspose.PDF para .NET) + +La primera tarea es abrir el PDF existente. Aspose.PDF representa un archivo PDF con la clase `Document`, que te brinda acceso total a páginas, recursos y objetos de bajo nivel. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Por qué es importante*: Cargar el documento crea un modelo en memoria que puedes modificar de forma segura. La instrucción `using` garantiza que el manejador del archivo se libere automáticamente después de que terminemos. + +## Paso 2 – Obtener la primera página que deseas editar + +La opacidad se define por página a través del diccionario de recursos de la página. Aquí apuntamos a la primera página, pero puedes iterar sobre `doc.Pages` para una operación por lotes. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Por qué es importante*: Cada página tiene su propia colección `Resources`, que almacena estados gráficos, fuentes, imágenes, etc. Modificar la página correcta asegura que el efecto de opacidad aparezca donde lo esperas. + +## Paso 3 – Abrir el diccionario de recursos de la página para editar + +Aspose.PDF proporciona un asistente `DictionaryEditor` para manipular diccionarios PDF de bajo nivel sin romper la estructura del archivo. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Por qué es importante*: Editar directamente los diccionarios COS (Content Object System) del PDF es la única forma de inyectar un estado gráfico personalizado. El editor abstrae la sintaxis de bajo nivel mientras mantiene el PDF válido. + +## Paso 4 – Recuperar el diccionario ExtGState existente + +El diccionario **ExtGState** (estado gráfico externo) contiene opacidad, modo de fusión, ancho de línea, etc. Si no existe, Aspose.PDF lo crea automáticamente cuando añades una nueva entrada. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Por qué es importante*: Sin una entrada `ExtGState` no puedes referenciar una opacidad personalizada más adelante en el flujo de contenido de la página. Este paso garantiza que el contenedor esté presente. + +## Paso 5 – Crear un nuevo estado gráfico con la opacidad deseada + +Un estado gráfico es una colección de parámetros. Para la opacidad establecemos `CA` (opacidad de trazo) y `ca` (opacidad de relleno). También definimos un modo de fusión (`BM`) para controlar cómo los píxeles transparentes interactúan con el contenido subyacente. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Por qué es importante*: `CA` y `ca` aceptan valores de 0 (completamente transparente) a 1 (totalmente opaco). Ajusta estos números para lograr el efecto visual que necesitas. El modo de fusión `"Normal"` es el más común, pero puedes experimentar con `"Multiply"` o `"Screen"` para efectos artísticos. + +## Paso 6 – Registrar el nuevo estado gráfico en la colección ExtGState + +Cada estado gráfico debe tener un nombre único (p. ej., `GS0`). Añadimos nuestro diccionario a la colección `ExtGState` y luego actualizamos los recursos de la página. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Por qué es importante*: Al nombrar el estado (`GS0`), puedes referenciarlo más adelante en el flujo de contenido de la página usando el operador `gs`. Si necesitas varios niveles de opacidad, crea entradas adicionales (`GS1`, `GS2`, …). + +## Paso 7 – Aplicar el estado gráfico a los comandos de dibujo (opcional) + +Si deseas aplicar la opacidad inmediatamente al contenido existente, debes editar el flujo de contenido de la página. A continuación se muestra un ejemplo sencillo que dibuja un rectángulo semitransparente usando el estado recién creado. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Por qué es importante*: El operador `gs` (`SetGraphicsState`) indica al renderizador PDF que use los valores de opacidad definidos en `GS0` para cualquier comando de dibujo posterior. El par `grestore`/`gsave` garantiza que otros elementos de la página permanezcan sin cambios. + +## Paso 8 – Guardar el PDF modificado + +Finalmente, escribe el documento actualizado en disco. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Por qué es importante*: Guardar finaliza todos los cambios, incrusta el nuevo estado gráfico y produce un PDF que cualquier visor (Adobe Acrobat, Chrome, etc.) puede mostrar con la transparencia prevista. + +### Resultado esperado + +Abre `output.pdf` en un visor de PDF. Deberías ver un rectángulo rojo cuyo contorno es 80 % opaco y cuyo relleno es 40 % opaco, mezclándose suavemente con cualquier contenido de fondo. El resto de la página permanece sin cambios. + +## Variaciones comunes y casos límite + +| Situación | Qué cambiar | Razón | +|-----------|-------------|-------| +| **Múltiples niveles de opacidad** | Crear estados gráficos adicionales (`GS1`, `GS2`, …) con diferentes valores `CA`/`ca` y referenciarlos donde sea necesario | Permite un control fino sobre diferentes elementos | +| **Modos de fusión diferentes** | Usar `"Multiply"`, `"Screen"`, `"Overlay"` etc., en lugar de `"Normal"` en la entrada `BM` | Produce efectos artísticos de fusión | +| **Aplicar a un flujo de contenido existente** | Insertar `SetGraphicsState` antes de los operadores de dibujo específicos que deseas afectar | Evita opacidad no deseada en objetos no relacionados | +| **PDFs grandes** | Procesar páginas en un bucle `foreach (Page p in doc.Pages)` para evitar cargar todo el archivo en memoria de una vez | Mejora el rendimiento y reduce la presión de memoria | +| **Sin ExtGState existente** | El código del Paso 4 ya crea uno si falta, por lo que no se requiere manejo adicional | Garantiza que el diccionario esté presente | + +### Consejo profesional + +Cuando añadas muchos estados gráficos personalizados, mantén una nomenclatura coherente (`GS0`, `GS1`, …) y documenta el propósito de cada uno en un bloque de comentarios. Esto facilita el mantenimiento futuro, especialmente en proyectos colaborativos. + +## Ejemplo completo y ejecutable + +A continuación tienes el programa completo que puedes copiar, pegar y ejecutar. Incluye todos los pasos, directivas `using` necesarias y comentarios. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Ejecuta el programa, + +## ¿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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..4bf7e53d77 100644 --- a/pdf/spanish/net/programming-with-forms/_index.md +++ b/pdf/spanish/net/programming-with-forms/_index.md @@ -34,16 +34,16 @@ Estos tutoriales también ofrecen ejemplos de código detallados, explicaciones | [Fuente del campo de formulario 14](./form-field-font-14/) Aprenda a cambiar la fuente de los campos de formulario en un documento PDF con Aspose.PDF para .NET. Guía paso a paso con ejemplos de código y consejos para optimizar los formularios PDF. | [Obtener las coordenadas del campo del formulario PDF](./get-coordinates/) ¡Desbloquea la manipulación de PDF con Aspose.PDF para .NET! Aprende a recuperar las coordenadas de los campos de formulario en tan solo unos sencillos pasos. | [Obtener campos de la región en un archivo PDF](./get-fields-from-region/) Aprenda a extraer campos de una región específica en archivos PDF sin esfuerzo usando Aspose.PDF para .NET en esta guía completa. | -| [Obtener valor de un campo en un documento PDF](./get-value-from-field/) | Aprenda a extraer fácilmente valores de los campos de formulario en un documento PDF usando Aspose.PDF para .NET con este tutorial paso a paso. -| [Obtener valores de todos los campos en un documento PDF](./get-values-from-all-fields/) | Aprenda a extraer valores de todos los campos de un documento PDF usando Aspose.PDF para .NET con una guía paso a paso. | +| [Obtener valor de un campo en un documento PDF](./get-value-from-field/) | Aprenda a extraer fácilmente valores de los campos de formulario en un documento PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | +| [Obtener valores de todos los campos en un documento PDF](./get-values-from-all-fields/) | Aprenda a extraer valores de todos los campos de un documento PDF usando Aspose.PDF para .NET con una guía paso a paso. | | [Obtener XFAProperties](./get-xfaproperties/) Aprenda a recuperar propiedades XFA con Aspose.PDF para .NET en este completo tutorial. Incluye una guía paso a paso. -| [Casillas de verificación agrupadas en un documento PDF](./grouped-check-boxes/) | Aprenda a crear casillas de verificación agrupadas (botones de opción) en un documento PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | -| [Cómo crear PDF con Aspose – Añadir campo de formulario y páginas](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aprenda a crear PDFs, añadir campos de formulario y gestionar páginas con Aspose.PDF para .NET en esta guía paso a paso. | -| [Botones de opción horizontales y verticales](./horizontally-and-vertically-radio-buttons/) Aprenda a crear botones de opción alineados horizontal y verticalmente en PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | +| [Casillas de verificación agrupadas en un documento PDF](./grouped-check-boxes/) | Aprenda a crear casillas de verificación agrupadas (botones de opción) en un documento PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | +| [Cómo crear PDF con Aspose – Añadir campo de formulario y páginas](./how-to-create-pdf-with-aspose-add-form-field-and-pages/) | Aprenda a crear PDFs, añadir campos de formulario y gestionar páginas con Aspose.PDF para .NET en esta guía paso a paso. | +| [Botones de opción horizontales y verticales](./horizontally-and-vertically-radio-buttons/) Aprenda a crear botones de opción alineados horizontal y verticalmente en PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | | [Modificar un campo de formulario en un documento PDF](./modify-form-field/) Aprenda a modificar campos de formulario en documentos PDF con Aspose.PDF para .NET con esta guía paso a paso. Ideal para desarrolladores que buscan optimizar la funcionalidad de PDF. | [Mover campo de formulario](./move-form-field/) Aprenda a mover campos de formulario en documentos PDF con Aspose.PDF para .NET con esta guía. Siga este tutorial detallado para modificar fácilmente la ubicación de los cuadros de texto. -| [Preservar los derechos](./preserve-rights/) | Conserve los derechos de formulario en sus documentos PDF con Aspose.PDF para .NET. | -| [Botón de radio](./radio-button/) | Aprenda a crear botones de opción interactivos en documentos PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | +| [Preservar los derechos](./preserve-rights/) | Conserve los derechos de formulario en sus documentos PDF con Aspose.PDF para .NET. | +| [Botón de radio](./radio-button/) | Aprenda a crear botones de opción interactivos en documentos PDF usando Aspose.PDF para .NET con este tutorial paso a paso. | | [Botón de radio con opciones](./radio-button-with-options/) Desbloquee el potencial de los PDF interactivos añadiendo botones de opción con Aspose.PDF para .NET. Cree formularios atractivos fácilmente y mejore la experiencia del usuario. | [Recuperar campo de formulario en orden de tabulación](./retrieve-form-field-in-tab-order/) Aprenda a recuperar y modificar campos de formulario en orden de tabulación con Aspose.PDF para .NET. Guía paso a paso con ejemplos de código para optimizar la navegación en formularios PDF. | [Seleccionar botón de opción en documento PDF](./select-radio-button/) Aprenda a seleccionar botones de opción en documentos PDF con Aspose.PDF para .NET con esta guía paso a paso. Automatice fácilmente las interacciones de formularios. @@ -51,6 +51,7 @@ Estos tutoriales también ofrecen ejemplos de código detallados, explicaciones | [Establecer Java Script](./set-java-script/) Desbloquea el poder de Aspose.PDF para .NET. Aprende a configurar JavaScript en campos de formulario con nuestra guía paso a paso. | [Establecer título del botón de opción](./set-radio-button-caption/) Aprenda a configurar títulos de botones de opción en archivos PDF con Aspose.PDF para .NET. Esta guía paso a paso le guiará en la carga, modificación y guardado de sus formularios PDF. | [Cuadro de texto](./text-box/) Descubre cómo añadir fácilmente cuadros de texto a archivos PDF con Aspose.PDF para .NET con esta guía paso a paso. Mejora la interacción del usuario. +| [Guardar documento PDF con Aspose.PDF – guía completa](./save-pdf-document-with-aspose-pdf-complete-guide/) | Aprenda a guardar documentos 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/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/spanish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..30233c3c5b --- /dev/null +++ b/pdf/spanish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Guardar documento PDF usando Aspose.PDF, aprender cómo agregar páginas + PDF, rellenar campos de formulario PDF y crear PDF con campos de formulario en un + solo tutorial. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: es +lastmod: 2026-08-08 +og_description: Guarde documentos PDF con Aspose.PDF y descubra cómo agregar páginas + PDF, rellenar campos de formulario PDF y crear PDFs con campos de formulario de + forma rápida y fiable. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Guardar documento PDF con Aspose.PDF – guía paso a paso +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Guardar documento PDF con Aspose.PDF – guía completa +url: /es/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Guardar documento PDF con Aspose.PDF – guía completa + +Si necesita **guardar documento PDF** que contenga campos de formulario interactivos, este tutorial le muestra exactamente cómo. Verá cómo agregar páginas PDF, crear un formulario PDF y rellenar un campo de formulario PDF, todo con Aspose.PDF para .NET. + +En las siguientes secciones aprenderá a: + +* agregar varias páginas a un PDF nuevo, +* crear un campo de formulario de cuadro de texto en la primera página, +* colocar una anotación de widget para el mismo campo en una segunda página, +* establecer el valor del campo (rellenar campo de formulario PDF), +* y finalmente **guardar documento PDF** en disco. + +No se requieren herramientas externas; el código completo y ejecutable está incluido. + +## Prerequisites + +* .NET 6.0 o posterior (el código también funciona con .NET Framework 4.7.2+). +* Una licencia válida de Aspose.PDF para .NET o una clave de evaluación gratuita. +* Visual Studio 2022 (o cualquier IDE de C#). + +Agregue el paquete NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## How to add pages PDF + +El primer paso es crear un PDF vacío y agregar las páginas que necesite. Añadir páginas antes de definir los campos de formulario garantiza que las coordenadas del diseño sean precisas. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Por qué es importante:* Cada objeto `Page` representa un lienzo imprimible. Al agregar páginas al principio, puede referenciarlas más tarde al posicionar los elementos del formulario. + +## How to create PDF form with Aspose.PDF + +Un formulario PDF consta de una **definición de campo** (el contenedor lógico) y una o más **anotaciones de widget** (la representación visual). El ejemplo crea un `TextBoxField` llamado **Comments** en la primera página. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Por qué es importante:* Las coordenadas del `Rectangle` se expresan en puntos (1 pt = 1/72 in). Ajuste los valores para que se adapten a su diseño. + +## Populate PDF form field + +Puede establecer el valor del campo programáticamente antes de que el documento se guarde. Este es el núcleo de **rellenar campo de formulario PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Si necesita completar el campo más tarde (por ejemplo, a partir de la entrada del usuario), simplemente asigne una nueva cadena a `commentsField.Value` antes de llamar a `Save`. + +## Add a widget annotation for the same field on the second page + +Una anotación de widget hace que el campo de formulario sea visible en una página. Al agregar un segundo widget, el mismo campo lógico aparece en ambas páginas, demostrando **crear PDF con campos de formulario** que abarcan varias páginas. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Por qué es importante:* La colección `Widgets` puede contener cualquier número de representaciones visuales. Los usuarios pueden interactuar con el campo en cualquiera de las páginas, y el valor ingresado permanece sincronizado. + +## Attach the field to the first page annotations + +Los campos de formulario deben añadirse a la colección de anotaciones de una página para que el visor PDF pueda renderizarlos. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Save PDF document + +Ahora que el formulario está completamente definido, puede **guardar documento PDF** en la ubicación que elija. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Al abrir `output.pdf` en Adobe Acrobat Reader o cualquier visor de PDF, verá un cuadro de texto en la página 1 y un cuadro coincidente en la página 2. Escribir en cualquiera de los cuadros actualiza el mismo campo subyacente. + +## Complete, runnable example + +A continuación se muestra el programa completo que puede copiar‑pegar en una aplicación de consola. Compila y produce el PDF descrito sin ninguna modificación. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Salida esperada:** Un archivo llamado `output.pdf` que contiene dos páginas. La página 1 muestra un cuadro de texto etiquetado “Comments” en las coordenadas (100, 600). La página 2 muestra el mismo campo en (100, 400). El campo está pre‑llenado con “Enter your feedback here”. Cambiar el texto en cualquiera de las páginas actualiza el mismo valor cuando el documento se guarda nuevamente. + +## Common questions and edge‑case handling + +| Question | Answer | +|----------|--------| +| *¿Puedo agregar más de un widget para el mismo campo?* | Sí. Añada objetos `WidgetAnnotation` adicionales a `commentsField.Widgets`. Cada widget puede colocarse en cualquier página. | +| *¿Qué pasa si necesito establecer la apariencia del campo (fuente, borde, fondo)?* | Use `commentsField.DefaultAppearance` para especificar una fuente y color, y establezca las propiedades `commentsField.Border` para el estilo de línea. | +| *¿Cómo hago que el campo sea de solo lectura?* | Establezca `commentsField.ReadOnly = true;`. El campo seguirá mostrando su valor pero no podrá ser editado por el usuario. | +| *¿Es posible rellenar el campo después de que se haya creado el PDF?* | Sí. Cargue el PDF guardado con `new Document("output.pdf")`, localice el campo mediante `pdfDocument.Form["Comments"]`, asigne un nuevo `Value` y llame a `Save` nuevamente. | +| *¿Qué pasa si el PDF debe cumplir con PDF/A para archivado?* | Después de construir el documento, llame a `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` antes de guardarlo. | + +## Tips from the field + +* **Consejo profesional:** Mantenga el nombre lógico del campo corto y único; es el identificador que usará al rellenar el formulario programáticamente más adelante. +* **Cuidado con:** Rectángulos de widget superpuestos. Las superposiciones pueden causar artefactos de renderizado en algunos visores. +* **Nota de rendimiento:** Añadir muchas páginas o widgets en un bucle estrecho puede optimizarse reutilizando una única instancia de `Rectangle` y cambiando solo sus coordenadas. + +## Conclusion + +Ahora sabe cómo **guardar documento PDF** que contiene un formulario totalmente funcional, cómo **rellenar campo de formulario PDF**, y cómo **agregar páginas PDF** y **crear PDF con campos de formulario** usando Aspose.PDF para .NET. El ejemplo completo demuestra el flujo de trabajo de extremo a extremo, desde la creación del documento hasta el guardado final. + +A continuación, explore temas relacionados como **agregar casillas de verificación**, **crear listas desplegables**, o **aplanar el formulario** para distribución de solo lectura. Cada uno de ellos se basa en los mismos principios cubiertos aquí y amplía sus capacidades de automatización de PDF. + +¡Feliz codificación! + +## 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 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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/spanish/net/programming-with-pdf-pages/_index.md index 8ad69cf0a7..86b18c6b3c 100644 --- a/pdf/spanish/net/programming-with-pdf-pages/_index.md +++ b/pdf/spanish/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Los tutoriales incluyen instrucciones paso a paso, ejemplos de código detallado | [Actualizar las dimensiones de la página PDF](./update-dimensions/) | Descubra cómo actualizar las dimensiones de páginas PDF sin esfuerzo con Aspose.PDF para .NET en esta guía completa paso a paso. | | [Acercar el contenido de la página en un archivo PDF](./zoom-to-page-contents/) Aprenda a ampliar el contenido de las páginas de archivos PDF con Aspose.PDF para .NET en esta guía completa. Mejore sus documentos PDF según sus necesidades. | [Agregar números de página a PDF con C# – Guía completa paso a paso](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Aprenda a numerar páginas en un PDF con C# y Aspose.PDF para .NET mediante esta guía paso a paso. | +| [Agregar numeración Bates a PDF con Aspose – guía paso a paso](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Aprenda a aplicar numeración Bates a documentos 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/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/spanish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..603f4405bd --- /dev/null +++ b/pdf/spanish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Agregar numeración Bates a PDF usando Aspose.Pdf en C#. Este tutorial + también muestra cómo agregar una página en blanco al PDF y generar PDF programáticamente. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: es +lastmod: 2026-08-08 +og_description: Agregar numeración Bates a PDF con Aspose.Pdf en C#. Aprende a añadir + una página en blanco al PDF, generar PDF programáticamente y guardar el documento + final en minutos. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Agregar numeración Bates a PDF con Aspose – guía completa de C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Agregar numeración Bates a PDF con Aspose – guía paso a paso +url: /es/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Añadir numeración Bates a PDF con Aspose – guía paso a paso + +Añadir numeración Bates a PDF con Aspose.Pdf es sencillo una vez que entiendes los pasos fundamentales. Si también necesitas añadir una página en blanco al PDF o generar PDF programáticamente, esta guía cubre todo lo que necesitas. + +En este tutorial tú: + +* Crear un nuevo documento PDF desde cero. +* Añadir una página en blanco al PDF que alojará los números Bates. +* Configurar el artefacto de numeración Bates con un prefijo personalizado. +* Guardar el PDF para que los números aparezcan en el archivo generado. + +Al final tendrás una aplicación de consola C# totalmente funcional que produce un PDF que contiene números Bates como **CASE‑1000**, **CASE‑1001**, … – un requisito común para flujos de trabajo legales y de e‑discovery. + +## Requisitos previos + +* .NET 6.0 SDK o posterior (el código también funciona con .NET Framework 4.8). +* Visual Studio 2022 o cualquier IDE compatible con C#. +* Una licencia válida de Aspose.Pdf para .NET (o una clave de evaluación gratuita). +* Familiaridad básica con la sintaxis de C#. + +> **Consejo profesional:** Si ejecutas el código sin una licencia, Aspose añadirá una pequeña marca de agua al PDF de salida. + +## Paso 1: Configurar el proyecto e importar Aspose.Pdf + +Crear un nuevo proyecto de consola y añadir el paquete NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Las directivas `using` requeridas para el ejemplo son: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Estos espacios de nombres te dan acceso a las clases `Document`, `Page` y `BatesNumberingArtifact` que se usarán más adelante. + +## Paso 2: Añadir una página en blanco al PDF + +Un número Bates debe estar adjunto a una página, así que primero creamos una página en blanco que recibirá el artefacto de numeración. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +La clase `Document` representa todo el archivo PDF, mientras que `Pages.Add()` inserta una nueva página vacía al final de la colección de páginas del documento. Como el documento comienza vacío, esta llamada también crea la primera página. + +## Paso 3: Configurar el artefacto de numeración Bates + +Ahora definimos cómo deben verse los números Bates. El `BatesNumberingArtifact` te permite establecer el número inicial, prefijo, sufijo y opciones de formato. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Por qué esto es importante:** +Establecer `StartNumber` a **1000** coincide con las convenciones típicas de archivos de casos legales. El `Prefix` asegura que cada número aparezca como **CASE‑1000**, **CASE‑1001**, … lo que facilita la búsqueda y el ordenamiento. + +## Paso 4: Adjuntar el artefacto a la página + +El artefacto debe añadirse a la colección `Artifacts` de la página para que Aspose lo renderice en cada página durante el guardado. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Cuando el documento se guarda, Aspose repite automáticamente el artefacto en todas las páginas, incrementando el número para cada página subsiguiente. + +## Paso 5: (Opcional) Añadir páginas adicionales + +Si necesitas más páginas, simplemente repite `pdfDocument.Pages.Add()`. El artefacto de numeración Bates que adjuntaste en el paso anterior aparecerá automáticamente en cada nueva página. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Paso 6: Guardar el PDF – generar PDF programáticamente + +Finalmente, persiste el documento en disco. Este es el punto en el que los números Bates se renderizan sobre las páginas. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Resultado esperado:** +Abre *BatesNumberedDocument.pdf* y verás un PDF de tres páginas. Cada página muestra un número Bates en la esquina inferior derecha: + +* Página 1 → **CASE‑1000** +* Página 2 → **CASE‑1001** +* Página 3 → **CASE‑1002** + +Los números se incrementan automáticamente porque el artefacto está adjunto a la colección de páginas. + +## Ejemplo completo y ejecutable + +Juntando todo, aquí tienes un programa de consola completo que puedes copiar, pegar y ejecutar: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Ejecuta el programa con `dotnet run`. Después de la ejecución, localiza el archivo en tu escritorio y verifica los números Bates. + +![Ejemplo de añadir numeración Bates a PDF](/images/bates-numbering.png "Ejemplo de añadir numeración Bates a PDF") + +## Preguntas comunes y casos límite + +### ¿Qué pasa si necesito una fuente o posición diferente? + +El `BatesNumberingArtifact` expone propiedades como `FontSize`, `FontColor`, `HorizontalAlignment` y `VerticalAlignment`. Por ejemplo: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### ¿Cómo excluyo una página específica de la numeración? + +Crea un `BatesNumberingArtifact` separado para las páginas que deseas numerar y añádelo solo a esas páginas. Las páginas sin un artefacto adjunto permanecerán sin numerar. + +### ¿Esto funciona con PDFs existentes? + +Sí. En lugar de `new Document()`, carga un archivo existente: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Luego adjunta el artefacto a las páginas deseadas y guarda. + +## Conclusión + +Ahora sabes cómo **añadir numeración Bates a PDF** usando Aspose.Pdf, cómo **añadir una página en blanco al PDF**, y cómo **generar PDF programáticamente** en una solución C# limpia y reutilizable. El enfoque funciona con cualquier número de páginas, prefijos personalizados y opciones de estilo, dándote control total sobre el documento final. + +Los siguientes pasos que podrías explorar: + +* Usar **create pdf as + +## ¿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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cómo añadir 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 añadir una página vacía al final de un PDF usando Aspose.PDF para .NET \| Guía paso a paso](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Crear documento PDF con Aspose.PDF – Añadir página, forma y guardar](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 64d0f7c1a5..304a8acdb0 100644 --- a/pdf/spanish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/spanish/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ Este tutorial le ofrece una descripción detallada de los métodos y técnicas p | [Firmar con tarjeta inteligente usando el campo de firma](./sign-with-smart-card-using-signature-field/) Aprenda a firmar archivos PDF de forma segura con una tarjeta inteligente con Aspose.PDF para .NET. Siga nuestra guía paso a paso para una implementación sencilla. | [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# con Aspose.PDF – guía completa](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) Aprenda a verificar firmas PDF en C# usando Aspose.PDF, con ejemplos y pasos detallados. +| [Tutorial de firma PDF: validar una firma digital PDF con Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) Aprenda a validar firmas digitales en archivos PDF usando Aspose.PDF para .NET. Guía paso a paso. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/spanish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/spanish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..23b0a8cfe6 --- /dev/null +++ b/pdf/spanish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-08-08 +description: tutorial de firma PDF que muestra cómo validar la firma digital de un + PDF usando opciones de validación de firmas y código C# – guía rápida paso a paso +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: es +lastmod: 2026-08-08 +og_description: El tutorial de firma PDF te guía a través de la validación de una + firma digital PDF con Aspose.PDF. Aprende a configurar las opciones de validación + de firmas y a verificar el resultado. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: tutorial de firma PDF – validar firmas digitales PDF en C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'tutorial de firma PDF: validar una firma digital PDF con Aspose.PDF' +url: /es/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# tutorial de firma PDF – validar una firma digital PDF en C# + +Si necesitas un **pdf signature tutorial** que muestre exactamente cómo validar una firma digital PDF, esta guía te cubre. Verás cómo cargar un PDF firmado, configurar **signature validation options**, ejecutar la validación y mostrar el resultado, todo con código C# claro y ejecutable. + +Validar una firma PDF es esencial cuando procesas contratos, facturas o cualquier documento legalmente vinculante. Este tutorial recorre el flujo de trabajo completo, para que puedas integrar verificaciones de firmas en tus propias aplicaciones sin adivinar qué llamadas a la API son necesarias. + +## Lo que lograrás + +* Cargar un archivo PDF firmado usando Aspose.PDF. +* Configurar **signature validation options** como el algoritmo de hash. +* Llamar al método `Validate` para **validate pdf digital signature**. +* Mostrar un mensaje claro “Signature valid” en la consola. + +**Requisitos previos** + +* .NET 6.0 (o posterior) instalado. +* Visual Studio 2022 (o cualquier IDE de C#). +* Paquete NuGet Aspose.PDF para .NET (`Aspose.Pdf`). + +> **Consejo profesional:** Usa la última versión de Aspose.PDF para obtener soporte para algoritmos SHA‑3 y un rendimiento de validación mejorado. + +## Paso 1: Instalar el paquete NuGet Aspose.PDF + +Abre tu proyecto en Visual Studio y ejecuta el siguiente comando en la Consola del Administrador de paquetes: + +```bash +Install-Package Aspose.Pdf +``` + +El paquete agrega el espacio de nombres `Aspose.Pdf`, que contiene la clase `Document` y las API relacionadas con firmas que usarás. + +## Paso 2: Cargar el documento PDF firmado + +La primera línea de código crea un objeto `Document` que representa el archivo PDF en disco. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Por qué es importante:* La clase `Document` analiza la estructura del PDF, exponiendo la colección `Signatures` que contiene todas las firmas digitales incrustadas. Si la ruta del archivo es incorrecta, se lanza una excepción, así que verifica la ruta antes de ejecutar el programa. + +## Paso 3: Configurar las opciones de validación de firmas + +Puedes personalizar el proceso de validación con la clase `SignatureValidationOptions`. En este tutorial especificamos el algoritmo de hash, pero también puedes establecer verificaciones de revocación de certificados, validación de marcas de tiempo y más. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Por qué es importante:* El algoritmo de hash debe coincidir con el usado cuando se creó la firma. Usar un algoritmo que no coincida hace que la validación falle aunque la firma sea correcta en otro aspecto. + +## Paso 4: Validar la primera firma + +La mayoría de los PDFs contienen una única firma, pero la colección `Signatures` puede contener muchas. Este ejemplo valida la primera entrada (`[0]`). El método `Validate` devuelve un Boolean que indica el éxito. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Caso límite:* Si el PDF no tiene firmas, `document.Signatures.Count` será `0` y acceder a `[0]` lanza una `IndexOutOfRangeException`. Protege contra esto con una verificación sencilla: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Paso 5: Mostrar el resultado de la validación + +Finalmente, escribe el resultado en la consola. Este paso muestra el resultado de **check pdf signature** en un formato legible para humanos. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Al ejecutar el programa, deberías ver: + +``` +Signature valid: True +``` + +Si la firma está corrupta, usa un algoritmo no soportado, o el certificado está revocado, la salida será `False`. + +## Ejemplo completo y ejecutable + +Copia el siguiente código en un nuevo proyecto de consola (`dotnet new console`) y reemplaza `YOUR_DIRECTORY/signed.pdf` con la ruta a tu archivo PDF firmado. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Salida esperada + +``` +Signature valid: True +``` + +Si la firma falla la validación, la consola mostrará `Signature valid: False`. + +## Preguntas comunes y solución de problemas + +| Pregunta | Respuesta | +|----------|----------| +| **¿Qué pasa si el PDF usa un algoritmo de hash diferente?** | Cambia `HashAlgorithm` en `SignatureValidationOptions` para que coincida, por ejemplo, `HashAlgorithm.SHA256`. | +| **¿Cómo valido todas las firmas en un PDF con múltiples firmas?** | Recorre `document.Signatures` y llama a `Validate` para cada entrada. | +| **¿Puedo verificar la cadena de confianza del certificado firmante?** | Establece `validationOptions.CheckCertificateRevocation = true` y opcionalmente proporciona un `CertificateStore` personalizado para incluir certificados raíz de confianza. | +| **¿Qué pasa si necesito soportar la validación de marcas de tiempo?** | Habilita `validationOptions.CheckTimestamp = true`. Aspose.PDF verificará entonces el token de marca de tiempo incrustado. | +| **¿Hay una forma de obtener errores de validación detallados?** | Usa `ValidateEx(validationOptions, out ValidationResult result)`; `result` contiene `ErrorMessage` y `ErrorCode` para cada falla. | + +## Próximos pasos + +* Explora **validate pdf signature** para múltiples firmas iterando sobre `document.Signatures`. +* Combina este tutorial con **check pdf signature** en una API web para proporcionar verificación en tiempo real de contratos subidos. +* Profundiza en **signature validation options** como verificaciones CRL/OCSP, validación de marcas de tiempo y almacenes de confianza personalizados. + +Ahora tienes un **pdf signature tutorial** completo que muestra cómo **validate pdf digital signature** usando Aspose.PDF en C#. Siéntete libre de adaptar el código a tu propio flujo de trabajo, añadir registro, o integrarlo en pipelines de procesamiento de documentos más grandes. ¡Feliz codificació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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/spanish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..a09895794a --- /dev/null +++ b/pdf/spanish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-08-08 +description: Verifique la firma PDF en C# usando Aspose.PDF. Aprenda cómo validar + la firma digital de un PDF y enumerar las firmas PDF en solo unas pocas líneas de + código. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: es +lastmod: 2026-08-08 +og_description: Verifique la firma PDF en C# con Aspose.PDF. Esta guía le muestra + cómo validar la firma digital de un PDF, listar las firmas PDF y manejar firmas + comprometidas de manera eficiente. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Verificar la firma PDF en C# – tutorial rápido de Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Verificar la firma PDF en C# con Aspose.PDF – guía completa +url: /es/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verificar firma PDF en C# con Aspose.PDF – guía completa + +Si necesitas **verificar la firma PDF** en una aplicación .NET, esta guía te muestra una forma concisa de hacerlo con Aspose.PDF. Aprenderás a **validar firma digital PDF**, **listar firmas PDF** y detectar firmas comprometidas en solo unas pocas líneas de código. + +El tutorial cubre todo, desde la instalación de la biblioteca hasta el manejo de casos extremos como documentos sin firmar o PDFs encriptados. Al final podrás integrar la verificación de firmas en cualquier proyecto C#, garantizando la autenticidad de los archivos PDF entrantes. + +**Requisitos previos** + +- .NET 6.0 o posterior (el código también funciona con .NET Framework 4.6+). +- Conocimientos básicos de C# y Visual Studio (o cualquier IDE que prefieras). +- Una licencia de Aspose.PDF for .NET (la prueba gratuita sirve para evaluación). + +Si cumples con estos requisitos, estás listo para comenzar a verificar firmas PDF. + +## Verificar firma PDF – configurar el proyecto + +1. **Agregar el paquete NuGet Aspose.PDF** + Abre la consola del Administrador de paquetes y ejecuta: + + ```bash + Install-Package Aspose.PDF + ``` + + Esto incluye el ensamblado `Aspose.Pdf` y sus dependencias. + +2. **Importar los espacios de nombres requeridos** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` te brinda la extensión `Any` que se usa más adelante, mientras que `Aspose.Pdf` contiene las clases `Document` y `Signature`. + +## Cargar el documento PDF + +El primer paso funcional es abrir el PDF que deseas inspeccionar. Aspose.PDF lee el archivo en memoria, permitiéndote consultar sus firmas. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Por qué es importante** – Cargar el documento dentro de un bloque `using` garantiza que el manejador del archivo se libere rápidamente, evitando problemas de bloqueo de archivo en servicios de larga ejecución. + +## Listar firmas PDF + +Antes de validar una firma, quizá quieras saber cuántas firmas están presentes. Este paso demuestra la capacidad de **listar firmas PDF**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explicación** + +- `document.Signatures` devuelve una colección de objetos `Signature`. +- `Count` indica cuántas firmas existen. +- Cada `Signature` expone metadatos como `Id`, `SignatureType` y `Reason`, que pueden ser útiles para los registros de auditoría. + +**Caso extremo** – Si el PDF no tiene firmas, `Count` será `0` y el bucle no se ejecutará. Puedes manejar este escenario de forma elegante: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validar firma digital PDF – detectar firmas comprometidas + +Ahora que puedes enumerar firmas, la tarea principal es **verificar la integridad de la firma PDF**. Aspose.PDF proporciona la propiedad `IsCompromised`, que devuelve `true` cuando el hash criptográfico de la firma ya no coincide con el contenido del documento. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Por qué funciona** + +- `Signature.IsCompromised` realiza una validación criptográfica completa usando la cadena de certificados incrustada. +- El operador LINQ `Any` se detiene en la primera firma comprometida, haciendo la comprobación eficiente incluso para documentos con muchas firmas. + +### Manejar múltiples firmas individualmente + +Si necesitas saber qué firma específica falló, itera en lugar de usar `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Consejo profesional:** Guarda el resultado de la validación junto con `sig.Id` en una base de datos para análisis forense posterior. + +## Mostrar resultados y considerar casos extremos + +A continuación se muestra un programa completo y ejecutable que combina los pasos anteriores. Carga un PDF, lista todas las firmas, las valida y muestra un resultado claro. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Salida esperada (firmas válidas)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Salida esperada (firma comprometida)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Trampas comunes y cómo evitarlas + +| Trampa | Solución | +|--------|----------| +| El PDF está protegido con contraseña. | Pasa la contraseña mediante `document.Encrypt.Decrypt(password)` antes de acceder a `Signatures`. | +| No se ha establecido una licencia de Aspose.PDF. | Usa `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` para evitar marcas de agua de evaluación. | +| PDFs grandes provocan alto consumo de memoria. | Procesa el archivo en modo streaming (`Document.Load(stream)`) en lugar de cargar todo el archivo de una vez. | + +## Conclusión + +Ahora sabes cómo **verificar la firma PDF** en C# usando Aspose.PDF, cómo **validar firma digital PDF** y cómo **listar firmas PDF** para informes o auditorías. El ejemplo completo muestra cómo cargar un documento, enumerar sus firmas, comprobar cada una en busca de compromisos y manejar casos extremos típicos. + +Próximos pasos que podrías explorar: + +- **Validar tokens de marca de tiempo** para asegurar que una firma se creó antes de que el certificado expirara. +- **Extraer certificados del firmante** (`sig.Certificate`) para validaciones personalizadas de almacenes de confianza. +- **Integrar con ASP.NET Core** para rechazar automáticamente PDFs subidos que no pasen la verificación. + +Siéntete libre de experimentar con múltiples firmas, lógica de validación personalizada o bibliotecas PDF alternativas. Si encontraste útil esta guía, compártela con tus compañeros o añade tus propios consejos en los comentarios. + +## ¿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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/spanish/net/text-operations/_index.md index caa8b7c7d9..8dbc85d452 100644 --- a/pdf/spanish/net/text-operations/_index.md +++ b/pdf/spanish/net/text-operations/_index.md @@ -164,6 +164,8 @@ Un tutorial de código para Aspose.PDF Net ### [Aplicar estilo a texto en PDF etiquetados con Aspose.PDF para .NET | Guía para la creación de PDF accesibles y estéticos](./style-text-tagged-pdfs-aspose-pdf-net/) Aprenda a aplicar estilo al texto en documentos PDF etiquetados con Aspose.PDF para .NET. Esta guía abarca la instalación, las técnicas y las aplicaciones prácticas para mejorar la accesibilidad. +### [Cómo resumir PDF con Aspose.Pdf.AI – guía](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## Recursos adicionales - [Documentación de Aspose.PDF para la red](https://docs.aspose.com/pdf/net/) diff --git a/pdf/spanish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/spanish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..7e7bde3cce --- /dev/null +++ b/pdf/spanish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-08-08 +description: Cómo resumir PDF con Aspose.Pdf.AI – aprende a resumir PDF con IA, generar + un resumen de PDF y guardar el resumen como PDF. Código completo y mejores prácticas. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: es +lastmod: 2026-08-08 +og_description: Cómo resumir PDF con Aspose.Pdf.AI. Este tutorial muestra cómo resumir + PDF con IA, generar un resumen de PDF y guardar el resumen como PDF en unas pocas + líneas de C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Cómo resumir PDF con Aspose.Pdf.AI – guía paso a paso +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Cómo resumir PDF con Aspose.Pdf.AI – guía +url: /es/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo resumir PDF con Aspose.Pdf.AI – guía + +Si necesitas **cómo resumir PDF** de forma rápida y fiable, puedes dejar que un modelo de IA haga el trabajo pesado. Este tutorial te muestra exactamente cómo resumir PDF con IA, generar un resumen en PDF y guardar el resumen como PDF usando el SDK Aspose.Pdf.AI para .NET. Obtendrás un ejemplo completo y ejecutable y una explicación de cada línea para que puedas adaptar la solución a tus propios proyectos. + +La guía cubre: + +* Preparar la carpeta de origen y la clave API +* Crear un `OpenAIClient` que se comunique con el modelo +* Configurar opciones de resumen como temperature y la ruta del documento +* Construir un `SummaryCopilot` y obtener el texto del resumen de forma asíncrona +* Guardar el resumen generado de nuevo en un archivo PDF + +No se requieren servicios externos más allá del endpoint de OpenAI, y el código funciona con .NET 6+ y Aspose.Pdf.AI 23.7 (o posterior). + +## Requisitos previos + +* **.NET 6 SDK** (o cualquier versión más reciente de .NET) +* **Aspose.Pdf.AI for .NET** – instalar vía NuGet: `dotnet add package Aspose.Pdf.AI` +* Una **clave API de OpenAI** con acceso al modelo que deseas usar (p. ej., `gpt‑4o`) +* Un archivo PDF que quieras resumir (el ejemplo usa `SampleDocument.pdf`) + +Asegúrate de que la carpeta que especificas en `dataDirectory` exista y de que la aplicación tenga permisos de lectura/escritura. + +## Paso 1: Configurar la estructura del proyecto + +Crea un proyecto de consola (o integra el código en cualquier aplicación .NET existente). El `Program.cs` mínimo se ve así: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Por qué esta estructura es importante + +* **`await using`** libera el `OpenAIClient` automáticamente, liberando conexiones HTTP. +* **`Path.Combine`** crea rutas independientes del SO, evitando errores en Windows vs. Linux. +* **Temperature** controla la creatividad; `0.5` brinda un resumen equilibrado y factual. +* **`GetSummaryAsync`** devuelve texto plano, mientras que `SaveSummaryAsync` crea un PDF adecuado que preserva fuentes y diseño. + +## Paso 2: Entender las opciones de resumen + +La clase `OpenAISummaryCopilotOptions` te permite afinar el proceso de resumen: + +| Opción | Propósito | Valores típicos | +|--------|-----------|-----------------| +| `WithTemperature(double)` | Controla la aleatoriedad. `0.0` = determinista, `1.0` = muy creativo. | `0.3‑0.7` para documentos empresariales | +| `WithDocument(string)` | Ruta al PDF de origen. Debe ser un archivo legible. | Cualquier ruta absoluta o relativa | +| `WithPrompt(string)` *(optional)* | Prompt personalizado para guiar al modelo. | “Summarize the key findings in 150 words.” | + +Si tienes **large PDFs** (más de 10 MB o muchas páginas), considera dividir el documento en fragmentos más pequeños antes del resumen para evitar errores por límite de tokens. El SDK no divide automáticamente; puedes usar `PdfDocument` de `Aspose.Pdf` para extraer páginas y procesarlas una a una. + +## Paso 3: Ejecutar el código y verificar la salida + +1. Coloca `SampleDocument.pdf` dentro de la carpeta `Data` que referiste. +2. Reemplaza `"YOUR_API_KEY"` por tu clave real de OpenAI. +3. Ejecuta `dotnet run`. + +Deberías ver dos secciones en la consola: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Abre `Summary_out.pdf` con cualquier visor de PDF: contendrá el mismo texto del resumen, formateado con una fuente predeterminada. El PDF es totalmente buscable porque el SDK inserta el texto como una página PDF estándar. + +## Paso 4: Variaciones comunes y manejo de casos límite + +### Resumir solo una parte del documento + +Si necesitas **resumir pdf con ia** para un capítulo específico, extrae ese rango primero: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Luego apunta `WithDocument` a `Chapter5.pdf`. + +### Ajustar la longitud del resumen + +Puedes influir en la longitud añadiendo un prompt personalizado: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Manejo de errores de la API + +Fallos de red o límites de cuota generan `Aspose.Pdf.AI.Exceptions.AIException`. Envuelve la llamada en un bloque `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Guardar el resumen en un diseño personalizado + +`SaveSummaryAsync` escribe texto plano. Para dar estilo al PDF (añadir título, encabezado o branding), crea un nuevo `PdfDocument` e inserta el resumen manualmente: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Paso 5: Consejos de rendimiento y mejores prácticas + +* **Reutiliza el `OpenAIClient`** para múltiples resúmenes en el mismo proceso – crear un cliente es barato, pero reutilizar el `HttpClient` subyacente reduce el agotamiento de sockets. +* **Cachea el resumen** si el PDF de origen no cambia; puedes almacenar el texto en una base de datos y omitir la llamada a la API. + +## ¿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 características adicionales de la API y explorar enfoques de implementación alternativos en tus propios proyectos. + +- [Cómo extraer y guardar páginas PDF específicas usando Aspose.PDF para .NET - Guía completa](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Cómo extraer y guardar archivos adjuntos PDF usando Aspose.PDF .NET: Guía completa](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Cómo convertir HTML a PDF con Aspose.PDF .NET: Guía completa](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/conversion-export/_index.md b/pdf/swedish/net/conversion-export/_index.md index 2dc154c3a3..6b258013e9 100644 --- a/pdf/swedish/net/conversion-export/_index.md +++ b/pdf/swedish/net/conversion-export/_index.md @@ -227,6 +227,8 @@ 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/) Lär dig hur du konverterar PDF-dokument till TIFF-bilder med Aspose.PDF för .NET. Bemästra anpassade färgdjup och avancerade bildbehandlingstekniker. +### [Spara PDF som HTML med Aspose.PDF – steg‑för‑steg‑guide](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/swedish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..ec30551208 --- /dev/null +++ b/pdf/swedish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Spara PDF som HTML med Aspose.PDF i C#. Lär dig hur du konverterar PDF + till HTML, hoppar över rasterbilder och hanterar vanliga kantfall. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: sv +lastmod: 2026-08-08 +og_description: Spara PDF som HTML med Aspose.PDF. Denna guide visar hur du konverterar + PDF till HTML, hoppar över rasterbilder och undviker vanliga fallgropar. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Spara PDF som HTML med Aspose.PDF – komplett C#‑handledning +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Spara PDF som HTML med Aspose.PDF – steg‑för‑steg‑guide +url: /sv/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Spara PDF som HTML med Aspose.PDF – steg‑för‑steg guide + +Om du snabbt behöver **spara PDF som HTML**, visar den här handledningen exakt hur du gör det med Aspose.PDF för .NET. Oavsett om du bygger en dokument‑visare webbapp eller exporterar rapporter för SEO‑vänlig indexering, kommer du att se en komplett, körbar lösning som konverterar PDF till HTML samtidigt som du får fin‑granulär kontroll över rasterbilder. + +Förutom huvuduppgiften kommer vi även att gå igenom **aspose pdf html conversion**‑alternativen som låter dig hoppa över rasterbilder, justera CSS‑hantering och hantera stora dokument effektivt. I slutet av den här guiden har du ett självständigt program som du kan lägga in i vilket .NET‑projekt som helst. + +## Förutsättningar + +* .NET 6.0 SDK eller senare (koden fungerar även med .NET Core och .NET Framework) +* Visual Studio 2022 eller någon IDE som stödjer C# +* En Aspose.PDF för .NET‑licens (gratisprovversionen fungerar för utvärdering) +* En PDF‑fil med namnet `report.pdf` placerad i en mapp som du kan referera till från koden + +Inga ytterligare NuGet‑paket krävs utöver `Aspose.Pdf`. + +## Steg 1: Installera Aspose.PDF NuGet‑paketet + +Öppna terminalen i din projektmapp och kör: + +```bash +dotnet add package Aspose.Pdf +``` + +Paketet lägger till `Aspose.Pdf`‑namnrymden, som innehåller `Document`‑klassen och `HtmlSaveOptions`‑typen som används för **convert pdf to html**‑operationer. + +## Steg 2: Skapa ett konsolprojekt och lägg till using‑direktiv + +Skapa en ny konsolapplikation om du inte redan har en: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Öppna sedan `Program.cs` och lägg till de nödvändiga namnrymderna: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Dessa direktiv ger dig åtkomst till kärn‑PDF‑API‑et och HTML‑spara‑alternativen som styr **aspose convert pdf html**‑processen. + +## Steg 3: Läs in PDF‑dokumentet + +Den första operationella raden läser in käll‑PDF‑filen i ett `Aspose.Pdf.Document`‑objekt. Detta objekt representerar hela PDF‑filen i minnet och tillhandahåller metoder för att spara, redigera och extrahera innehåll. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Varför detta är viktigt*: Att läsa in dokumentet en gång gör minnesanvändningen förutsägbar, särskilt för stora PDF‑filer. Om filen inte kan hittas kastar Aspose ett `FileNotFoundException`, så se till att sökvägen är korrekt. + +## Steg 4: Konfigurera HTML‑spara‑alternativ + +`HtmlSaveOptions` låter dig finjustera hur PDF‑filen konverteras. I den här handledningen hoppar vi över rasterbilder för att hålla resultatet lättviktigt, men du kan ändra läget till `EmbedAll` om du behöver dem. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Key points**: + +* `RasterImagesSavingMode.Skip` instruerar Aspose att ignorera bitmap‑bilder (JPEG, PNG) under konverteringen. Detta är idealiskt när käll‑PDF‑filen innehåller skannade sidor som du inte behöver i HTML‑vyn. +* Du kan byta till `EmbedAll` eller `External` om du vill att bilder sparas som separata filer. +* `ResourcesFolder`‑egenskapen blir relevant endast när bilder sparas externt. + +## Steg 5: Spara dokumentet som HTML + +Nu skriver du HTML‑filen till disk med de konfigurerade alternativen. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +När detta anrop är klart innehåller `report.html` den textuella innehållet, vektorgrafik och layout som bevarats från den ursprungliga PDF‑filen, men utan rasterbilder. Du kan öppna filen i en webbläsare för att verifiera resultatet. + +## Förväntat resultat + +När du öppnar `report.html` i Chrome eller Edge bör du se: + +* Alla rubriker, stycken och vektorgrafik renderas korrekt. +* Inga ``‑taggar för rasterbilder (de utelämnas på grund av `Skip`‑läget). +* Ren, minimal CSS antingen inline eller i en separat stilfil, beroende på vilket alternativ du valde. + +Om du behöver bekräfta att bilder har utelämnats, inspektera sidkällan (`Ctrl+U`). Du kommer inte att hitta några ``‑poster. + +## Steg 6: Hantera vanliga kantfall + +### 6.1 Stora PDF‑filer (> 100 MB) + +För mycket stora filer, aktivera streaming för att minska minnesbelastningen: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming skriver HTML‑delar direkt till disk, vilket förhindrar att hela dokumentet hålls i minnet. + +### 6.2 Lösenordsskyddade PDF‑filer + +Om käll‑PDF‑filen är krypterad, ange lösenordet innan du sparar: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Att försöka spara utan att dekryptera kastar ett `InvalidPasswordException`. + +### 6.3 Unicode‑tecken + +Aspose.PDF bäddar automatiskt in Unicode‑typsnitt, men du kan tvinga ett specifikt typsnitt för konsekvent rendering: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Anpassad filnamngivning för flera sidor + +Om du vill ha varje PDF‑sida som en separat HTML‑fil, ange: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Detta skapar `report_page_1.html`, `report_page_2.html` osv., vilket kan vara användbart för paginering i webbapplikationer. + +## Fullt, körbart exempel + +Nedan är det kompletta programmet som inkluderar alla stegen som diskuterats. Kopiera det till `Program.cs`, justera sökvägarna och kör `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Verifiering**: Efter körning skriver konsolen ut ett lyckat meddelande. Öppna den genererade HTML‑filen i en webbläsare för att bekräfta att text och vektorgrafik visas korrekt och att rasterbilder har utelämnats. + +## Pro‑tips och fallgropar + +* **Pro‑tips**: Om du senare behöver rasterbilderna, ändra `RasterImagesSavingMode` till `External` och ange `ResourcesFolder`. Detta skapar en `images`‑undermapp med de extraherade bitmaps. +* **Se upp för**: Att använda standard‑`Skip`‑läget på PDF‑filer som starkt förlitar sig på skannade bilder kommer att skapa tomma områden där bilderna skulle vara. Testa alltid med ett representativt urval av dina dokument. +* **Prestandatips**: Återanvändning av en enda `HtmlSaveOptions`‑instans för flera dokument minskar objekt‑skapande overhead i batch‑konverteringar. +* **Versionskontroll**: API‑et som visas fungerar med Aspose.PDF för .NET version 23.9 och senare. Tidigare versioner kan använda `HtmlSaveOptions.RasterImagesSavingMode` med ett något annorlunda enum‑namn. + +## Slutsats + +Du vet nu hur du **sparar PDF som HTML** med Aspose.PDF, hur du styr hanteringen av rasterbilder och hur du hanterar vanliga utmaningar som stora filer, lösenordsskydd och per‑sida HTML‑utdata. Denna kompletta lösning låter dig integrera PDF‑till‑HTML‑konvertering i vilken C#‑applikation som helst med förtroende. + +### Vad blir nästa steg? + +* Utforska **aspose pdf html conversion** för att bädda in typsnitt och anpassa CSS. +* Kombinera denna konvertering med ett webb‑API för att leverera HTML på begäran. +* Prova motsatt riktning—**convert pdf to html** och sedan tillbaka till PDF—för att validera rundresan‑fidelity. + +Känn dig fri att experimentera med alternativen och dela dina upptäckter i kommentarerna eller på Aspose‑forumet. 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. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/swedish/net/digital-signatures/_index.md index 777d04f05e..d6df4afa69 100644 --- a/pdf/swedish/net/digital-signatures/_index.md +++ b/pdf/swedish/net/digital-signatures/_index.md @@ -59,6 +59,8 @@ Lär dig hur du laddar en PDF, konverterar den till PDF/X‑4 och listar befintl ### [Validera PDF-signatur med Aspose – Konvertera PDF till HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Lär dig hur du validerar PDF-signaturer och konverterar PDF till HTML med Aspose.PDF för .NET. +### [Hur man validerar PDF med Aspose.PDF – kontrollera PDF-signaturens giltighet i C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/swedish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..1290f3c60d --- /dev/null +++ b/pdf/swedish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,267 @@ +--- +category: general +date: 2026-08-08 +description: Hur man validerar PDF med Aspose.PDF och validerar PDF:s digitala signatur. + Följ den här steg‑för‑steg‑guiden för att snabbt kontrollera PDF‑signaturen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: sv +lastmod: 2026-08-08 +og_description: Hur man validerar PDF med Aspose.PDF. Lär dig att validera digitala + PDF‑signaturer och kontrollera PDF‑signaturens giltighet med några rader C#‑kod. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Hur man validerar PDF – kontrollera PDF‑signaturens giltighet med Aspose.PDF + i C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Hur man validerar PDF med Aspose.PDF – kontrollera PDF‑signaturens giltighet + i C# +url: /sv/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man validerar PDF med Aspose.PDF – kontrollera pdf‑signaturens giltighet i C# + +Om du behöver **hur man validerar PDF** filer som innehåller digitala signaturer, visar den här handledningen en komplett lösning. Du kommer att lära dig att ladda en PDF, skapa en certifikatvalidator och kontrollera pdf‑signaturens giltighet med Aspose.PDF för .NET. + +Att validera en PDF‑digital signatur är ett vanligt krav för efterlevnad, fakturering och säker dokumentutbyte. I slutet av den här guiden kan du med förtroende verifiera om en signerad PDF är pålitlig, och du kommer att förstå hur du hanterar typiska kantfall såsom saknade certifikat eller flera signaturer. + +## Förutsättningar + +Innan du börjar, se till att du har: + +- .NET 6.0 eller senare installerat +- En IDE såsom Visual Studio 2022 (valfri editor som stödjer C# fungerar) +- En licensierad kopia av **Aspose.PDF for .NET** (gratis provversion fungerar för utvärdering) +- En signerad PDF‑fil (`signed.pdf`) och, om signaturen förlitar sig på en privat CA, motsvarande betrodda certifikat (`trustedCertificate.pfx`) + +Inga ytterligare NuGet‑paket krävs utöver `Aspose.PDF`. + +## Steg 1: Installera Aspose.PDF + +Öppna en terminal i din projektmapp och kör: + +```bash +dotnet add package Aspose.PDF +``` + +Kommandot lägger till det senaste Aspose.PDF‑biblioteket, som innehåller klasserna `Document` och `CertificateValidator` som används senare. + +## Steg 2: Ladda PDF‑dokumentet + +Att ladda en PDF är den första operationen du utför när du **hur man laddar pdf** programatiskt. `Document`‑konstruktorn accepterar en filsökväg, en ström eller en byte‑array. Att använda en fullständig sökväg gör exemplet tydligt. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Varför detta är viktigt:** `Document`‑objektet representerar hela PDF‑filen i minnet. Utan att ladda filen kan du inte komma åt dess `Signatures`‑samling, vilket krävs för att **kontrollera pdf‑signatur** data. + +## Steg 3: Förbered certifikatvalidatorn + +En digital signatur är betrodd endast om signeringscertifikatet kedjar till en rot som du litar på. `CertificateValidator` låter dig peka Aspose.PDF mot en betrodd certifikatbutik eller en specifik PFX‑fil. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Om din PDF använder en publik CA som Windows redan litar på, kan du utelämna `certPath` och instansiera `CertificateValidator` med dess standardkonstruktor. Att tillhandahålla en anpassad PFX är användbart för interna PKI‑miljöer. + +## Steg 4: Validera den första digitala signaturen + +En PDF kan innehålla flera signaturer. För enkelhetens skull validerar den här handledningen den första signaturen (`Signatures[0]`). `Validate`‑metoden returnerar `true` när signaturen är kryptografiskt intakt **och** signeringscertifikatet är betrott. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Vad som händer under huven:** +- Metoden kontrollerar hashvärdet för det signerade innehållet mot signaturvärdet. +- Den bygger certifikatkedjan med den angivna validatorn. +- Revokeringsstatus (CRL/OCSP) utvärderas om validatorn är konfigurerad för det. + +### Hantera flera signaturer + +Om din PDF innehåller mer än en signatur, iterera över `Signatures`‑samlingen: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Detta mönster låter dig **kontrollera pdf‑signatur** på varje sida och rapportera individuella resultat. + +## Steg 5: Skriv ut valideringsresultatet + +Till sist, skriv resultatet till konsolen. I produktionskod skulle du troligen logga resultatet eller kasta ett undantag för en ogiltig signatur. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Förväntad konsolutskrift + +``` +Valid +``` + +eller + +``` +Invalid +``` + +Meddelandet speglar det booleska värde som returneras av `Validate`. Ett “Invalid”‑resultat kan indikera ett manipulerat dokument, ett icke‑betrott certifikat eller ett utgånget signeringscertifikat. + +## Steg 6: Vanliga fallgropar och bästa praxis‑tips + +### 1. Saknat betrott certifikat +Om du får `Invalid` och du vet att signaturen bör vara betrodd, verifiera att rätt rot‑certifikat har levererats till `CertificateValidator`. Använd överlagringen som accepterar en `X509Certificate2Collection` för flera rötter. + +### 2. Signatur med externa referenser +Vissa signaturer täcker externt innehåll (t.ex. en bifogad fil). Säkerställ att de externa resurserna är åtkomliga; annars misslyckas hash‑verifieringen. + +### 3. Tidsstämpelvalidering +En signatur kan innehålla en tidsstämpel‑token. För att validera den, konfigurera validatorn att kontrollera tidsstämpel‑auktoritetens (TSA) certifikat: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Prestanda med stora PDF‑filer +Att ladda en PDF med flera hundra sidor kan förbruka mycket minne. Om du bara behöver signaturdata, använd `PdfFileEditor` för att extrahera signatur‑dictionaryn utan att rendera sidor. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Trådsäkerhet +`Document`‑instanser är inte trådsäkra. Skapa ett nytt `Document` per tråd när du validerar många PDF‑filer parallellt. + +## Fullt, körbart exempel + +Nedan är det kompletta programmet som du kan kopiera, klistra in och köra efter att du uppdaterat filsökvägarna. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Att köra programmet** skriver ut en rad för varje signatur, tydligt indikerande om PDF‑filen klarar **validera pdf‑digital signatur**‑kontrollen. + +## Slutsats + +Du vet nu **hur man validerar PDF**‑filer som innehåller digitala signaturer med Aspose.PDF för .NET. Handledningen täckte hur man laddar en PDF, konfigurerar en certifikatvalidator, kontrollerar pdf‑signaturens giltighet, hanterar flera signaturer och felsöker vanliga problem. + +Nästa steg är att utforska relaterade ämnen såsom **hur man signerar PDF**, **hur man lägger till tidsstämpel‑token** och **hur man extraherar signerat innehåll**. Dessa tillägg låter dig bygga ett komplett end‑to‑end‑säkert dokumentflöde i C#. + +--- + + +## 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 man verifierar PDF – validera PDF‑signatur med Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Hur man extraherar PDF‑signaturinformation med Aspose.PDF .NET: En steg‑för‑steg‑guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Hur man tar bort PDF‑digitala signaturer med Aspose.PDF .NET | Komplett guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/swedish/net/document-conversion/_index.md index e202e024c1..f8da47a21e 100644 --- a/pdf/swedish/net/document-conversion/_index.md +++ b/pdf/swedish/net/document-conversion/_index.md @@ -58,7 +58,7 @@ Du lär dig hur du anger konverteringsinställningar, extraherar text och bilder | [XML till PDF](./xml-to-pdf/) | Lär dig hur du konverterar XML till PDF med Aspose.PDF för .NET i den här omfattande steg-för-steg-handledningen, komplett med kodexempel och detaljerade förklaringar. | | [XML till PDFSet-bildsökväg](./xml-to-pdfset-image-path/) | Lär dig hur du enkelt konverterar XML till PDF med Aspose.PDF för .NET. Den här detaljerade guiden guidar dig genom processen steg för steg, från installation till slutförande. | | [XPS till PDF](./xps-to-pdf/) Lär dig hur du konverterar XPS-filer till PDF med Aspose.PDF för .NET med den här steg-för-steg-handledningen. Perfekt för utvecklare och dokumententusiaster. | - +| [pdfx4 konverteringshandledning – ange PDF-standard och konvertera PDF med Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Lär dig hur du ställer in PDF-standard och konverterar PDF-filer till PDF/X‑4 med Aspose.PDF för .NET. | {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/pdf/swedish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/swedish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..66ad38583a --- /dev/null +++ b/pdf/swedish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,228 @@ +--- +category: general +date: 2026-08-08 +description: pdfx4‑konverteringshandledning som visar hur man ställer in PDF‑standarden + till PDF/X‑4 och konverterar PDF med Aspose för pålitlig formatkonvertering. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: sv +lastmod: 2026-08-08 +og_description: pdfx4‑konverteringshandledning förklarar hur man ställer in PDF‑standarden + till PDF/X‑4 och utför en pålitlig PDF‑konvertering med Aspose i C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4-konverteringshandledning – ställ in PDF-standard och konvertera PDF + med Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4-konverteringshandledning – ange PDF-standard och konvertera PDF med Aspose +url: /sv/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4-konverteringshandledning – ställ in PDF-standard och konvertera PDF med Aspose + +Om du behöver en **pdfx4 conversion tutorial**, guidar den här handledningen dig genom hela processen att ställa in PDF-standarden till PDF/X‑4 och konvertera en PDF med Aspose. Oavsett om du förbereder utskriftsklara filer eller säkerställer långsiktig arkiveringskompatibilitet, kommer du att lära dig ett pålitligt **aspose pdf format conversion** arbetsflöde som fungerar med .NET 6 och senare. + +Handledningen täcker allt från projektuppsättning till hantering av kantfall såsom saknade källfiler eller funktioner som inte stöds. I slutet av artikeln har du ett fristående C#-program som producerar en PDF/X‑4‑kompatibel fil klar för efterföljande arbetsflöden. + +## Förutsättningar + +Innan du börjar, se till att du har: + +- .NET 6 SDK eller nyare installerat ([download here](https://dotnet.microsoft.com/download)) +- En giltig Aspose.PDF för .NET-licens (gratis provversion fungerar för testning) +- Visual Studio 2022, VS Code eller någon IDE som stödjer .NET‑utveckling +- En käll‑PDF‑fil som du vill konvertera (placera den i en känd mapp) + +Dessa krav säkerställer att koden körs utan ytterligare konfiguration. + +## Steg 1: Skapa ett nytt .NET‑konsolprojekt + +Öppna en terminal och kör följande kommandon för att skapa ett konsolprogram med namnet `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Lägg till Aspose.PDF NuGet‑paketet: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf`‑paketet tillhandahåller `Document`‑klassen och `PdfFormatConversionOptions` som behövs för **convert pdf pdfx4**‑operationer. + +## Steg 2: Skriv konverteringskoden + +Öppna `Program.cs` (eller `Program.cs` om du använder de nya top‑level‑satserna) och ersätt innehållet med hela exemplet nedan. Koden demonstrerar **set pdf standard** till PDF/X‑4, utför konverteringen och inkluderar felhantering för vanliga fallgropar. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Varför varje del är viktig + +- **Argumentvalidering** förhindrar att programmet kraschar när användaren glömmer en filsökväg. +- **`Document`‑laddning** kastar ett tydligt undantag om käll‑PDF‑filen saknas eller är korrupt, vilket är avgörande för en robust **convert pdf using aspose**‑upplevelse. +- **`PdfFormatConversionOptions`** är där du **set pdf standard**. Genom att tilldela `PdfStandard.PdfX4` justerar Aspose automatiskt färgrymder, bäddar in nödvändiga typsnitt och skriver den nödvändiga PDF/X‑4‑metadata. +- **`FontEmbeddingMode.EmbedAll`** säkerställer att alla typsnitt som används i käll‑PDF‑filen bäddas in, ett vanligt krav för utskriftsklara PDF‑filer. +- **`doc.Convert`** utför den faktiska **aspose pdf format conversion**. Metoden skriver den nya filen i ett anrop, vilket förenklar arbetsflödet. + +## Steg 3: Kör konverteraren + +Bygg projektet och kör det med käll‑ och destinationssökvägarna: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Om allt fungerar skriver konsolen ut: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Du kan nu öppna `output_pdfx4.pdf` i någon PDF‑visare som stödjer PDF/X‑4 (t.ex. Adobe Acrobat Pro) och verifiera efterlevnad via *File → Properties → Standards*. + +## Steg 4: Verifiera PDF/X‑4‑kompatibilitet (valfritt) + +För produktionspipeline kan du vilja validera resultatet programatiskt. Aspose tillhandahåller en `PdfComplianceChecker`‑klass (tillgänglig i `Aspose.Pdf`‑paketet) som kan användas på följande sätt: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Att köra detta kodsnutt efter konverteringen ger ett explicit godkännande/underkännande‑resultat, vilket är användbart för automatiserade CI/CD‑pipeline. + +## Steg 5: Vanliga fallgropar och bästa praxis‑tips + +| Problem | Varför det händer | Hur man undviker det | +|---------|-------------------|----------------------| +| Saknade typsnitt i käll‑PDF‑filen | Typsnitten refereras men är inte inbäddade, vilket ger konverteringsvarningar | Använd `FontEmbeddingMode.EmbedAll` som visat ovan | +| Käll‑PDF‑filen innehåller transparenta objekt som inte tillåts i PDF/X‑4 | PDF/X‑4 förbjuder vissa transparensblandningar | Förprocessa PDF‑filen med `doc.ProcessTransparentObjects()` före konvertering | +| Stora filer orsakar OutOfMemoryException | Hela dokumentet laddas in i minnet | Strömma källan med `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Licens ej tillämpad | Prova‑versionen lägger till vattenstämplar | Anropa `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` före någon Aspose‑API‑användning | + +Att tillämpa dessa tips säkerställer en smidig **convert pdf pdfx4**‑upplevelse i produktionsmiljöer. + +## Steg 6: Utöka handledningen + +När du behärskar den grundläggande **pdfx4 conversion tutorial**, kan du utforska: + +- **Batch‑konvertering**: loopa igenom en mapp med PDF‑filer och konvertera varje till PDF/X‑4. +- **Metadata‑injektion**: lägg till XMP‑metadata som krävs av specifika tryckerier. +- **Färghanteringsprofil**: bifoga ICC‑profiler med `doc.ColorSpace = ColorSpace.DeviceRGB;` före konvertering. + +Alla dessa utökningar bygger på samma **aspose pdf format conversion**‑grund som demonstrerats här. + +## Slutsats + +Denna **pdfx4 conversion tutorial** visade dig hur du **set pdf standard** till PDF/X‑4, utför en pålitlig **convert pdf using Aspose**, och verifierar resultatet. Du har nu ett komplett, körbart C#‑program som kan integreras i större dokument‑behandlingspipeline eller användas som ett fristående verktyg. Experimentera med batch‑behandling, metadata‑hantering eller alternativa PDF‑standarder (PDF/A‑2b, PDF/UA) för att fördjupa din expertis inom **aspose pdf format conversion**. + +Lycka till med kodningen, och njut av den trygghet som följer med PDF/X‑4‑kompatibelt resultat! + +## 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 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. + +- [Konvertera PDF/A till standard‑PDF med Aspose.PDF .NET : En omfattande guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [Hur man sätter ett utgångsdatum på PDF‑filer med Aspose.PDF för .NET (C#‑handledning)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Omfattande guide: Konvertera PDF till TIFF med Aspose.PDF .NET för sömlös dokumentkonvertering](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/swedish/net/document-creation/_index.md b/pdf/swedish/net/document-creation/_index.md index 49b5a0e985..d08f08d3ad 100644 --- a/pdf/swedish/net/document-creation/_index.md +++ b/pdf/swedish/net/document-creation/_index.md @@ -76,9 +76,13 @@ En kodhandledning för Aspose.PDF Net ### [Skapa PDF-dokument med Aspose.PDF – Lägg till sida, form och spara](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) Lär dig hur du skapar ett PDF-dokument, lägger till en sida och former samt sparar det med Aspose.PDF för .NET. + ### [Skapa PDF-dokument med Aspose.PDF – Steg‑för‑steg‑guide](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Lär dig hur du skapar PDF-dokument med Aspose.PDF i en steg‑för‑steg‑guide. +### [Skapa PDF-dokument i C# med Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +Lär dig hur du skapar PDF-dokument i C# med Aspose.PDF för .NET. + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/swedish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..71530ed513 --- /dev/null +++ b/pdf/swedish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: Skapa PDF-dokument i C# med Aspose.Pdf. Lär dig hur du lägger till en + tom PDF-sida, lägger till ett stycke i PDF och placerar text i PDF med exakta koordinater. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: sv +lastmod: 2026-08-08 +og_description: Skapa PDF-dokument i C# snabbt. Denna handledning visar hur du lägger + till en tom PDF-sida, lägger till ett stycke i PDF och placerar text i PDF med Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Skapa PDF-dokument i C# med Aspose.Pdf – komplett guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Skapa PDF-dokument i C# med Aspose.Pdf +url: /sv/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa pdf-dokument i C# med Aspose.Pdf + +Om du behöver **skapa pdf-dokument** programatiskt visar den här guiden exakt hur. Med Aspose.Pdf för .NET kan du lägga till en tom pdf-sida, infoga ett stycke i pdf och placera text i pdf med pixel‑perfekt noggrannhet — allt i några rader C#-kod. + +Du avslutar tutorialen med en fullt fungerande PDF-fil som innehåller en anteckning placerad på de koordinater du anger. Inga externa verktyg, ingen manuell redigering — bara ren, repeterbar kod som du kan lägga in i vilket .NET‑projekt som helst. + +## Vad du kommer att lära dig + +* Hur du **skapar pdf-dokument** med Aspose.Pdf. +* Det korrekta sättet att **lägga till tom pdf-sida** och varför en sida måste finnas innan du lägger till innehåll. +* Hur du **lägger till stycke i pdf** och bifogar en anpassad tagg (användbart för senare extrahering eller styling). +* Tekniken för att **positionera text i pdf** med hjälp av `Position`-klassen. +* Hur du sparar resultatet till disk och verifierar utskriften. + +**Förutsättningar** + +* .NET 6.0 eller senare (koden fungerar också med .NET Framework 4.7+). +* En giltig Aspose.Pdf för .NET-licens eller en gratis utvärderingsnyckel. +* En IDE såsom Visual Studio 2022 eller VS Code med C#‑tillägget. + +> **Proffstips:** Om du använder en gratis utvärdering kommer den genererade PDF‑filen att innehålla ett litet vattenmärke. Registrera en licens för att ta bort det. + +## Så skapar du pdf-dokument med Aspose.Pdf + +Det första steget är att instansiera `Document`‑klassen. Detta objekt representerar hela PDF‑filen och ger dig åtkomst till sidor, resurser och sparalternativ. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Att skapa dokumentet **skrivs** inte ännu till disk; det förbereder bara en minnesrepresentation som du kan manipulera. Detta tillvägagångssätt håller API:et snabbt och minnes‑effektivt. + +## Lägg till tom pdf-sida med Aspose.Pdf + +En PDF måste innehålla minst en sida innan du kan placera något innehåll. Att lägga till en tom sida är ett enda metodanrop: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()`‑metoden skapar en sida med standardstorlek (A4) och orientering (stående). Om du behöver en annan storlek, skicka en `PageSize`‑instans till `Add()`. + +## Lägg till stycke i pdf och sätt en anteckning + +Nu när sidan finns kan du skapa ett `Paragraph`‑objekt som innehåller den synliga texten. Stycket kan också bära en anpassad tagg, vilket är praktiskt när du senare behöver hitta eller styla elementet programatiskt. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Varför använda en tagg? + +Taggar är metadata som följer med PDF‑elementet. De kan frågas senare med `Document.FindObject()` eller användas av efterföljande PDF‑processorer som förlitar sig på taggar för tillgänglighet eller indexering. + +## Positionera text i pdf med exakta koordinater + +Standardplaceringen för ett stycke är övre vänstra hörnet av sidmarginalen. För att flytta texten till en exakt plats, sätt `Position`‑egenskapen på styckets tagg: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Koordinater mäts i punkter (1 punkt = 1/72 tum). Ursprungspunkten (0,0) är längst ner till vänster på sidan, vilket matchar de flesta PDF‑renderingsmotorer. Justera `X`‑ och `Y`‑värdena för att passa dina layoutbehov. + +Efter positionering, lägg till stycket i sidans samling: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Spara pdf-dokumentet + +Slutligen, skriv den minnesbaserade PDF‑filen till en fil. Du kan ange utdata‑sökväg, format och även krypteringsalternativ. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +När programmet avslutas innehåller `output.pdf` en enda sida med texten **Important note** placerad nära övre högra hörnet (X = 50, Y = 750). Öppna filen i någon PDF‑visare för att verifiera placeringen. + +![Genererat PDF-dokument skapat med C# Aspose.Pdf som visar placerad anteckning](https://example.com/images/generated-pdf.png) + +*Bildtext: Genererat PDF-dokument skapat med C# Aspose.Pdf som visar placerad anteckning* (inkluderar primärt nyckelord). + +## Fullständigt, körbart exempel + +Genom att sätta ihop alla bitar får du ett komplett konsolprogram som du kan kopiera, bygga och köra: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Förväntad utskrift** när du kör programmet: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Öppning av `output.pdf` visar en enda sida med texten **Important note** placerad på de koordinater du angav. + +## Vanliga variationer och kantfall + +| Scenario | Vad som ska ändras | Varför det är viktigt | +|----------|--------------------|-----------------------| +| **Olika sidstorlek** | `pdfDocument.Pages.Add(PageSize.A5)` | Mindre sidor minskar filstorlek och passar mobila skärmar. | +| **Flera anteckningar** | Loopa över en samling strängar och skapa ett `Paragraph` för varje, öka `Y`‑koordinaten. | Möjliggör batch‑generering av punkt‑stilade anteckningar. | +| **Unicode‑tecken** | Säkerställ att källfilen sparas som UTF-8 och sätt `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf stödjer Unicode direkt, men filkodningen måste matcha. | +| **Lösenordsskyddad PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Lägger till säkerhet för konfidentiella anteckningar. | +| **Högupplöst utskrift** | Sätt `pdfDocument.PageInfo.Width` och `Height` till större värden innan du lägger till innehåll. | Användbart för utskrift av stora PDF‑format. | + +## Tips för produktionsanvändning + +* **Återanvänd `Document`‑instansen** när du genererar många PDF‑filer i en enda begäran för att minska GC‑belastning. +* **Disposera objekt** (`pdfDocument.Dispose()`) om du skapar många dokument i en loop. +* **Validera koordinater**: `Y`‑värdet får inte överstiga sidans höjd; annars klipps texten bort. +* **Använd `TextFragmentAbsorber`** för att senare extrahera anteckningen via dess tagg (`/P`) om du behöver läsa tillbaka innehållet. + +## Slutsats + +Du vet nu hur du **skapar pdf-dokument** med Aspose.Pdf, **lägger till tom pdf-sida**, **lägger till stycke i pdf**, **lägger till anteckning i pdf**, och **positionerar text i pdf** exakt. Det kompletta exemplet visar ett rent, repeterbart arbetsflöde som du kan utöka för fakturor, rapporter eller vilket dokument‑automatiseringsscenario som helst. + +Nästa steg, utforska relaterade ämnen som **lägga till bilder i pdf**, **bygga tabeller med Aspose.Pdf**, eller **tillämpa digitala signaturer**. Var och en av dessa bygger på samma grundkoncept som behandlats här, så du är redo att ta dig an mer avancerade PDF‑genereringsuppgifter. + +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. + +- [Skapa PDF-dokument med Aspose.PDF – Lägg till sida, form & spara](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Hur man lägger till en tom sida i slutet av en PDF med Aspose.PDF för .NET | Steg‑för‑steg‑guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Hur man lägger till en textstämpel i PDF med Aspose.PDF .NET: Omfattande 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/images-graphics/_index.md b/pdf/swedish/net/images-graphics/_index.md index 31f13cf9e9..20c3a6a036 100644 --- a/pdf/swedish/net/images-graphics/_index.md +++ b/pdf/swedish/net/images-graphics/_index.md @@ -104,6 +104,9 @@ Lär dig hur du skapar tillgängliga taggade PDF-filer inbäddade med bilder med ### [Hur man skapar transparenta rektanglar i PDF-filer med Aspose.PDF för .NET](./create-transparent-rectangles-aspose-pdf-dotnet/) Lär dig hur du förbättrar dina PDF-dokument genom att skapa rektanglar med alfatransparens med Aspose.PDF för .NET. Följ den här steg-för-steg-guiden. +### [Ställ in PDF-opacitet i C# med Aspose.PDF – komplett guide](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Lär dig hur du justerar opaciteten för PDF-element i C# med Aspose.PDF, inklusive exempel på genomskinlighet och lagerhantering. + ### [Hur man tar bort bilder från PDF-filer med Aspose.PDF för .NET - Komplett guide](./delete-images-aspose-pdf-net/) Lär dig hur du effektivt tar bort bilder från PDF-filer med Aspose.PDF för .NET. Den här guiden beskriver installation, kodexempel och bästa praxis. diff --git a/pdf/swedish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/swedish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..63beb43a5e --- /dev/null +++ b/pdf/swedish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-08-08 +description: Ställ in PDF‑opacitet i C# med Aspose.PDF – lär dig hur du justerar linjens + och fyllningens transparens med några rader kod. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: sv +lastmod: 2026-08-08 +og_description: Ställ in PDF-opacitet i C# snabbt. Den här guiden visar hur du ändrar + linjens och fyllningens transparens med Aspose.PDF:s grafikstatus‑API. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Ställ in PDF-opacitet i C# med Aspose.PDF – steg‑för‑steg‑handledning +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Ställ in PDF‑opacitet i C# med Aspose.PDF – komplett guide +url: /sv/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ställ in PDF-opacitet i C# med Aspose.PDF – komplett guide + +Om du behöver **ställa in PDF-opacitet** för specifika ritoperationer, visar den här handledningen exakt hur du gör det med Aspose.PDF för .NET. Oavsett om du skapar vattenstämplar, halvtransparenta överlägg eller anpassad grafik, kommer du att lära dig ett koncist, produktionsklart tillvägagångssätt. + +I de följande avsnitten täcker vi allt från att läsa in en PDF till att redigera dess grafikstatus, lägga till en ny opacitetsdefinition och spara resultatet. Ingen extern dokumentation behövs – bara koden nedan och en kort förklaring av varje steg. + +## Förutsättningar + +Innan du börjar, se till att du har: + +* .NET 6.0 eller senare (koden fungerar också med .NET Framework 4.7+) +* En giltig Aspose.PDF för .NET‑licens (gratis provversion fungerar för utvärdering) +* En inmatnings‑PDF‑fil (`input.pdf`) i en mapp du kan läsa/skriva till +* Visual Studio 2022 eller någon annan C#‑IDE du föredrar + +## Steg 1 – Ladda PDF-dokumentet (Aspose.PDF för .NET) + +Den första uppgiften är att öppna den befintliga PDF‑filen. Aspose.PDF representerar en PDF‑fil med klassen `Document`, som ger dig full åtkomst till sidor, resurser och lågnivå‑objekt. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Varför detta är viktigt*: Att ladda dokumentet skapar en modell i minnet som du säkert kan modifiera. `using`‑satsen ser till att filhandtaget frigörs automatiskt när vi är klara. + +## Steg 2 – Hämta den första sidan du vill redigera + +Opacitet definieras per sida via sidans resursdictionary. Här riktar vi in oss på den första sidan, men du kan loopa igenom `doc.Pages` för en batch‑operation. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Varför detta är viktigt*: Varje sida har sin egen `Resources`‑samling, som lagrar grafikstatusar, teckensnitt, bilder osv. Att modifiera rätt sida säkerställer att opacitets‑effekten visas där du förväntar dig. + +## Steg 3 – Öppna sidans resursdictionary för redigering + +Aspose.PDF tillhandahåller en hjälparklass `DictionaryEditor` för att manipulera lågnivå‑PDF‑dictionaryn utan att bryta filstrukturen. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Varför detta är viktigt*: Direkt redigering av PDF‑ens COS‑dictionary (Content Object System) är det enda sättet att injicera en anpassad grafikstatus. Editorn abstraherar den lågnivå‑syntax som krävs samtidigt som PDF‑filen förblir giltig. + +## Steg 4 – Hämta den befintliga ExtGState‑dictionaryn + +**ExtGState**‑dictionaryn (external graphics state) innehåller opacitet, blandningsläge, linjebredd osv. Om den inte finns skapar Aspose.PDF den automatiskt när du lägger till ett nytt element. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Varför detta är viktigt*: Utan ett `ExtGState`‑element kan du inte referera till en anpassad opacitet senare i sidans innehållsström. Detta steg garanterar att behållaren finns. + +## Steg 5 – Skapa en ny grafikstatus med önskad opacitet + +En grafikstatus är en samling parametrar. För opacitet sätter vi `CA` (stroke opacity) och `ca` (fill opacity). Vi sätter också ett blandningsläge (`BM`) för att styra hur transparenta pixlar interagerar med underliggande innehåll. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Varför detta är viktigt*: `CA` och `ca` accepterar värden från 0 (helt transparent) till 1 (helt ogenomskinlig). Justera dessa siffror för att uppnå den visuella effekt du behöver. Blandningsläget `"Normal"` är det vanligaste, men du kan experimentera med `"Multiply"` eller `"Screen"` för konstnärliga effekter. + +## Steg 6 – Registrera den nya grafikstatusen i ExtGState‑samlingen + +Varje grafikstatus måste ha ett unikt namn (t.ex. `GS0`). Vi lägger till vår dictionary i `ExtGState`‑samlingen och uppdaterar sedan sidans resurser. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Varför detta är viktigt*: Genom att namnge statusen (`GS0`) kan du referera till den senare i sidans innehållsström med `gs`‑operatorn. Om du behöver flera opacitetsnivåer, skapa ytterligare poster (`GS1`, `GS2`, …). + +## Steg 7 – Applicera grafikstatusen på ritkommandon (valfritt) + +Om du vill applicera opaciteten omedelbart på befintligt innehåll måste du redigera sidans innehållsström. Nedan är ett enkelt exempel som ritar en halvtransparent rektangel med den nyss skapade statusen. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Varför detta är viktigt*: `gs`‑operatorn (`SetGraphicsState`) talar om för PDF‑renderaren att använda opacitetsvärdena definierade i `GS0` för alla efterföljande ritkommandon. `grestore`/`gsave`‑paret ser till att andra sidobjekt förblir opåverkade. + +## Steg 8 – Spara den modifierade PDF‑filen + +Till sist skriver vi tillbaka det uppdaterade dokumentet till disk. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Varför detta är viktigt*: Spara‑operationen slutför alla ändringar, bäddar in den nya grafikstatusen och producerar en PDF som vilken visare som helst (Adobe Acrobat, Chrome osv.) kan visa med den avsedda transparensen. + +### Förväntat resultat + +Öppna `output.pdf` i en PDF‑visare. Du bör se en röd rektangel vars kontur är 80 % ogenomskinlig och vars fyllning är 40 % ogenomskinlig, med en mjuk blandning mot eventuell bakgrund. Resten av sidan förblir oförändrad. + +## Vanliga variationer och kantfall + +| Situation | Vad som ska ändras | Orsak | +|-----------|--------------------|-------| +| **Flera opacitetsnivåer** | Skapa ytterligare grafikstatusar (`GS1`, `GS2`, …) med olika `CA`/`ca`‑värden och referera till dem där det behövs | Ger fin‑granulär kontroll över olika element | +| **Olika blandningslägen** | Använd `"Multiply"`, `"Screen"`, `"Overlay"` osv. istället för `"Normal"` i `BM`‑posten | Skapar konstnärliga blandningseffekter | +| **Applicera på en befintlig innehållsström** | Infoga `SetGraphicsState` före de specifika ritoperatorerna du vill påverka | Förhindrar oönskad opacitet på orelaterade objekt | +| **Stora PDF‑filer** | Processa sidor i en `foreach (Page p in doc.Pages)`‑loop för att undvika att ladda hela filen i minnet på en gång | Förbättrar prestanda och minskar minnesbelastning | +| **Ingen befintlig ExtGState** | Koden i Steg 4 skapar redan en om den saknas, så ingen extra hantering krävs | Säkerställer att dictionaryn finns | + +### Proffstips + +När du lägger till många anpassade grafikstatusar, håll namngivningen konsekvent (`GS0`, `GS1`, …) och dokumentera syftet med varje i en kommentarsblock. Detta underlättar framtida underhåll, särskilt i samarbetsprojekt. + +## Fullt, körbart exempel + +Nedan är hela programmet som du kan kopiera, klistra in och köra. Det innehåller alla steg, nödvändiga `using`‑direktiv och kommentarer. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Kör programmet, + +## Vad bör du lära dig härnäst? + +De följande handledningarna täcker närliggande ämnen som bygger vidare på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..7c07768fec 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. | +| [Spara PDF-dokument med Aspose.PDF – komplett guide](./save-pdf-document-with-aspose-pdf-complete-guide/) | Lär dig hur du sparar PDF-dokument med Aspose.PDF i en komplett steg-för-steg-guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/swedish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..84571e5f60 --- /dev/null +++ b/pdf/swedish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: Spara PDF-dokument med Aspose.PDF, lär dig hur du lägger till sidor i + en PDF, fyller i PDF-formulärfält och skapar PDF med formulärfält i en enda handledning. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: sv +lastmod: 2026-08-08 +og_description: Spara PDF-dokument med Aspose.PDF och upptäck hur du lägger till sidor + i PDF, fyller i PDF-formulärfält och skapar PDF med formulärfält snabbt och pålitligt. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Spara PDF-dokument med Aspose.PDF – steg‑för‑steg‑guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Spara PDF-dokument med Aspose.PDF – komplett guide +url: /sv/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Spara PDF-dokument med Aspose.PDF – komplett guide + +Om du behöver **spara PDF-dokument** som innehåller interaktiva formulärfält, visar den här handledningen exakt hur du gör. Du kommer att se hur du lägger till PDF‑sidor, skapar ett PDF‑formulär och fyller i ett PDF‑formulärfält — allt med Aspose.PDF för .NET. + +I de följande avsnitten kommer du att lära dig att: + +* lägga till flera sidor i en ny PDF, +* skapa ett textrutefält på den första sidan, +* placera en widget‑annotation för samma fält på en andra sida, +* ange fältets värde (fylla i PDF‑formulärfältet), +* och slutligen **spara PDF-dokument** till disk. + +Inga externa verktyg krävs; den kompletta, körbara koden är inkluderad. + +## Prerequisites + +* .NET 6.0 eller senare (koden fungerar också med .NET Framework 4.7.2+). +* En giltig Aspose.PDF för .NET-licens eller en gratis utvärderingsnyckel. +* Visual Studio 2022 (eller någon C#‑IDE). + +Add the NuGet package: + +```bash +dotnet add package Aspose.PDF +``` + +## Hur man lägger till PDF‑sidor + +Det första steget är att skapa en tom PDF och lägga till de sidor du behöver. Att lägga till sidor innan formulärfält definieras säkerställer att layoutkoordinaterna är korrekta. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Varför detta är viktigt:* Varje `Page`‑objekt representerar en utskrivningsbar canvas. Genom att lägga till sidor tidigt kan du referera till dem senare när du positionerar formulärelement. + +## Hur man skapar PDF‑formulär med Aspose.PDF + +Ett PDF‑formulär består av en **field definition** (den logiska behållaren) och en eller flera **widget annotations** (den visuella representationen). Exemplet skapar ett `TextBoxField` med namnet **Comments** på den första sidan. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Varför detta är viktigt:* `Rectangle`‑koordinaterna uttrycks i punkter (1 pt = 1/72 in). Justera värdena för att passa din design. + +## Fyll i PDF‑formulärfält + +Du kan programatiskt ange fältets värde innan dokumentet sparas. Detta är kärnan i **populate PDF form field**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Om du behöver fylla i fältet senare (t.ex. från användarinmatning), tilldela helt enkelt en ny sträng till `commentsField.Value` innan du anropar `Save`. + +## Lägg till en widget‑annotation för samma fält på den andra sidan + +En widget‑annotation gör formulärfältet synligt på en sida. Genom att lägga till en andra widget visas samma logiska fält på båda sidorna, vilket demonstrerar **create PDF with form fields** som sträcker sig över flera sidor. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Varför detta är viktigt:* `Widgets`‑samlingen kan innehålla ett godtyckligt antal visuella representationer. Användare kan interagera med fältet på vilken sida som helst, och det angivna värdet förblir synkroniserat. + +## Fäst fältet till den första sidans annotationer + +Formulärfält måste läggas till i en sidas annotation‑samling så att PDF‑visaren kan rendera dem. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Spara PDF-dokument + +Nu när formuläret är fullt definierat kan du **save PDF document** till en plats du själv väljer. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +När du öppnar `output.pdf` i Adobe Acrobat Reader eller någon PDF‑visare kommer du att se en textruta på sida 1 och en matchande ruta på sida 2. Att skriva i någon av rutorna uppdaterar samma underliggande fält. + +## Komplett, körbar exempel + +Nedan är hela programmet som du kan kopiera‑och‑klistra in i en konsolapplikation. Det kompileras och producerar den beskrivna PDF‑filen utan några ändringar. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Förväntat resultat:** En fil med namn `output.pdf` som innehåller två sidor. Sida 1 visar en textruta märkt “Comments” på koordinaterna (100, 600). Sida 2 visar samma fält på (100, 400). Fältet är förifyllt med “Enter your feedback here”. Att ändra texten på någon av sidorna uppdaterar samma värde när dokumentet sparas igen. + +## Vanliga frågor och hantering av kantfall + +| Question | Answer | +|----------|--------| +| *Kan jag lägga till mer än en widget för samma fält?* | Ja. Lägg till ytterligare `WidgetAnnotation`‑objekt till `commentsField.Widgets`. Varje widget kan placeras på vilken sida som helst. | +| *Vad händer om jag behöver ange fältets utseende (font, kant, bakgrund)?* | Använd `commentsField.DefaultAppearance` för att specificera en font och färg, och sätt `commentsField.Border`‑egenskaper för linjestil. | +| *Hur gör jag fältet skrivskyddat?* | Sätt `commentsField.ReadOnly = true;`. Fältet visar fortfarande sitt värde men kan inte redigeras av användaren. | +| *Är det möjligt att fylla i fältet efter att PDF:en har skapats?* | Ja. Ladda den sparade PDF‑filen med `new Document("output.pdf")`, hitta fältet via `pdfDocument.Form["Comments"]`, tilldela ett nytt `Value` och anropa `Save` igen. | +| *Vad händer om PDF‑en måste följa PDF/A för arkivering?* | Efter att dokumentet har byggts, anropa `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` innan du sparar. | + +## Tips från fältet + +* **Proffstips:** Håll det logiska fältnamnet kort och unikt; det är identifieraren du kommer att använda när du programatiskt fyller i formuläret senare. +* **Se upp för:** Överlappande widget‑rektanglar. Överlappningar kan orsaka renderingsartefakter i vissa visare. +* **Prestanda‑notering:** Att lägga till många sidor eller widgets i en tight loop kan optimeras genom att återanvända en enda `Rectangle`‑instans och bara ändra dess koordinater. + +## Slutsats + +Du vet nu hur du **save PDF document** som innehåller ett fullt funktionellt formulär, hur du **populate PDF form field**, och hur du **how to add pages PDF** samt **create PDF with form fields** med Aspose.PDF för .NET. Det kompletta exemplet demonstrerar hela arbetsflödet från dokumentskapande till slutlig sparning. + +Nästa steg är att utforska relaterade ämnen såsom **adding check boxes**, **creating drop‑down lists**, eller **flattening the form** för skrivskyddad distribution. Alla dessa bygger på samma principer som täcks här och utökar dina PDF‑automatiseringsmöjligheter. + +Lycka till med kodningen! + +## Vad bör du lära dig härnäst? + +De följande handledningarna 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. + +- [Hur man skapar PDF med Aspose – Lägg till formulärfält och sidor](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [Skapa PDF-dokument med Aspose – Lägg till sida, textruta och formulär](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [Hur man lägger till och extraherar PDF‑formulärfält med Aspose.PDF för .NET: En omfattande guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/swedish/net/programming-with-pdf-pages/_index.md index c217a5b999..d836134025 100644 --- a/pdf/swedish/net/programming-with-pdf-pages/_index.md +++ b/pdf/swedish/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Handledningarna innehåller steg-för-steg-instruktioner, detaljerade kodexempel | [Uppdatera PDF-siddimensioner](./update-dimensions/) | Upptäck hur du enkelt uppdaterar PDF-siddimensioner med Aspose.PDF för .NET i den här omfattande steg-för-steg-guiden. | | [Zooma till sidinnehåll i PDF-fil](./zoom-to-page-contents/) | Lär dig hur du zoomar till sidinnehåll i PDF-filer med Aspose.PDF för .NET i den här omfattande guiden. Förbättra dina PDF-dokument efter dina specifika behov. | | [Lägg till sidnummer i PDF med C# – Fullständig steg‑för‑steg‑guide](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Lär dig hur du lägger till sidnummer i en PDF med C# med en detaljerad steg‑för‑steg‑guide. | +| [Lägg till Bates-nummerering i PDF med Aspose – steg‑för‑steg‑guide](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Lär dig hur du lägger till Bates-nummerering i en PDF med Aspose i en detaljerad steg‑för‑steg‑guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/swedish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..b8cbcde6af --- /dev/null +++ b/pdf/swedish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Lägg till Bates‑nummerering i PDF med Aspose.Pdf i C#. Denna handledning + visar också hur man lägger till en tom sida i en PDF och genererar PDF programatiskt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: sv +lastmod: 2026-08-08 +og_description: Lägg till Bates‑nummerering i PDF med Aspose.Pdf i C#. Lär dig att + lägga till en tom PDF‑sida, generera PDF programatiskt och spara det färdiga dokumentet + på några minuter. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Lägg till Bates‑nummerering i PDF med Aspose – komplett C#‑guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Lägg till Bates‑nummerering i PDF med Aspose – steg‑för‑steg‑guide +url: /sv/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lägg till Bates‑numrering pdf med Aspose – steg‑för‑steg guide + +Att lägga till Bates‑numrering pdf med Aspose.Pdf är enkelt när du förstår de grundläggande stegen. Om du också behöver lägga till en tom sida pdf eller generera pdf programatiskt, täcker den här guiden allt du behöver. + +I detta tutorial kommer du att: + +* Skapa ett nytt PDF‑dokument från grunden. +* Lägg till en tom sida pdf som kommer att innehålla Bates‑numren. +* Konfigurera Bates‑numreringsartefakten med ett anpassat prefix. +* Spara PDF‑en så att numren visas i den genererade filen. + +I slutet kommer du att ha en fullt fungerande C#‑konsolapplikation som producerar en PDF som innehåller Bates‑nummer som **CASE‑1000**, **CASE‑1001**, … – ett vanligt krav för juridiska och e‑discovery‑arbetsflöden. + +## Förutsättningar + +* .NET 6.0 SDK eller senare (koden fungerar också med .NET Framework 4.8). +* Visual Studio 2022 eller någon C#‑kompatibel IDE. +* En giltig Aspose.Pdf för .NET‑licens (eller en gratis utvärderingsnyckel). +* Grundläggande kunskap om C#‑syntax. + +> **Proffstips:** Om du kör koden utan licens kommer Aspose att lägga till ett litet vattenstämpel i den genererade PDF:en. + +## Steg 1: Ställ in projektet och importera Aspose.Pdf + +Skapa ett nytt konsolprojekt och lägg till Aspose.Pdf NuGet‑paketet: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +De `using`‑direktiv som krävs för exemplet är: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Dessa namnrymder ger dig åtkomst till klasserna `Document`, `Page` och `BatesNumberingArtifact` som används senare. + +## Steg 2: Lägg till en tom sida pdf + +Ett Bates‑nummer måste fästas vid en sida, så vi skapar först en tom sida som kommer att ta emot numreringsartefakten. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document`‑klassen representerar hela PDF‑filen, medan `Pages.Add()` infogar en ny, tom sida i slutet av dokumentets sidainsamling. Eftersom dokumentet börjar tomt skapar detta anrop även den första sidan. + +## Steg 3: Konfigurera Bates‑numreringsartefakten + +Nu definierar vi hur Bates‑numren ska se ut. `BatesNumberingArtifact` låter dig ange startnummer, prefix, suffix och formateringsalternativ. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Varför detta är viktigt:** +Att sätta `StartNumber` till **1000** matchar vanliga juridiska ärendefils konventioner. `Prefix` säkerställer att varje nummer visas som **CASE‑1000**, **CASE‑1001**, … vilket gör det enklare att söka och sortera. + +## Steg 4: Fäst artefakten på sidan + +Artefakten måste läggas till sidans `Artifacts`‑samling så att Aspose renderar den på varje sida vid sparning. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +När dokumentet sparas upprepar Aspose automatiskt artefakten på alla sidor och ökar numret för varje efterföljande sida. + +## Steg 5: (Valfritt) Lägg till ytterligare sidor + +Om du behöver fler sidor, upprepa helt enkelt `pdfDocument.Pages.Add()`. Bates‑numreringsartefakten du fäste i föregående steg kommer automatiskt att visas på varje ny sida. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Steg 6: Spara PDF – generera pdf programatiskt + +Till sist sparas dokumentet till disk. Detta är punkten där Bates‑numren renderas på sidorna. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Förväntat resultat:** +Öppna *BatesNumberedDocument.pdf* så ser du en tre‑sidig PDF. Varje sida visar ett Bates‑nummer i nedre högra hörnet: + +* Sida 1 → **CASE‑1000** +* Sida 2 → **CASE‑1001** +* Sida 3 → **CASE‑1002** + +Numren ökas automatiskt eftersom artefakten är fäst vid sidans samling. + +## Fullt, körbart exempel + +När vi sätter ihop allt, här är ett komplett konsolprogram som du kan kopiera, klistra in och köra: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Kör programmet med `dotnet run`. Efter körning, hitta filen på ditt skrivbord och verifiera Bates‑numren. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Vanliga frågor och specialfall + +### Vad händer om jag behöver ett annat teckensnitt eller en annan position? + +`BatesNumberingArtifact` exponerar egenskaper som `FontSize`, `FontColor`, `HorizontalAlignment` och `VerticalAlignment`. Till exempel: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Hur exkluderar jag en specifik sida från numrering? + +Skapa en separat `BatesNumberingArtifact` för de sidor du vill numrera och lägg till den endast på dessa sidor. Sidor utan en fäst artefakt förblir utan nummer. + +### Fungerar detta med befintliga PDF-filer? + +Ja. Istället för `new Document()`, ladda en befintlig fil: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Fäst sedan artefakten på önskade sidor och spara. + +## Slutsats + +Du vet nu hur du **lägger till bates numbering pdf** med Aspose.Pdf, hur du **lägger till en tom sida pdf**, och hur du **genererar pdf programatiskt** i en ren, återanvändbar C#‑lösning. Metoden fungerar med valfritt antal sidor, anpassade prefix och stilalternativ, vilket ger dig full kontroll över det slutliga dokumentet. + +Next steps you might explore: + +* Use **create pdf as + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närbesläktade ämnen som bygger på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Hur man lägger till och anpassar sidnummer i PDF:er med Aspose.PDF för .NET | Guide för dokumentmanipulation](/pdf/english/net/document-manipulation/add-customize-page-numbers-aspose-pdf-dot-net/) +- [Hur man lägger till en tom sida i slutet av en PDF med Aspose.PDF för .NET | Steg‑för‑steg‑guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Skapa PDF-dokument med Aspose.PDF – Lägg till sida, form & spara](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 e560884530..a98dd78221 100644 --- a/pdf/swedish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/swedish/net/programming-with-security-and-signatures/_index.md @@ -35,6 +35,8 @@ Handledningen ger dig en detaljerad översikt över metoder och tekniker för at | [Signera med smartkort med hjälp av signaturfältet](./sign-with-smart-card-using-signature-field/) | Lär dig hur du signerar PDF-filer säkert med ett smartkort med Aspose.PDF för .NET. Följ vår steg-för-steg-guide för enkel implementering. | | [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#. | | [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#. | +| [Verifiera PDF-signatur i C# med Aspose.PDF – komplett guide](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Lär dig hur du verifierar PDF-signaturer i C# med Aspose.PDF genom en komplett steg-för-steg-guide. | +| [PDF-signaturhandledning: validera en digital PDF-signatur med Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Lär dig hur du validerar en digital PDF-signatur med Aspose.PDF i C# – steg-för-steg-guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/swedish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/swedish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..8a90fb5470 --- /dev/null +++ b/pdf/swedish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,219 @@ +--- +category: general +date: 2026-08-08 +description: pdf‑signaturhandledning som visar hur man validerar PDF‑digital signatur + med hjälp av signaturvalideringsalternativ och C#‑kod – snabb steg‑för‑steg‑guide +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: sv +lastmod: 2026-08-08 +og_description: pdf‑signaturhandledning guidar dig genom validering av en PDF‑digital + signatur med Aspose.PDF. Lär dig att konfigurera valideringsalternativ för signaturen + och kontrollera resultatet. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF‑signaturhandledning – validera PDF‑digitala signaturer i C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'PDF‑signaturhandledning: validera en PDF‑digital signatur med Aspose.PDF' +url: /sv/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf signaturhandledning – validera en PDF‑digital signatur i C# + +Om du behöver en **pdf signaturhandledning** som visar exakt hur du validerar en PDF‑digital signatur, så har den här guiden dig täckt. Du får se hur du laddar en signerad PDF, konfigurerar **signature validation options**, kör valideringen och visar resultatet – allt med tydlig, körbar C#‑kod. + +Att validera en PDF‑signatur är avgörande när du hanterar kontrakt, fakturor eller andra juridiskt bindande dokument. Denna handledning går igenom hela arbetsflödet så att du kan integrera signaturkontroller i dina egna applikationer utan att gissa vilka API‑anrop som behövs. + +## Vad du kommer att uppnå + +I slutet av den här handledningen kommer du att kunna: + +* Ladda en signerad PDF‑fil med Aspose.PDF. +* Ställa in **signature validation options** såsom hash‑algoritm. +* Anropa `Validate`‑metoden för att **validate pdf digital signature**. +* Skriva ut ett tydligt “Signature valid”-meddelande i konsolen. + +**Förutsättningar** + +* .NET 6.0 (eller senare) installerat. +* Visual Studio 2022 (eller någon C#‑IDE). +* Aspose.PDF for .NET NuGet‑paket (`Aspose.Pdf`). + +> **Proffstips:** Använd den senaste versionen av Aspose.PDF för stöd för SHA‑3‑algoritmer och förbättrad valideringsprestanda. + +## Steg 1: Installera Aspose.PDF NuGet‑paketet + +Öppna ditt projekt i Visual Studio och kör följande kommando i Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Paketet lägger till `Aspose.Pdf`‑namnutrymmet, som innehåller `Document`‑klassen och de signatur‑relaterade API‑erna du kommer att använda. + +## Steg 2: Ladda det signerade PDF‑dokumentet + +Den första raden kod skapar ett `Document`‑objekt som representerar PDF‑filen på disken. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Varför detta är viktigt:* `Document`‑klassen analyserar PDF‑strukturen och exponerar `Signatures`‑samlingen som innehåller alla inbäddade digitala signaturer. Om filvägen är felaktig kastas ett undantag, så kontrollera vägen innan du kör programmet. + +## Steg 3: Konfigurera signaturvalideringsalternativ + +Du kan skräddarsy valideringsprocessen med klassen `SignatureValidationOptions`. I den här handledningen specificerar vi hash‑algoritmen, men du kan också ställa in certifikat‑revokationskontroller, tidsstämpelverifiering och mer. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Varför detta är viktigt:* Hash‑algoritmen måste matcha den som användes när signaturen skapades. En felaktig algoritm får valideringen att misslyckas även om signaturen i övrigt är korrekt. + +## Steg 4: Validera den första signaturen + +De flesta PDF‑filer innehåller en enda signatur, men `Signatures`‑samlingen kan innehålla flera. Detta exempel validerar det första elementet (`[0]`). `Validate`‑metoden returnerar en Boolean som indikerar om valideringen lyckades. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* Om PDF‑filen saknar signaturer blir `document.Signatures.Count` `0` och ett försök att nå `[0]` kastar ett `IndexOutOfRangeException`. Skydda mot detta med en enkel kontroll: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Steg 5: Visa valideringsresultatet + +Till sist skriver du ut resultatet till konsolen. Detta steg demonstrerar **check pdf signature**‑resultatet i ett mänskligt läsbart format. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +När du kör programmet bör du se: + +``` +Signature valid: True +``` + +Om signaturen är korrupt, använder en icke‑stödd algoritm eller certifikatet är återkallat, blir utskriften `False`. + +## Fullt, körbart exempel + +Kopiera följande kod till ett nytt konsolprojekt (`dotnet new console`) och ersätt `YOUR_DIRECTORY/signed.pdf` med sökvägen till din signerade PDF‑fil. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Förväntad utskrift + +``` +Signature valid: True +``` + +Om signaturen misslyckas med valideringen visar konsolen `Signature valid: False`. + +## Vanliga frågor och felsökning + +| Fråga | Svar | +|----------|--------| +| **Vad händer om PDF‑filen använder en annan hash‑algoritm?** | Ändra `HashAlgorithm` i `SignatureValidationOptions` så att den matchar, t.ex. `HashAlgorithm.SHA256`. | +| **Hur validerar jag alla signaturer i en PDF med flera signaturer?** | Loopa igenom `document.Signatures` och anropa `Validate` för varje element. | +| **Kan jag verifiera signaturcertifikatets förtroendekedja?** | Sätt `validationOptions.CheckCertificateRevocation = true` och ange eventuellt ett eget `CertificateStore` för att inkludera betrodda rotcertifikat. | +| **Vad om jag behöver stöd för tidsstämpelvalidering?** | Aktivera `validationOptions.CheckTimestamp = true`. Aspose.PDF verifierar då den inbäddade tidsstämpel‑tokenen. | +| **Finns det ett sätt att få detaljerade valideringsfel?** | Använd `ValidateEx(validationOptions, out ValidationResult result)`; `result` innehåller `ErrorMessage` och `ErrorCode` för varje fel. | + +## Nästa steg + +* Utforska **validate pdf signature** för flera signaturer genom att iterera över `document.Signatures`. +* Kombinera den här handledningen med **check pdf signature** i ett web‑API för att erbjuda real‑tidsverifiering av uppladdade kontrakt. +* Fördjupa dig i **signature validation options** såsom CRL/OCSP‑kontroller, tidsstämpelvalidering och anpassade betrodda lagringar. + +Du har nu en komplett **pdf signaturhandledning** som visar hur du **validate pdf digital signature** med Aspose.PDF i C#. Anpassa gärna koden för ditt eget arbetsflöde, lägg till loggning eller integrera den i större dokument‑bearbetningspipelines. Lycka till med kodandet! + +## Vad bör du lära dig härnäst? + +De följande handledningarna täcker närbesläktade ämnen som bygger vidare på teknikerna i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationssätt i dina egna projekt. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/swedish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..3f283619f3 --- /dev/null +++ b/pdf/swedish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Verifiera PDF‑signatur i C# med Aspose.PDF. Lär dig hur du validerar + digitala PDF‑signaturer och listar PDF‑signaturer med bara några rader kod. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: sv +lastmod: 2026-08-08 +og_description: Verifiera PDF‑signatur i C# med Aspose.PDF. Denna guide visar hur + du validerar digitala PDF‑signaturer, listar PDF‑signaturer och hanterar komprometterade + signaturer effektivt. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Verifiera PDF‑signatur i C# – snabb Aspose.PDF‑handledning +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Verifiera PDF‑signatur i C# med Aspose.PDF – komplett guide +url: /sv/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Verifiera PDF-signatur i C# med Aspose.PDF – komplett guide + +Om du behöver **verifiera PDF-signatur** i en .NET-applikation, visar den här guiden ett koncist sätt att göra det med Aspose.PDF. Du kommer att lära dig hur du **validerar digital signatur PDF**, **listar PDF-signaturer**, och upptäcker komprometterade signaturer på bara några rader kod. + +Handledningen täcker allt från att installera biblioteket till att hantera kantfall såsom osignerade dokument eller krypterade PDF-filer. I slutet kommer du att kunna integrera signaturverifiering i vilket C#-projekt som helst, och säkerställa äktheten hos inkommande PDF-filer. + +**Förutsättningar** + +- .NET 6.0 eller senare (koden fungerar också med .NET Framework 4.6+). +- Grundläggande kunskap om C# och Visual Studio (eller någon IDE du föredrar). +- En Aspose.PDF för .NET-licens (gratis provversion fungerar för utvärdering). + +Om du uppfyller dessa krav är du redo att börja verifiera PDF-signaturer. + +## Verifiera PDF-signatur – sätt upp projektet + +1. **Lägg till Aspose.PDF NuGet-paketet** + Öppna Package Manager Console och kör: + + ```bash + Install-Package Aspose.PDF + ``` + + Detta hämtar `Aspose.Pdf`-assemblyn och dess beroenden. + +2. **Importera de nödvändiga namnutrymmena** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` ger dig `Any`-extensionen som används senare, medan `Aspose.Pdf` innehåller klasserna `Document` och `Signature`. + +## Ladda PDF-dokumentet + +Det första funktionella steget är att öppna den PDF du vill inspektera. Aspose.PDF läser filen till minnet, vilket gör att du kan fråga efter dess signaturer. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Varför detta är viktigt** – Att ladda dokumentet inom ett `using`-block garanterar att filhandtaget frigörs omedelbart, vilket förhindrar fil‑låsningsproblem i långvariga tjänster. + +## Lista PDF-signaturer + +Innan du validerar en signatur kan du vilja veta hur många signaturer som finns. Detta steg demonstrerar funktionen **lista PDF-signaturer**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Förklaring** + +- `document.Signatures` returnerar en samling av `Signature`-objekt. +- `Count` visar hur många signaturer som finns. +- Varje `Signature` exponerar metadata såsom `Id`, `SignatureType` och `Reason`, vilket kan vara användbart för revisionsloggar. + +**Kantfall** – Om PDF-filen saknar signaturer kommer `Count` att vara `0` och loopen kommer inte att köras. Du kan hantera detta scenario på ett smidigt sätt: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Validera digital signatur PDF – upptäck komprometterade signaturer + +Nu när du kan enumerera signaturer är huvuduppgiften att **verifiera PDF-signaturens** integritet. Aspose.PDF tillhandahåller egenskapen `IsCompromised`, som returnerar `true` när signaturens kryptografiska hash inte längre matchar dokumentets innehåll. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Varför detta fungerar** + +- `Signature.IsCompromised` utför en full kryptografisk validering med den inbäddade certifikatkedjan. +- `Any`-operatorn i LINQ stoppar vid den första komprometterade signaturen, vilket gör kontrollen effektiv även för dokument med många signaturer. + +### Hantera flera signaturer individuellt + +Om du behöver veta vilken specifik signatur som misslyckades, iterera istället för att använda `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Proffstips:** Spara valideringsresultatet tillsammans med `sig.Id` i en databas för senare forensisk analys. + +## Skriv ut resultat och beakta kantfall + +Nedan är ett komplett, körbart program som kombinerar stegen ovan. Det laddar en PDF, listar alla signaturer, validerar dem och skriver ut ett tydligt resultat. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Förväntat utdata (giltiga signaturer)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Förväntat utdata (komprometterad signatur)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Vanliga fallgropar och hur du undviker dem + +| Problem | Lösning | +|---------|----------| +| PDF-filen är lösenordsskyddad. | Skicka lösenordet via `document.Encrypt.Decrypt(password)` innan du får åtkomst till `Signatures`. | +| Ingen Aspose.PDF-licens är angiven. | Använd `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` för att undvika utvärderingsvattenstämplar. | +| Stora PDF-filer orsakar hög minnesanvändning. | Bearbeta filen i strömningsläge (`Document.Load(stream)`) istället för att ladda hela filen på en gång. | + +## Slutsats + +Du vet nu hur du **verifierar PDF-signatur** i C# med Aspose.PDF, hur du **validerar digital signatur PDF**, och hur du **listar PDF-signaturer** för rapportering eller revisionsändamål. Det kompletta exemplet demonstrerar hur man laddar ett dokument, enumererar dess signaturer, kontrollerar varje signatur för kompromettering och hanterar typiska kantfall. + +Nästa steg du kan utforska: + +- **Validera tidsstämpel‑tokens** för att säkerställa att en signatur skapades innan ett certifikat gick ut. +- **Extrahera signatörscertifikat** (`sig.Certificate`) för anpassad validering av förtroendelager. +- **Integrera med ASP.NET Core** för att automatiskt avvisa uppladdade PDF-filer som misslyckas med verifieringen. + +Känn dig fri att experimentera med flera signaturer, anpassad valideringslogik eller alternativa PDF-bibliotek. Om du fann den här guiden hjälpsam, dela den med kollegor eller lägg till dina egna tips i kommentarerna. + +## Vad bör du lära dig härnäst? + +De följande handledningarna täcker närbesläktade ämnen som bygger på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Hur man verifierar PDF – Validera PDF-signatur med Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verifiera pdf-signatur i C# – Komplett guide för att validera digital signatur PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net verifiera digital signatur](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/swedish/net/text-operations/_index.md index 60a3d135ec..699be48584 100644 --- a/pdf/swedish/net/text-operations/_index.md +++ b/pdf/swedish/net/text-operations/_index.md @@ -48,7 +48,7 @@ Lär dig hur du bäddar in teckensnitt i dina PDF-dokument med Aspose.PDF för . Lär dig hur du bäddar in standardtypsnitt av typ 1 i PDF-dokument med Aspose.PDF för .NET. Säkerställ enhetlig typografi på alla enheter med den här lättförståeliga guiden. ### [Extrahera teckensnitt från PDF-filer med Aspose.PDF för .NET: En omfattande guide](./extract-fonts-aspose-pdf-net/) -Lär dig hur du effektivt extraherar teckensnitt från PDF-dokument med Aspose.PDF för .NET. Perfekt för dokumentgranskning och digital bevaring. +Lär dig hur du effektivt extraherar teckensnitt från PDF-dokument med Aspose.PDF för .NET. Perfekt för dokumentgranskning och digital bevarande. ### [Extrahera PDF-fältvärden med Aspose.PDF för .NET: En steg-för-steg-guide](./extract-pdf-field-values-aspose-dotnet-guide/) Lär dig hur du extraherar fältvärden från PDF-filer med Aspose.PDF för .NET i C#. Den här guiden behandlar installation, implementering och bästa praxis. @@ -75,7 +75,7 @@ Lär dig hur du effektivt extraherar text från specifika sidor i en PDF med Asp Lär dig hur du effektivt extraherar text från stämpelanteckningar i PDF-dokument med hjälp av Aspose.PDF för .NET. Den här handledningen täcker installation, implementering och praktiska tillämpningar. ### [Extrahera text från PDF-kolumner med Aspose.PDF för .NET: En omfattande guide](./pdf-column-text-extraction-aspose-dotnet/) -Lär dig hur du effektivt extraherar text från PDF-filer med flera kolumner i dina .NET-applikationer med Aspose.PDF. Följ den här omfattande guiden för att konfigurera, implementera och optimera extrahering av kolumntext. +Lär dig hur du effektivt extraherar text från PDF-filer med flera kolumner i dina .NET-applikationer med Aspose.PDF. Följ den här omfattande guiden för att konfigurera, implementera och optimera extraktions av kolumntext. ### [Så här identifierar du text och bilder i PDF-filer med Aspose.PDF för .NET: En omfattande guide](./detect-text-images-pdf-aspose-pdf-net/) Lär dig hur du effektivt identifierar text och bilder i PDF-filer med Aspose.PDF för .NET. Den här guiden täcker installation, extraheringstekniker och praktiska tillämpningar. @@ -164,6 +164,9 @@ En kodhandledning för Aspose.PDF Net ### [Stilisera text i taggade PDF-filer med Aspose.PDF för .NET | Guide för att skapa tillgängliga och estetiska PDF-filer](./style-text-tagged-pdfs-aspose-pdf-net/) Lär dig hur du formaterar text i taggade PDF-dokument med Aspose.PDF för .NET. Den här guiden behandlar installation, tekniker och praktiska tillämpningar för att förbättra tillgängligheten. +### [Hur du sammanfattar PDF med Aspose.Pdf.AI – guide](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Lär dig hur du använder Aspose.Pdf.AI för att automatiskt skapa sammanfattningar av PDF-dokument med .NET. + ## Ytterligare resurser - [Aspose.PDF för nätdokumentation](https://docs.aspose.com/pdf/net/) diff --git a/pdf/swedish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/swedish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..70a8da82df --- /dev/null +++ b/pdf/swedish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Hur man sammanfattar PDF med Aspose.Pdf.AI – lär dig hur du sammanfattar + PDF med AI, genererar en PDF‑sammanfattning och sparar sammanfattningen som PDF. + Komplett kod och bästa praxis. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: sv +lastmod: 2026-08-08 +og_description: Hur man sammanfattar PDF med Aspose.Pdf.AI. Denna handledning visar + hur du sammanfattar PDF med AI, genererar en PDF‑sammanfattning och sparar sammanfattningen + som PDF i några få rader C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Hur man sammanfattar PDF med Aspose.Pdf.AI – steg‑för‑steg‑guide +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Hur man sammanfattar PDF med Aspose.Pdf.AI – guide +url: /sv/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man sammanfattar PDF med Aspose.Pdf.AI – guide + +Om du snabbt och pålitligt behöver **how to summarize PDF**, kan du låta en AI-modell göra det tunga arbetet. Den här handledningen visar exakt hur du sammanfattar PDF med AI, genererar en PDF‑sammanfattning och sparar sammanfattningen som PDF med hjälp av Aspose.Pdf.AI SDK för .NET. Du får ett komplett, körbart exempel och en förklaring av varje rad så att du kan anpassa lösningen till dina egna projekt. + +Handledningen täcker: + +* Förbereda källmappen och API‑nyckeln +* Skapa en `OpenAIClient` som kommunicerar med modellen +* Konfigurera sammanfattningsalternativ såsom temperatur och dokumentväg +* Bygga en `SummaryCopilot` och hämta sammanfattningstexten asynkront +* Spara den genererade sammanfattningen tillbaka till en PDF‑fil + +Inga externa tjänster utöver OpenAI‑endpointen krävs, och koden fungerar med .NET 6+ och Aspose.Pdf.AI 23.7 (eller senare). + +## Förutsättningar + +* **.NET 6 SDK** (eller någon nyare .NET‑version) +* **Aspose.Pdf.AI for .NET** – installera via NuGet: `dotnet add package Aspose.Pdf.AI` +* En **OpenAI API‑nyckel** med åtkomst till den modell du vill använda (t.ex. `gpt‑4o`) +* En PDF‑fil du vill sammanfatta (exemplet använder `SampleDocument.pdf`) + +Se till att mappen du anger i `dataDirectory` finns och att applikationen har läs‑/skrivrättigheter. + +## Steg 1: Ställ in projektstrukturen + +Skapa ett konsolprojekt (eller integrera koden i någon befintlig .NET‑app). Den minimala `Program.cs` ser ut så här: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Varför denna struktur är viktig + +* **`await using`** avyttrar `OpenAIClient` automatiskt och frigör HTTP‑anslutningar. +* **`Path.Combine`** bygger OS‑oberoende sökvägar, vilket förhindrar buggar på Windows vs. Linux. +* **Temperature** styr kreativiteten; `0.5` ger en balanserad, faktabaserad sammanfattning. +* **`GetSummaryAsync`** returnerar ren text, medan `SaveSummaryAsync` skapar en korrekt PDF som bevarar teckensnitt och layout. + +## Steg 2: Förstå sammanfattningsalternativen + +Klassen `OpenAISummaryCopilotOptions` låter dig finjustera sammanfattningsprocessen: + +| Alternativ | Syfte | Typiska värden | +|------------|-------|----------------| +| `WithTemperature(double)` | Styr slumpmässighet. `0.0` = deterministisk, `1.0` = mycket kreativ. | `0.3‑0.7` för affärsdokument | +| `WithDocument(string)` | Sökväg till käll‑PDF‑filen. Måste vara en läsbar fil. | Vilken som helst absolut eller relativ sökväg | +| `WithPrompt(string)` *(optional)* | Anpassad prompt för att styra modellen. | “Sammanfatta de viktigaste resultaten på 150 ord.” | + +Om du har **stora PDF‑filer** (över 10 MB eller många sidor), överväg att dela upp dokumentet i mindre delar innan sammanfattning för att undvika token‑gränsfel. SDK:n delar inte automatiskt; du kan använda `PdfDocument` från `Aspose.Pdf` för att extrahera sidor och mata in dem en efter en. + +## Steg 3: Kör koden och verifiera resultatet + +1. Placera `SampleDocument.pdf` i den `Data`‑mapp du refererade till. +2. Ersätt `"YOUR_API_KEY"` med din riktiga OpenAI‑nyckel. +3. Kör `dotnet run`. + +Du bör se två sektioner i konsolen: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Öppna `Summary_out.pdf` med någon PDF‑visare – den kommer att innehålla samma sammanfattningstext, formaterad med ett standardteckensnitt. PDF‑filen är fullt sökbar eftersom SDK:n bäddar in texten som en standard‑PDF‑sida. + +## Steg 4: Vanliga variationer och hantering av kantfall + +### Sammanfatta endast en del av dokumentet + +Om du behöver **summarize pdf with ai** för ett specifikt kapitel, extrahera först det intervallet: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Peka sedan `WithDocument` på `Chapter5.pdf`. + +### Justera längden på sammanfattningen + +Du kan påverka längden genom att lägga till en anpassad prompt: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Hantera API‑fel + +Nätverksfel eller kvotgränser kastar `Aspose.Pdf.AI.Exceptions.AIException`. Omge anropet med ett `try / catch`‑block: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Spara sammanfattningen i en anpassad layout + +`SaveSummaryAsync` skriver ren text. För att formatera PDF‑filen (lägga till titel, sidhuvud eller varumärke), skapa ett nytt `PdfDocument` och infoga sammanfattningen manuellt: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Steg 5: Prestandatips och bästa praxis + +* **Återanvänd `OpenAIClient`** för flera sammanfattningar i samma process – att skapa en klient är billigt, men återanvändning av den underliggande `HttpClient` minskar socket‑utarmning. +* **Cacha sammanfattningen** om käll‑PDF‑filen inte förändras; du kan lagra texten i en databas och hoppa över API‑anropet. + +## Vad bör du lära dig härnäst? + +Följande handledningar täcker närbesläktade ämnen som bygger på teknikerna som demonstreras i den här guiden. Varje resurs innehåller kompletta fungerande kodexempel med steg‑för‑steg‑förklaringar för att hjälpa dig bemästra ytterligare API‑funktioner och utforska alternativa implementationsmetoder i dina egna projekt. + +- [Hur man extraherar och sparar specifika PDF‑sidor med Aspose.PDF för .NET – en omfattande guide](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Hur man extraherar och sparar PDF‑bilagor med Aspose.PDF .NET: en omfattande guide](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Hur man konverterar HTML till PDF med Aspose.PDF .NET: en komplett guide](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/conversion-export/_index.md b/pdf/thai/net/conversion-export/_index.md index 7cdbff5638..a326058ec7 100644 --- a/pdf/thai/net/conversion-export/_index.md +++ b/pdf/thai/net/conversion-export/_index.md @@ -68,7 +68,7 @@ ### [แปลง PDF เป็น HTML ใน .NET โดยใช้ Aspose.PDF โดยไม่ต้องบันทึกภาพ](./convert-pdf-html-net-asposepdf-no-images/) เรียนรู้วิธีการแปลงไฟล์ PDF เป็น HTML โดยใช้ Aspose.PDF สำหรับ .NET โดยไม่ต้องบันทึกรูปภาพแยกต่างหาก รักษาความสมบูรณ์ของเค้าโครงด้วยคู่มือโดยละเอียดของเรา -### [แปลง PDF เป็น HTML ใน .NET ด้วยเส้นทางรูปภาพที่กำหนดเองโดยใช้ Aspose.PDF](./convert-pdf-html-custom-image-paths-dotnet/) +### [แปลง PDF เป็น HTML ใน .NET ด้วย Aspose.PDF โดยใช้เส้นทางรูปภาพที่กำหนดเอง](./convert-pdf-html-custom-image-paths-dotnet/) เรียนรู้วิธีการแปลงไฟล์ PDF เป็นรูปแบบ HTML โดยใช้ Aspose.PDF สำหรับ .NET และกำหนดเส้นทางรูปภาพอย่างมีประสิทธิภาพ เหมาะอย่างยิ่งสำหรับการผสานรวมเว็บ ### [แปลง PDF เป็น HTML ด้วย Aspose.PDF สำหรับ .NET: รักษาแบบอักษรในรูปแบบ TTF และ WOFF](./convert-pdf-html-aspose-net-truetype-woff/) @@ -80,6 +80,9 @@ ### [แปลง PDF เป็น HTML ด้วย URL รูปภาพที่กำหนดเองโดยใช้ Aspose.PDF .NET: คู่มือที่ครอบคลุม](./convert-pdf-html-custom-image-urls-aspose-pdf-net/) เรียนรู้วิธีการแปลงเอกสาร PDF เป็นรูปแบบ HTML โดยใช้ Aspose.PDF สำหรับ .NET รวมถึงการปรับแต่ง URL ของรูปภาพและการใช้กลยุทธ์การประหยัดทรัพยากรที่เหมาะสม +### [บันทึก PDF เป็น HTML ด้วย Aspose.PDF – คู่มือขั้นตอนโดยขั้นตอน](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +เรียนรู้วิธีบันทึกไฟล์ PDF เป็น HTML อย่างละเอียดด้วย Aspose.PDF สำหรับ .NET + ### [แปลง PDF เป็น PNG ด้วย Aspose.PDF .NET: ปรับปรุงการแสดงข้อความให้คมชัดยิ่งขึ้น](./convert-pdf-png-aspose-net-font-hinting/) เรียนรู้วิธีการแปลงเอกสาร PDF เป็นภาพ PNG คุณภาพสูงโดยใช้ Aspose.PDF .NET รับประกันการแสดงผลข้อความคมชัดผ่านการบอกใบ้แบบอักษร @@ -164,10 +167,10 @@ ### [วิธีแปลง HTML เป็น PDF ด้วย Aspose.PDF .NET: คู่มือฉบับสมบูรณ์](./convert-html-pdf-aspose-dotnet-guide/) เรียนรู้วิธีการแปลงเอกสาร HTML เป็น PDF ที่ดูเป็นมืออาชีพอย่างมีประสิทธิภาพโดยใช้ Aspose.PDF .NET ค้นพบเทคนิคในการจัดการทรัพยากรภายนอกและการแสดงเนื้อหาที่ซับซ้อน -### [วิธีแปลงรูปภาพ CGM ขนาดใหญ่เป็น PDF โดยใช้ Aspose.PDF .NET: คู่มือฉบับสมบูรณ์](./convert-large-cgm-images-to-pdf-aspose-pdf-net/) +### [วิธีการแปลงรูปภาพ CGM ขนาดใหญ่เป็น PDF โดยใช้ Aspose.PDF .NET: คู่มือฉบับสมบูรณ์](./convert-large-cgm-images-to-pdf-aspose-pdf-net/) เรียนรู้วิธีแปลงภาพ Computer Graphics Metafile (CGM) ขนาดใหญ่เป็น PDF ได้อย่างง่ายดายโดยใช้ Aspose.PDF .NET คู่มือนี้ครอบคลุมถึงการตั้งค่า การใช้งาน และแนวทางปฏิบัติที่ดีที่สุด -### [วิธีแปลงไฟล์ MHT เป็น PDF โดยใช้ Aspose.PDF สำหรับ .NET - คำแนะนำทีละขั้นตอน](./convert-mht-files-to-pdf-aspose-dotnet/) +### [วิธีการแปลงไฟล์ MHT เป็น PDF โดยใช้ Aspose.PDF สำหรับ .NET - คำแนะนำทีละขั้นตอน](./convert-mht-files-to-pdf-aspose-dotnet/) เรียนรู้วิธีการแปลงไฟล์ MHT เป็น PDF ได้อย่างง่ายดายโดยใช้ Aspose.PDF สำหรับ .NET คู่มือนี้ครอบคลุมถึงการตั้งค่า ขั้นตอนการแปลง และแนวทางปฏิบัติที่ดีที่สุด ### [วิธีการแปลงไฟล์ภาพ TIFF หลายไฟล์เป็นไฟล์ PDF ไฟล์เดียวโดยใช้ Aspose.PDF สำหรับ .NET: คู่มือฉบับสมบูรณ์](./convert-tiff-to-pdf-aspose-dotnet-guide/) diff --git a/pdf/thai/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/thai/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..3dfe325b14 --- /dev/null +++ b/pdf/thai/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: บันทึก PDF เป็น HTML ด้วย Aspose.PDF ใน C#. เรียนรู้วิธีแปลง PDF เป็น + HTML, ข้ามภาพแรสเตอร์, และจัดการกับกรณีขอบทั่วไป. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: th +lastmod: 2026-08-08 +og_description: บันทึก PDF เป็น HTML ด้วย Aspose.PDF คู่มือนี้จะแสดงวิธีแปลง PDF เป็น + HTML ข้ามภาพราสเตอร์และหลีกเลี่ยงข้อผิดพลาดทั่วไป +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: บันทึก PDF เป็น HTML ด้วย Aspose.PDF – การสอน C# อย่างครบถ้วน +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: บันทึก PDF เป็น HTML ด้วย Aspose.PDF – คู่มือขั้นตอนโดยละเอียด +url: /th/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# บันทึก PDF เป็น HTML ด้วย Aspose.PDF – คู่มือขั้นตอนโดยละเอียด + +หากคุณต้องการ **บันทึก PDF เป็น HTML** อย่างรวดเร็ว บทแนะนำนี้จะแสดงให้คุณเห็นอย่างชัดเจนว่าทำอย่างไรด้วย Aspose.PDF สำหรับ .NET ไม่ว่าคุณจะกำลังสร้างแอปเว็บดูเอกสารหรือส่งออกรายงานเพื่อการทำดัชนีที่เป็นมิตรกับ SEO คุณจะได้เห็นโซลูชันที่สมบูรณ์และสามารถรันได้ซึ่งแปลง PDF เป็น HTML พร้อมให้คุณควบคุมภาพเรสเตอร์อย่างละเอียด + +นอกจากงานหลักแล้ว เราจะครอบคลุมตัวเลือก **aspose pdf html conversion** ที่ให้คุณข้ามภาพเรสเตอร์ ปรับการจัดการ CSS และจัดการเอกสารขนาดใหญ่อย่างมีประสิทธิภาพ สุดท้ายของคู่มือนี้คุณจะมีโปรแกรมที่เป็นอิสระซึ่งสามารถนำไปใช้ในโปรเจกต์ .NET ใดก็ได้ + +## ข้อกำหนดเบื้องต้น + +* .NET 6.0 SDK หรือใหม่กว่า (โค้ดทำงานได้กับ .NET Core และ .NET Framework ด้วย) +* Visual Studio 2022 หรือ IDE ใดก็ได้ที่รองรับ C# +* ใบอนุญาต Aspose.PDF สำหรับ .NET (รุ่นทดลองฟรีใช้เพื่อประเมินผลได้) +* ไฟล์ PDF ชื่อ `report.pdf` ที่วางไว้ในโฟลเดอร์ที่คุณสามารถอ้างอิงจากโค้ดได้ + +ไม่จำเป็นต้องใช้แพ็กเกจ NuGet เพิ่มเติมนอกจาก `Aspose.Pdf` + +## ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ NuGet ของ Aspose.PDF + +เปิดเทอร์มินัลในโฟลเดอร์โปรเจกต์ของคุณและรัน: + +```bash +dotnet add package Aspose.Pdf +``` + +แพ็กเกจนี้จะเพิ่มเนมสเปซ `Aspose.Pdf` ซึ่งประกอบด้วยคลาส `Document` และประเภท `HtmlSaveOptions` ที่ใช้สำหรับการทำงาน **convert pdf to html** + +## ขั้นตอนที่ 2: สร้างโปรเจกต์คอนโซลและเพิ่ม using directives + +สร้างแอปพลิเคชันคอนโซลใหม่หากคุณยังไม่มี + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +จากนั้นเปิดไฟล์ `Program.cs` และเพิ่มเนมสเปซที่จำเป็น: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +คำสั่งเหล่านี้ทำให้คุณเข้าถึง API ของ PDF หลักและตัวเลือกการบันทึก HTML ที่ควบคุมกระบวนการ **aspose convert pdf html** + +## ขั้นตอนที่ 3: โหลดเอกสาร PDF + +บรรทัดการทำงานแรกจะอ่านไฟล์ PDF ต้นฉบับเข้าไปในอ็อบเจ็กต์ `Aspose.Pdf.Document` อ็อบเจ็กต์นี้แสดงไฟล์ PDF ทั้งหมดในหน่วยความจำและให้เมธอดสำหรับการบันทึก, แก้ไข, และดึงเนื้อหา + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*ทำไมจึงสำคัญ*: การโหลดเอกสารเพียงครั้งเดียวทำให้การใช้หน่วยความจำคาดเดาได้ง่าย โดยเฉพาะกับ PDF ขนาดใหญ่ หากไม่พบไฟล์ Aspose จะโยน `FileNotFoundException` ดังนั้นตรวจสอบให้แน่ใจว่าเส้นทางถูกต้อง + +## ขั้นตอนที่ 4: ตั้งค่าตัวเลือกการบันทึก HTML + +`HtmlSaveOptions` ให้คุณปรับแต่งการแปลง PDF อย่างละเอียด ในบทแนะนำนี้เราข้ามภาพเรสเตอร์เพื่อให้ผลลัพธ์มีน้ำหนักเบา แต่คุณสามารถเปลี่ยนโหมดเป็น `EmbedAll` หากต้องการ + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**ประเด็นสำคัญ**: + +* `RasterImagesSavingMode.Skip` บอกให้ Aspose เพิกเฉยต่อภาพบิตแมพ (JPEG, PNG) ระหว่างการแปลง ซึ่งเหมาะเมื่อ PDF ต้นฉบับมีหน้าสแกนที่คุณไม่ต้องการแสดงในมุมมอง HTML +* คุณสามารถสลับเป็น `EmbedAll` หรือ `External` หากต้องการให้ภาพบันทึกเป็นไฟล์แยก +* คุณสมบัติ `ResourcesFolder` จะมีความสำคัญเฉพาะเมื่อภาพถูกบันทึกเป็นไฟล์ภายนอก + +## ขั้นตอนที่ 5: บันทึกเอกสารเป็น HTML + +ตอนนี้คุณจะเขียนไฟล์ HTML ลงดิสก์โดยใช้ตัวเลือกที่กำหนดไว้ + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +หลังจากการเรียกนี้เสร็จสิ้น `report.html` จะมีเนื้อหาข้อความ, กราฟิกเวกเตอร์, และการจัดวางที่คงไว้จาก PDF ต้นฉบับ แต่ไม่มีภาพเรสเตอร์ใดๆ คุณสามารถเปิดไฟล์ในเบราว์เซอร์เพื่อยืนยันผลลัพธ์ + +## ผลลัพธ์ที่คาดหวัง + +เมื่อคุณเปิด `report.html` ใน Chrome หรือ Edge คุณควรเห็น: + +* หัวเรื่อง, ย่อหน้า, และรูปทรงเวกเตอร์ทั้งหมดแสดงผลอย่างถูกต้อง +* ไม่มีแท็ก `` สำหรับภาพเรสเตอร์ (ถูกละเว้นเนื่องจากโหมด `Skip`) +* CSS ที่สะอาดและน้อยที่สุด ทั้งแบบฝังในบรรทัดหรือในไฟล์สไตล์ชีทแยกต่างหาก ขึ้นอยู่กับตัวเลือกที่คุณเลือก + +หากคุณต้องการยืนยันว่าภาพถูกละเว้น ให้ตรวจสอบซอร์สของหน้า (`Ctrl+U`) คุณจะไม่พบรายการ `` + +## ขั้นตอนที่ 6: จัดการกรณีขอบที่พบบ่อย + +### 6.1 PDF ขนาดใหญ่ (> 100 MB) + +สำหรับไฟล์ขนาดใหญ่มาก ให้เปิดการสตรีมเพื่อบรรเทาการใช้หน่วยความจำ: + +```csharp +htmlOpts.Streaming = true; +``` + +การสตรีมจะเขียนชิ้นส่วน HTML ลงดิสก์โดยตรง ป้องกันไม่ให้เอกสารทั้งหมดถูกเก็บไว้ในหน่วยความจำ + +### 6.2 PDF ที่มีการป้องกันด้วยรหัสผ่าน + +หาก PDF ต้นฉบับถูกเข้ารหัส ให้ใส่รหัสผ่านก่อนบันทึก: + +```csharp +doc.Decrypt("yourPassword"); +``` + +การพยายามบันทึกโดยไม่ถอดรหัสจะทำให้เกิด `InvalidPasswordException` + +### 6.3 ตัวอักษร Unicode + +Aspose.PDF จะฝังฟอนต์ Unicode โดยอัตโนมัติ แต่คุณสามารถบังคับใช้ฟอนต์เฉพาะเพื่อให้การแสดงผลสอดคล้องกัน: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 การตั้งชื่อไฟล์แบบกำหนดเองสำหรับหลายหน้า + +หากคุณต้องการให้แต่ละหน้าของ PDF เป็นไฟล์ HTML แยกกัน ให้ตั้งค่า: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +ซึ่งจะสร้าง `report_page_1.html`, `report_page_2.html` เป็นต้น ซึ่งอาจเป็นประโยชน์สำหรับการแบ่งหน้าในแอปเว็บ + +## ตัวอย่างเต็มที่สามารถรันได้ + +ด้านล่างเป็นโปรแกรมเต็มที่รวมทุกขั้นตอนที่อธิบายไว้ คัดลอกไปยัง `Program.cs` ปรับเส้นทางตามต้องการ แล้วรัน `dotnet run` + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**การตรวจสอบ**: หลังจากรัน คอนโซลจะแสดงข้อความสำเร็จ เปิดไฟล์ HTML ที่สร้างขึ้นในเบราว์เซอร์เพื่อยืนยันว่าข้อความและกราฟิกเวกเตอร์แสดงผลถูกต้องและภาพเรสเตอร์ถูกละเว้น + +## เคล็ดลับและข้อควรระวัง + +* **เคล็ดลับ**: หากคุณต้องการภาพเรสเตอร์ในภายหลัง ให้เปลี่ยน `RasterImagesSavingMode` เป็น `External` และตั้งค่า `ResourcesFolder` ซึ่งจะสร้างโฟลเดอร์ย่อย `images` ที่มีบิตแมพที่แยกออกมา +* **ระวัง**: การใช้โหมด `Skip` เริ่มต้นกับ PDF ที่พึ่งพาภาพสแกนอย่างมากจะทำให้เกิดพื้นที่ว่างที่ควรมีภาพ ควรทดสอบด้วยตัวอย่างเอกสารที่เป็นตัวแทนของคุณเสมอ +* **เคล็ดลับด้านประสิทธิภาพ**: การใช้ `HtmlSaveOptions` ตัวเดียวสำหรับหลายเอกสารจะลดภาระการสร้างอ็อบเจ็กต์ในการแปลงเป็นชุด +* **ตรวจสอบเวอร์ชัน**: API ที่แสดงทำงานกับ Aspose.PDF for .NET เวอร์ชัน 23.9 ขึ้นไป เวอร์ชันก่อนหน้าอาจใช้ `HtmlSaveOptions.RasterImagesSavingMode` ที่มีชื่อ enum แตกต่างกันเล็กน้อย + +## สรุป + +ตอนนี้คุณรู้วิธี **บันทึก PDF เป็น HTML** ด้วย Aspose.PDF วิธีควบคุมการจัดการภาพเรสเตอร์ และวิธีจัดการกับความท้าทายทั่วไปเช่นไฟล์ขนาดใหญ่ การป้องกันด้วยรหัสผ่าน และการสร้าง HTML แยกตามหน้า โซลูชันครบถ้วนนี้ทำให้คุณสามารถรวมการแปลง PDF เป็น HTML เข้าไปในแอปพลิเคชัน C# ใดก็ได้อย่างมั่นใจ + +### ขั้นตอนต่อไป? + +* สำรวจ **aspose pdf html conversion** เพื่อฝังฟอนต์และปรับแต่ง CSS +* รวมการแปลงนี้กับ Web API เพื่อให้บริการ HTML ตามความต้องการ +* ลองทิศทางตรงกันข้าม — **convert pdf to html** แล้วแปลงกลับเป็น PDF เพื่อยืนยันความแม่นยำของการแปลงรอบ + +อย่าลังเลที่จะทดลองใช้ตัวเลือกต่างๆ และแบ่งปันผลการทดลองของคุณในคอมเมนต์หรือบนฟอรั่มของ Aspose. Happy coding! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดซึ่งต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานครบถ้วนพร้อมคำอธิบายขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานแบบอื่นในโปรเจกต์ของคุณ + +- [แปลง PDF เป็น HTML ใน .NET ด้วย Aspose.PDF โดยไม่บันทึกภาพ](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [การแปลง PDF เป็น HTML ด้วย Aspose.PDF .NET: บันทึกภาพเป็น PNG ภายนอก](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [แปลง PDF เป็น HTML พร้อม URL ภาพแบบกำหนดเองด้วย Aspose.PDF .NET: คู่มือฉบับสมบูรณ์](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/thai/net/digital-signatures/_index.md index 18d6010aee..275227fed2 100644 --- a/pdf/thai/net/digital-signatures/_index.md +++ b/pdf/thai/net/digital-signatures/_index.md @@ -58,12 +58,16 @@ ### [ตรวจสอบลายเซ็น PDF ด้วย C# – คู่มือฉบับสมบูรณ์เพื่อยืนยันลายเซ็นดิจิทัล PDF](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) เรียนรู้วิธีตรวจสอบและยืนยันลายเซ็นดิจิทัลในไฟล์ PDF ด้วย C# อย่างละเอียดและปลอดภัย + ### [โหลดเอกสาร PDF ด้วย C# – แปลงเป็น PDF/X‑4 และแสดงรายการลายเซ็น](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) เรียนรู้วิธีโหลดไฟล์ PDF ด้วย C#, แปลงเป็น PDF/X‑4 และดึงรายการลายเซ็นดิจิทัลจากเอกสาร ### [ตรวจสอบลายเซ็น PDF ด้วย Aspose – แปลง PDF เป็น HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) เรียนรู้วิธีตรวจสอบลายเซ็น PDF แล้วแปลงไฟล์เป็น HTML ด้วย Aspose.PDF สำหรับ .NET +### [วิธีตรวจสอบ PDF ด้วย Aspose.PDF – ตรวจสอบความถูกต้องของลายเซ็น PDF ใน C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +เรียนรู้วิธีตรวจสอบความถูกต้องของลายเซ็น PDF ด้วย Aspose.PDF สำหรับ .NET ใน C# + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/thai/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..fb97b06e9c --- /dev/null +++ b/pdf/thai/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: วิธีตรวจสอบความถูกต้องของ PDF ด้วย Aspose.PDF และตรวจสอบลายเซ็นดิจิทัลของ + PDF ทำตามคู่มือขั้นตอนนี้เพื่อเช็คลายเซ็น PDF อย่างรวดเร็ว. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: th +lastmod: 2026-08-08 +og_description: วิธีตรวจสอบความถูกต้องของ PDF ด้วย Aspose.PDF เรียนรู้การตรวจสอบลายเซ็นดิจิทัลของ + PDF และตรวจสอบความถูกต้องของลายเซ็น PDF ด้วยไม่กี่บรรทัดของโค้ด C# +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: วิธีตรวจสอบความถูกต้องของ PDF – ตรวจสอบความถูกต้องของลายเซ็น PDF ด้วย Aspose.PDF + ใน C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: วิธีตรวจสอบความถูกต้องของ PDF ด้วย Aspose.PDF – ตรวจสอบความถูกต้องของลายเซ็น + PDF ใน C# +url: /th/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีตรวจสอบความถูกต้องของ PDF ด้วย Aspose.PDF – ตรวจสอบความถูกต้องของลายเซ็น PDF ใน C# + +หากคุณต้องการ **how to validate PDF** ไฟล์ที่มีลายเซ็นดิจิทัล บทเรียนนี้จะแสดงวิธีแก้ไขแบบครบวงจร คุณจะได้เรียนรู้วิธีโหลด PDF, สร้างตัวตรวจสอบใบรับรอง, และตรวจสอบความถูกต้องของลายเซ็น PDF ด้วย Aspose.PDF สำหรับ .NET + +การตรวจสอบลายเซ็นดิจิทัลของ PDF เป็นความต้องการทั่วไปสำหรับการปฏิบัติตามกฎระเบียบ, การออกใบแจ้งหนี้, และการแลกเปลี่ยนเอกสารที่ปลอดภัย. เมื่อจบคู่มือคุณจะสามารถตรวจสอบได้อย่างมั่นใจว่า PDF ที่ลงลายเซ็นนั้นเชื่อถือได้หรือไม่, และคุณจะเข้าใจวิธีจัดการกับกรณีขอบที่พบบ่อย เช่น ใบรับรองที่หายไปหรือหลายลายเซ็น. + +## Prerequisites + +ก่อนเริ่ม, ตรวจสอบให้แน่ใจว่าคุณมี: + +- .NET 6.0 หรือใหม่กว่า ติดตั้งแล้ว +- IDE เช่น Visual Studio 2022 (โปรแกรมแก้ไขใด ๆ ที่รองรับ C# ก็ใช้ได้) +- สำเนา **Aspose.PDF for .NET** ที่มีลิขสิทธิ์ (รุ่นทดลองฟรีใช้สำหรับการประเมินผลได้) +- ไฟล์ PDF ที่ลงลายเซ็น (`signed.pdf`) และหากลายเซ็นอ้างอิงกับ CA ส่วนตัว ให้ใช้ใบรับรองที่เชื่อถือได้ที่สอดคล้อง (`trustedCertificate.pfx`) + +ไม่จำเป็นต้องติดตั้งแพ็กเกจ NuGet เพิ่มเติมใด ๆ นอกจาก `Aspose.PDF`. + +## Step 1: Install Aspose.PDF + +เปิดเทอร์มินัลในโฟลเดอร์โปรเจกต์ของคุณและรัน: + +```bash +dotnet add package Aspose.PDF +``` + +คำสั่งนี้จะเพิ่มไลบรารี Aspose.PDF ล่าสุด, ซึ่งประกอบด้วยคลาส `Document` และ `CertificateValidator` ที่จะใช้ต่อไป. + +## Step 2: Load the PDF document + +การโหลด PDF เป็นการดำเนินการแรกที่คุณทำเมื่อคุณ **how to load pdf** อย่างโปรแกรมเมติก. ตัวสร้าง `Document` รับพาธไฟล์, สตรีม, หรืออาร์เรย์ไบต์. การใช้พาธเต็มทำให้ตัวอย่างชัดเจนขึ้น. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** วัตถุ `Document` แทนไฟล์ PDF ทั้งหมดในหน่วยความจำ. หากไม่ได้โหลดไฟล์, คุณจะไม่สามารถเข้าถึงคอลเลกชัน `Signatures` ซึ่งจำเป็นสำหรับการ **check pdf signature** ได้. + +## Step 3: Prepare the certificate validator + +ลายเซ็นดิจิทัลจะได้รับการเชื่อถือก็ต่อเมื่อใบรับรองที่ใช้ลงลายเซ็นเชื่อมต่อไปยังรากที่คุณเชื่อถือ. `CertificateValidator` ให้คุณชี้ Aspose.PDF ไปยังที่เก็บใบรับรองที่เชื่อถือหรือไฟล์ PFX เฉพาะ. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +หาก PDF ของคุณใช้ CA สาธารณะที่ Windows เชื่อถืออยู่แล้ว, คุณสามารถละ `certPath` และสร้าง `CertificateValidator` ด้วยคอนสตรัคเตอร์เริ่มต้น. การระบุ PFX ที่กำหนดเองมีประโยชน์สำหรับสภาพแวดล้อม PKI ภายใน. + +## Step 4: Validate the first digital signature + +PDF อาจมีหลายลายเซ็น. เพื่อความง่าย, บทเรียนนี้จะตรวจสอบลายเซ็นแรก (`Signatures[0]`). เมธอด `Validate` จะคืนค่า `true` เมื่อลายเซ็นยังคงสมบูรณ์ทางคริปโต **และ** ใบรับรองที่ใช้ลงลายเซ็นได้รับการเชื่อถือ. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**สิ่งที่เกิดขึ้นภายใน:** +- เมธอดตรวจสอบแฮชของเนื้อหาที่ลงลายเซ็นเทียบกับค่าลายเซ็น. +- สร้างโซ่ใบรับรองโดยใช้ตัวตรวจสอบที่กำหนด. +- สถานะการเพิกถอน (CRL/OCSP) จะถูกประเมินหากตัวตรวจสอบถูกตั้งค่าให้ทำเช่นนั้น. + +### Handling multiple signatures + +หาก PDF ของคุณมีลายเซ็นมากกว่าหนึ่งอัน, ให้วนลูปผ่านคอลเลกชัน `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +รูปแบบนี้ทำให้คุณ **check pdf signature** ได้บนทุกหน้าและรายงานผลลัพธ์แต่ละรายการ. + +## Step 5: Output the validation result + +สุดท้าย, เขียนผลลัพธ์ไปยังคอนโซล. ในโค้ดการผลิตคุณอาจบันทึกผลลัพธ์หรือโยนข้อยกเว้นเมื่อพบลายเซ็นที่ไม่ถูกต้อง. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +หรือ + +``` +Invalid +``` + +ข้อความจะแสดงผลบูลีนที่ `Validate` คืนค่า. ผลลัพธ์ “Invalid” อาจบ่งชี้ว่าเอกสารถูกดัดแปลง, ใบรับรองไม่เชื่อถือ, หรือใบรับรองที่ใช้ลงลายเซ็นหมดอายุ. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +หากคุณได้รับ `Invalid` และทราบว่าลายเซ็นควรเชื่อถือ, ตรวจสอบว่ารากใบรับรองที่ถูกต้องได้ถูกส่งให้ `CertificateValidator`. ใช้โอเวอร์โหลดที่รับ `X509Certificate2Collection` สำหรับรากหลายตัว. + +### 2. Signature with external references +บางลายเซ็นครอบคลุมเนื้อหาภายนอก (เช่นไฟล์แนบ). ตรวจสอบให้แน่ใจว่าแหล่งข้อมูลภายนอกเข้าถึงได้; มิฉะนั้นการตรวจสอบแฮชจะล้มเหลว. + +### 3. Time‑stamp validation +ลายเซ็นอาจรวมโทเค็นการประทับเวลา. เพื่อทำการตรวจสอบ, ตั้งค่าตัวตรวจสอบให้ตรวจสอบใบรับรองของหน่วยงานประทับเวลา (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +การโหลด PDF หลายร้อยหน้าอาจใช้หน่วยความจำมาก. หากคุณต้องการข้อมูลลายเซ็นเท่านั้น, ใช้ `PdfFileEditor` เพื่อดึงพจนานุกรมลายเซ็นโดยไม่ต้องเรนเดอร์หน้า. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +อินสแตนซ์ `Document` ไม่ปลอดภัยต่อหลายเธรด. สร้าง `Document` ใหม่ต่อเธรดเมื่อทำการตรวจสอบ PDF จำนวนมากพร้อมกัน. + +## Full, runnable example + +ด้านล่างเป็นโปรแกรมเต็มที่คุณสามารถคัดลอก, วาง, และรันได้หลังจากอัปเดตพาธไฟล์. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Running the program** จะพิมพ์บรรทัดสำหรับแต่ละลายเซ็น, แสดงอย่างชัดเจนว่า PDF ผ่านการ **validate pdf digital signature** หรือไม่. + +## Conclusion + +คุณได้เรียนรู้ **how to validate PDF** ไฟล์ที่มีลายเซ็นดิจิทัลโดยใช้ Aspose.PDF สำหรับ .NET. บทเรียนนี้ครอบคลุมการโหลด PDF, การกำหนดค่าตัวตรวจสอบใบรับรอง, การตรวจสอบความถูกต้องของลายเซ็น PDF, การจัดการหลายลายเซ็น, และการแก้ไขปัญหาที่พบบ่อย. + +ต่อไป, สำรวจหัวข้อที่เกี่ยวข้องเช่น **how to sign PDF**, **how to add timestamp tokens**, และ **how to extract signed content**. การขยายเหล่านี้จะช่วยให้คุณสร้างกระบวนการทำงานเอกสารที่ปลอดภัยแบบครบวงจรใน C#. + +--- + + +## What Should You Learn Next? + +บทเรียนต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้. แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มพร้อมคำอธิบายทีละขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานทางเลือกในโครงการของคุณเอง. + +- [วิธีตรวจสอบ PDF – ตรวจสอบลายเซ็น PDF ด้วย Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [วิธีดึงข้อมูลลายเซ็น PDF ด้วย Aspose.PDF .NET: คู่มือขั้นตอนโดยละเอียด](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [วิธีลบลายเซ็นดิจิทัลของ PDF ด้วย Aspose.PDF .NET | คู่มือฉบับสมบูรณ์](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/thai/net/document-conversion/_index.md index 9a69c5c493..d28d925794 100644 --- a/pdf/thai/net/document-conversion/_index.md +++ b/pdf/thai/net/document-conversion/_index.md @@ -58,6 +58,7 @@ | [XML เป็น PDF ตั้งค่าเส้นทางของรูปภาพ](./xml-to-pdfset-image-path/) | เรียนรู้วิธีการแปลง XML เป็น PDF ได้อย่างง่ายดายโดยใช้ Aspose.PDF สำหรับ .NET คำแนะนำโดยละเอียดนี้จะแนะนำคุณทีละขั้นตอนตั้งแต่การตั้งค่าจนถึงการเสร็จสมบูรณ์ - | [XPS เป็น PDF](./xps-to-pdf/) เรียนรู้วิธีแปลงไฟล์ XPS เป็น PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยบทช่วยสอนแบบทีละขั้นตอนนี้ เหมาะสำหรับนักพัฒนาและผู้ที่ชื่นชอบเอกสาร | - [แปลง PDF เป็น PDF/X‑4 ด้วย C# – บทช่วยสอน ASP.NET PDF ทีละขั้นตอน](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | เรียนรู้วิธีแปลงไฟล์ PDF เป็น PDF/X‑4 ด้วย Aspose.PDF สำหรับ .NET ในบทช่วยสอนแบบทีละขั้นตอนนี้ +- [บทแนะนำการแปลง PDFX4 – ตั้งค่ามาตรฐาน PDF และแปลง PDF ด้วย Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | เรียนรู้วิธีตั้งค่ามาตรฐาน PDF/X‑4 และแปลงไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/thai/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..df824d7490 --- /dev/null +++ b/pdf/thai/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,227 @@ +--- +category: general +date: 2026-08-08 +description: บทแนะนำการแปลง pdfx4 ที่แสดงวิธีตั้งมาตรฐาน PDF เป็น PDF/X‑4 และแปลง + PDF ด้วย Aspose เพื่อการแปลงรูปแบบที่เชื่อถือได้ +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: th +lastmod: 2026-08-08 +og_description: บทแนะนำการแปลง pdfx4 อธิบายวิธีตั้งค่ามาตรฐาน PDF เป็น PDF/X‑4 และทำการแปลง + PDF อย่างเชื่อถือได้โดยใช้ Aspose ใน C# +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: บทเรียนการแปลง pdfx4 – ตั้งค่ามาตรฐาน PDF และแปลง PDF ด้วย Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: บทเรียนการแปลง pdfx4 – ตั้งค่ามาตรฐาน PDF และแปลง PDF ด้วย Aspose +url: /th/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 conversion tutorial – ตั้งค่า PDF standard และแปลง PDF ด้วย Aspose + +หากคุณต้องการ **pdfx4 conversion tutorial** คู่มือนี้จะพาคุณผ่านกระบวนการทั้งหมดตั้งค่า PDF standard เป็น PDF/X‑4 และแปลง PDF ด้วย Aspose ไม่ว่าคุณจะกำลังเตรียมไฟล์พร้อมพิมพ์หรือทำให้เป็นไปตามมาตรฐานการเก็บรักษาระยะยาว คุณจะได้เรียนรู้ workflow **aspose pdf format conversion** ที่เชื่อถือได้ซึ่งทำงานกับ .NET 6 และรุ่นต่อ ๆ ไป + +บทเรียนนี้ครอบคลุมทุกอย่างตั้งแต่การตั้งค่าโปรเจกต์จนถึงการจัดการกรณีขอบเช่นไฟล์ต้นทางหายหรือฟีเจอร์ที่ไม่รองรับ เมื่ออ่านจบบทความคุณจะมีโปรแกรม C# ที่ทำงานอิสระซึ่งสร้างไฟล์ที่สอดคล้องกับ PDF/X‑4 พร้อมใช้ใน workflow ต่อไป + +## Prerequisites + +ก่อนเริ่มทำงาน โปรดตรวจสอบว่าคุณมี: + +- .NET 6 SDK หรือใหม่กว่า ([download here](https://dotnet.microsoft.com/download)) +- ใบอนุญาต Aspose.PDF for .NET ที่ถูกต้อง (รุ่นทดลองฟรีใช้สำหรับทดสอบได้) +- Visual Studio 2022, VS Code หรือ IDE ใด ๆ ที่รองรับการพัฒนา .NET +- ไฟล์ PDF ต้นฉบับที่ต้องการแปลง (วางไว้ในโฟลเดอร์ที่รู้ตำแหน่ง) + +ข้อกำหนดเหล่านี้ทำให้โค้ดทำงานได้โดยไม่ต้องตั้งค่าเพิ่มเติม + +## Step 1: Create a new .NET console project + +เปิดเทอร์มินัลและรันคำสั่งต่อไปนี้เพื่อสร้างแอปคอนโซลชื่อ `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +เพิ่มแพคเกจ NuGet ของ Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +แพคเกจ `Aspose.Pdf` จะให้คลาส `Document` และ `PdfFormatConversionOptions` ที่จำเป็นสำหรับการ **convert pdf pdfx4** + +## Step 2: Write the conversion code + +เปิดไฟล์ `Program.cs` (หรือ `Program.cs` หากคุณใช้ top‑level statements) แล้วแทนที่เนื้อหาเดิมด้วยตัวอย่างเต็มด้านล่าง โค้ดนี้สาธิตการ **set pdf standard** เป็น PDF/X‑4, ทำการแปลง, และรวมการจัดการข้อผิดพลาดสำหรับปัญหาที่พบบ่อย + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Why each part matters + +- **Argument validation** ป้องกันโปรแกรมจากการหยุดทำงานเมื่อผู้ใช้ลืมระบุพาธไฟล์ +- **`Document` loading** จะโยนข้อยกเว้นที่ชัดเจนหากไฟล์ PDF ต้นทางหายหรือเสียหาย ซึ่งเป็นสิ่งสำคัญสำหรับประสบการณ์ **convert pdf using aspose** ที่มั่นคง +- **`PdfFormatConversionOptions`** คือที่คุณ **set pdf standard** โดยกำหนดค่า `PdfStandard.PdfX4` Aspose จะปรับสี, ฝังฟอนต์ที่จำเป็น, และเขียนเมตาดาต้า PDF/X‑4 ให้โดยอัตโนมัติ +- **`FontEmbeddingMode.EmbedAll`** ทำให้ฟอนต์ทั้งหมดที่ใช้ใน PDF ต้นทางถูกฝังไว้ ซึ่งเป็นข้อกำหนดทั่วไปสำหรับ PDF ที่พร้อมพิมพ์ +- **`doc.Convert`** ทำการ **aspose pdf format conversion** จริง ๆ เมธอดนี้จะเขียนไฟล์ใหม่ในหนึ่งขั้นตอน ทำให้ workflow ง่ายขึ้น + +## Step 3: Run the converter + +คอมไพล์โปรเจกต์และเรียกใช้พร้อมพาธต้นทางและปลายทาง: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +หากทุกอย่างทำงานได้ คอนโซลจะแสดงผล: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +ตอนนี้คุณสามารถเปิด `output_pdfx4.pdf` ด้วยโปรแกรมดู PDF ใด ๆ ที่รองรับ PDF/X‑4 (เช่น Adobe Acrobat Pro) และตรวจสอบความสอดคล้องผ่าน *File → Properties → Standards* + +## Step 4: Verify PDF/X‑4 compliance (optional) + +สำหรับ pipeline การผลิต คุณอาจต้องการตรวจสอบผลลัพธ์โดยอัตโนมัติ Aspose มีคลาส `PdfComplianceChecker` (อยู่ในแพคเกจ `Aspose.Pdf`) ที่สามารถใช้ได้ดังนี้: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +การรันสคริปต์นี้หลังการแปลงจะให้ผลลัพธ์แบบผ่าน/ไม่ผ่าน ซึ่งเป็นประโยชน์สำหรับ CI/CD pipelines อัตโนมัติ + +## Step 5: Common pitfalls and best‑practice tips + +| Issue | Why it happens | How to avoid it | +|-------|----------------|-----------------| +| Missing fonts in the source PDF | ฟอนต์ถูกอ้างอิงแต่ไม่ได้ฝัง ทำให้เกิดคำเตือนระหว่างการแปลง | ใช้ `FontEmbeddingMode.EmbedAll` ตามที่แสดงข้างต้น | +| Source PDF contains transparent objects not allowed in PDF/X‑4 | PDF/X‑4 ไม่อนุญาตการผสมโปร่งใสบางประเภท | ทำการ pre‑process PDF ด้วย `doc.ProcessTransparentObjects()` ก่อนแปลง | +| Large files cause OutOfMemoryException | เอกสารทั้งหมดถูกโหลดเข้าเมมโมรี | สตรีมไฟล์ต้นทางด้วย `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| License not applied | เวอร์ชันทดลองใส่ลายน้ำ | เรียก `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` ก่อนใช้ API ของ Aspose ใด ๆ | + +การนำเคล็ดลับเหล่านี้ไปใช้จะทำให้ประสบการณ์ **convert pdf pdfx4** ราบรื่นในสภาพแวดล้อมการผลิต + +## Step 6: Extending the tutorial + +เมื่อคุณเชี่ยวชาญ **pdfx4 conversion tutorial** พื้นฐานแล้ว สามารถต่อยอดได้ดังนี้: + +- **Batch conversion**: วนลูปผ่านโฟลเดอร์ของ PDF และแปลงแต่ละไฟล์เป็น PDF/X‑4 +- **Metadata injection**: เพิ่มเมตาดาต้า XMP ที่ต้องการโดยโรงพิมพ์เฉพาะ +- **Color profile management**: แนบ ICC profile ด้วย `doc.ColorSpace = ColorSpace.DeviceRGB;` ก่อนทำการแปลง + +ส่วนขยายทั้งหมดนี้สร้างบนพื้นฐาน **aspose pdf format conversion** ที่แสดงในที่นี้ + +## Conclusion + +**pdfx4 conversion tutorial** นี้ได้สาธิตวิธี **set pdf standard** เป็น PDF/X‑4, ทำการ **convert pdf using Aspose** อย่างเชื่อถือได้, และตรวจสอบผลลัพธ์ คุณจึงมีโปรแกรม C# ที่ทำงานสมบูรณ์พร้อมนำไปผสานใน pipeline การประมวลผลเอกสารขนาดใหญ่หรือใช้เป็นยูทิลิตี้อิสระ ทดลองทำ batch processing, การจัดการเมตาดาต้า หรือมาตรฐาน PDF อื่น ๆ (PDF/A‑2b, PDF/UA) เพื่อเพิ่มพูนความเชี่ยวชาญใน **aspose pdf format conversion** + +Happy coding, and enjoy the confidence that comes with PDF/X‑4 compliant output! + +## What Should You Learn Next? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งรวมโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโปรเจกต์ของคุณ + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/thai/net/document-creation/_index.md b/pdf/thai/net/document-creation/_index.md index 91da3f61eb..12c6d278e7 100644 --- a/pdf/thai/net/document-creation/_index.md +++ b/pdf/thai/net/document-creation/_index.md @@ -73,9 +73,13 @@ ### [สร้างเอกสาร PDF ด้วย Aspose.PDF – เพิ่มหน้า รูปร่างและบันทึก](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) เรียนรู้วิธีเพิ่มหน้า รูปร่างและบันทึกไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET + ### [สร้างเอกสาร PDF ด้วย Aspose.PDF – คำแนะนำทีละขั้นตอน](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) เรียนรู้วิธีสร้างเอกสาร PDF อย่างละเอียดด้วย Aspose.PDF ผ่านขั้นตอนที่ชัดเจนและตัวอย่างโค้ด +### [สร้างเอกสาร PDF ด้วย C# และ Aspose.PDF](./create-pdf-document-in-c-with-aspose-pdf/) +เรียนรู้วิธีสร้างไฟล์ PDF ด้วย C# โดยใช้ Aspose.PDF อย่างละเอียด + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/thai/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..2bc4d4552b --- /dev/null +++ b/pdf/thai/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: สร้างเอกสาร PDF ด้วย C# โดยใช้ Aspose.Pdf เรียนรู้วิธีเพิ่มหน้าเปล่าใน + PDF, เพิ่มย่อหน้าใน PDF, และกำหนดตำแหน่งข้อความใน PDF ด้วยพิกัดที่แม่นยำ +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: th +lastmod: 2026-08-08 +og_description: สร้างเอกสาร PDF ด้วย C# อย่างรวดเร็ว บทเรียนนี้แสดงวิธีเพิ่มหน้า PDF + ว่าง, เพิ่มย่อหน้าใน PDF, และกำหนดตำแหน่งข้อความใน PDF ด้วย Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: สร้างเอกสาร PDF ด้วย C# และ Aspose.Pdf – คู่มือเต็ม +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: สร้างเอกสาร PDF ใน C# ด้วย Aspose.Pdf +url: /th/net/document-creation/create-pdf-document-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** ด้วยโปรแกรม, คู่มือนี้จะแสดงให้คุณเห็นอย่างละเอียด โดยใช้ Aspose.Pdf สำหรับ .NET คุณสามารถเพิ่มหน้า pdf ว่าง, แทรกย่อหน้าเข้าไปใน pdf, และกำหนดตำแหน่งข้อความใน pdf ด้วยความแม่นยำระดับพิกเซล—ทั้งหมดในไม่กี่บรรทัดของโค้ด C# + +คุณจะจบการสอนด้วยไฟล์ PDF ที่ทำงานได้เต็มรูปแบบซึ่งมีบันทึกที่วางไว้ที่พิกัดที่คุณระบุ ไม่ต้องใช้เครื่องมือภายนอก ไม่ต้องแก้ไขด้วยมือ—เพียงโค้ดที่สะอาดและทำซ้ำได้ที่คุณสามารถใส่ลงในโครงการ .NET ใดก็ได้ + +## สิ่งที่คุณจะได้เรียนรู้ + +* วิธี **สร้างเอกสาร pdf** ด้วย Aspose.Pdf +* วิธีที่ถูกต้องในการ **เพิ่มหน้า pdf ว่าง** และเหตุผลว่าทำไมต้องมีหน้าอยู่ก่อนจึงจะเพิ่มเนื้อหาได้ +* วิธี **เพิ่มย่อหน้าเข้าไปใน pdf** และแนบแท็กที่กำหนดเอง (มีประโยชน์สำหรับการสกัดหรือจัดรูปแบบในภายหลัง) +* เทคนิคการ **กำหนดตำแหน่งข้อความใน pdf** ด้วยคลาส `Position` +* วิธีบันทึกผลลัพธ์ลงดิสก์และตรวจสอบผลลัพธ์ + +**Prerequisites** + +* .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานได้กับ .NET Framework 4.7+) +* ไลเซนส์ Aspose.Pdf for .NET ที่ถูกต้องหรือคีย์ประเมินผลฟรี +* IDE เช่น Visual Studio 2022 หรือ VS Code พร้อมส่วนขยาย C# + +> **เคล็ดลับมืออาชีพ:** หากคุณใช้การประเมินผลฟรี PDF ที่สร้างขึ้นจะมีลายน้ำขนาดเล็ก ลงทะเบียนไลเซนส์เพื่อเอาออก + +## วิธีสร้างเอกสาร pdf ด้วย Aspose.Pdf + +ขั้นตอนแรกคือการสร้างอินสแตนซ์ของคลาส `Document` วัตถุนี้แทนไฟล์ PDF ทั้งหมดและให้คุณเข้าถึงหน้า, ทรัพยากร, และตัวเลือกการบันทึก + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +การสร้างเอกสาร **ไม่** เขียนอะไรลงดิสก์ในขณะนี้; มันเพียงเตรียมการแสดงผลในหน่วยความจำที่คุณสามารถจัดการต่อไป วิธีนี้ทำให้ API เร็วและใช้หน่วยความจำน้อย + +## เพิ่มหน้า pdf ว่างโดยใช้ Aspose.Pdf + +PDF ต้องมีอย่างน้อยหนึ่งหน้า ก่อนที่คุณจะวางเนื้อหาใด ๆ การเพิ่มหน้าเปล่าเป็นการเรียกเมธอดเดียว: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +เมธอด `Add()` จะสร้างหน้าที่มีขนาดเริ่มต้น (A4) และแนวตั้ง (portrait) หากคุณต้องการขนาดอื่น ให้ส่งอินสแตนซ์ `PageSize` ไปยัง `Add()` + +## เพิ่มย่อหน้าเข้าไปใน pdf และตั้งค่าบันทึก + +ตอนนี้หน้ามีอยู่แล้ว คุณสามารถสร้างอ็อบเจกต์ `Paragraph` ที่เก็บข้อความที่มองเห็นได้ ย่อหน้ายังสามารถบรรจุแท็กที่กำหนดเอง ซึ่งเป็นประโยชน์เมื่อคุณต้องการค้นหาหรือจัดรูปแบบองค์ประกอบนั้นในภายหลังโดยโปรแกรม + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### ทำไมต้องใช้แท็ก? + +แท็กเป็นเมตาดาต้าที่เดินทางพร้อมกับองค์ประกอบ PDF สามารถเรียกค้นได้ในภายหลังด้วย `Document.FindObject()` หรือใช้โดยโปรเซสเซอร์ PDF ที่อาศัยแท็กสำหรับการเข้าถึงหรือการทำดัชนี + +## กำหนดตำแหน่งข้อความใน pdf ด้วยพิกัดที่แม่นยำ + +การวางตำแหน่งเริ่มต้นของย่อหน้าคือมุมบน‑ซ้ายของขอบหน้ากระดาษ เพื่อย้ายข้อความไปยังตำแหน่งที่ต้องการ ให้ตั้งค่าคุณสมบัติ `Position` บนแท็กของย่อหน้า: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +พิกัดวัดเป็นจุด (1 point = 1/72 inch) จุดกำเนิด (0,0) อยู่ที่มุมล่าง‑ซ้ายของหน้า ซึ่งสอดคล้องกับเครื่องยนต์เรนเดอร์ PDF ส่วนใหญ่ ปรับค่า `X` และ `Y` ให้ตรงกับการจัดวางของคุณ + +หลังจากกำหนดตำแหน่งแล้ว ให้เพิ่มย่อหน้าไปยังคอลเลกชันของหน้า: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## บันทึกเอกสาร pdf + +สุดท้ายให้เขียน PDF ที่อยู่ในหน่วยความจำลงไฟล์ คุณสามารถระบุเส้นทางออก, รูปแบบ, และแม้แต่ตัวเลือกการเข้ารหัสได้ + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +เมื่อโปรแกรมทำงานเสร็จ `output.pdf` จะมีหน้าเดียวพร้อมข้อความ **Important note** ที่วางอยู่ใกล้มุมบน‑ขวา (X = 50, Y = 750) เปิดไฟล์ในโปรแกรมอ่าน PDF ใดก็ได้เพื่อยืนยันตำแหน่ง + +![เอกสาร PDF ที่สร้างด้วย C# Aspose.Pdf แสดงบันทึกที่กำหนดตำแหน่ง](https://example.com/images/generated-pdf.png) + +*ข้อความแทนภาพ: เอกสาร PDF ที่สร้างด้วย C# Aspose.Pdf แสดงบันทึกที่กำหนดตำแหน่ง* (รวมคีย์เวิร์ดหลัก) + +## ตัวอย่างเต็มที่สามารถรันได้ + +รวมทุกส่วนเข้าด้วยกัน นี่คือตัวอย่างแอปพลิเคชันคอนโซลที่คุณสามารถคัดลอก, สร้าง, และรันได้: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** เมื่อคุณรันโปรแกรม: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +การเปิด `output.pdf` จะเห็นหน้าเดียวพร้อมข้อความ **Important note** ที่วางอยู่ที่พิกัดที่คุณระบุ + +## ความแปรผันทั่วไปและกรณีขอบ + +| สถานการณ์ | สิ่งที่ต้องเปลี่ยน | เหตุผล | +|----------|----------------|--------| +| **ขนาดหน้าต่างแตกต่าง** | `pdfDocument.Pages.Add(PageSize.A5)` | หน้าขนาดเล็กช่วยลดขนาดไฟล์และเหมาะกับหน้าจอมือถือ | +| **หลายบันทึก** | วนลูปผ่านคอลเลกชันของสตริงและสร้าง `Paragraph` สำหรับแต่ละรายการ, เพิ่มค่า `Y` | ทำให้สามารถสร้างบันทึกหลายรายการแบบรายการหัวข้อได้ | +| **อักขระ Unicode** | ตรวจสอบให้ไฟล์ต้นฉบับบันทึกเป็น UTF-8 และตั้งค่า `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf รองรับ Unicode โดยตรง แต่ต้องให้การเข้ารหัสไฟล์ตรงกัน | +| **PDF ป้องกันด้วยรหัสผ่าน** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | เพิ่มความปลอดภัยให้กับบันทึกที่เป็นความลับ | +| **ผลลัพธ์ความละเอียดสูง** | ตั้งค่า `pdfDocument.PageInfo.Width` และ `Height` ให้ค่ามากกว่าก่อนเพิ่มเนื้อหา | มีประโยชน์สำหรับการพิมพ์ PDF ขนาดใหญ่ | + +## เคล็ดลับสำหรับการใช้งานในสภาพแวดล้อมจริง + +* **ใช้อินสแตนซ์ `Document` ซ้ำ** เมื่อสร้าง PDF จำนวนมากในคำขอเดียวเพื่อลดแรงกดดันต่อ GC +* **ทำลายอ็อบเจกต์** (`pdfDocument.Dispose()`) หากคุณสร้างเอกสารหลายไฟล์ในลูป +* **ตรวจสอบพิกัด**: ค่า `Y` ไม่สามารถเกินความสูงของหน้า มิฉะนั้นข้อความจะถูกตัด +* **ใช้ `TextFragmentAbsorber`** เพื่อสกัดบันทึกตามแท็ก (`/P`) หากต้องการอ่านเนื้อหากลับมา + +## สรุป + +คุณได้เรียนรู้วิธี **สร้างเอกสาร pdf** ด้วย Aspose.Pdf, **เพิ่มหน้า pdf ว่าง**, **เพิ่มย่อหน้าเข้าไปใน pdf**, **เพิ่มบันทึกลงใน pdf**, และ **กำหนดตำแหน่งข้อความใน pdf** อย่างแม่นยำ ตัวอย่างครบถ้วนแสดงขั้นตอนทำงานที่สะอาดและทำซ้ำได้ซึ่งคุณสามารถต่อยอดสำหรับใบแจ้งหนี้, รายงาน, หรือสถานการณ์อัตโนมัติเอกสารใด ๆ + +ต่อไปสำรวจหัวข้อที่เกี่ยวข้องเช่น **เพิ่มรูปภาพลงใน pdf**, **สร้างตารางด้วย Aspose.Pdf**, หรือ **ใช้ลายเซ็นดิจิทัล** แต่ละหัวข้อสร้างบนแนวคิดหลักเดียวกันที่อธิบายไว้ที่นี่ ทำให้คุณพร้อมรับมือกับงานสร้าง PDF ที่ซับซ้อนยิ่งขึ้น + +Happy coding! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโครงการของคุณ + +- [สร้างเอกสาร PDF ด้วย Aspose.PDF – เพิ่มหน้า, รูปร่าง & บันทึก](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [วิธีเพิ่มหน้าว่างที่ส่วนท้ายของ PDF ด้วย Aspose.PDF for .NET | คู่มือขั้นตอนโดยละเอียด](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [วิธีเพิ่มสแตมป์ข้อความลงใน 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/thai/net/images-graphics/_index.md b/pdf/thai/net/images-graphics/_index.md index 855fcca3a0..c6687d1b27 100644 --- a/pdf/thai/net/images-graphics/_index.md +++ b/pdf/thai/net/images-graphics/_index.md @@ -164,6 +164,9 @@ ### [ตั้งค่าพื้นหลังรูปภาพใน PDF โดยใช้ Aspose.PDF สำหรับ .NET: คู่มือฉบับสมบูรณ์](./aspose-pdf-net-set-image-backgrounds/) เรียนรู้วิธีปรับปรุงเอกสาร PDF ของคุณโดยการตั้งค่าพื้นหลังรูปภาพโดยใช้ Aspose.PDF สำหรับ .NET คู่มือนี้ครอบคลุมถึงเคล็ดลับการตั้งค่า การใช้งาน และการปรับแต่ง +### [ตั้งค่าความโปร่งใสของ PDF ใน C# ด้วย Aspose.PDF – คู่มือฉบับสมบูรณ์](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +เรียนรู้วิธีตั้งค่าความโปร่งใสของไฟล์ PDF ด้วย Aspose.PDF ใน C# อย่างละเอียด + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/thai/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..0bee61aa2c --- /dev/null +++ b/pdf/thai/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,249 @@ +--- +category: general +date: 2026-08-08 +description: ตั้งค่าความทึบของ PDF ใน C# ด้วย Aspose.PDF – เรียนรู้วิธีปรับความโปร่งใสของเส้นและการเติมด้วยไม่กี่บรรทัดของโค้ด. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: th +lastmod: 2026-08-08 +og_description: ตั้งค่าความทึบของ PDF ใน C# อย่างรวดเร็ว คู่มือนี้จะแสดงวิธีการปรับความโปร่งใสของเส้นและการเติมโดยใช้ + API สถานะกราฟิกของ Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: ตั้งค่าความทึบของ PDF ใน C# ด้วย Aspose.PDF – คู่มือทีละขั้นตอน +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: ตั้งค่าความทึบของ PDF ใน C# ด้วย Aspose.PDF – คู่มือเต็ม +url: /th/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ตั้งค่าความทึบของ PDF ใน C# ด้วย Aspose.PDF – คู่มือเต็ม + +หากคุณต้องการ **ตั้งค่าความทึบของ PDF** สำหรับการวาดแบบเฉพาะเจาะจง บทแนะนำนี้จะแสดงวิธีทำด้วย Aspose.PDF for .NET อย่างชัดเจน ไม่ว่าคุณจะสร้างลายน้ำ, ชั้นทึบครึ่งหนึ่ง, หรือกราฟิกแบบกำหนดเอง คุณจะได้เรียนรู้วิธีที่กระชับและพร้อมใช้งานในสภาพแวดล้อมการผลิต + +ในส่วนต่อไปนี้ เราจะครอบคลุมทุกขั้นตอนตั้งแต่การโหลด PDF, การแก้ไข graphics state, การเพิ่มการกำหนดความทึบใหม่, จนถึงการบันทึกผลลัพธ์ ไม่ต้องอ้างอิงเอกสารภายนอก—เพียงโค้ดด้านล่างและคำอธิบายสั้น ๆ ของแต่ละขั้นตอน + +## ข้อกำหนดเบื้องต้น + +ก่อนเริ่มทำงาน โปรดตรวจสอบว่าคุณมี: + +* .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานกับ .NET Framework 4.7+) +* ไลเซนส์ Aspose.PDF for .NET ที่ถูกต้อง (รุ่นทดลองฟรีใช้สำหรับการประเมิน) +* ไฟล์ PDF เข้า (`input.pdf`) อยู่ในโฟลเดอร์ที่คุณสามารถอ่าน/เขียนได้ +* Visual Studio 2022 หรือ IDE C# ใด ๆ ที่คุณชอบ + +## ขั้นตอนที่ 1 – โหลดเอกสาร PDF (Aspose.PDF for .NET) + +งานแรกคือการเปิด PDF ที่มีอยู่ Aspose.PDF แทนไฟล์ PDF ด้วยคลาส `Document` ซึ่งให้การเข้าถึงเต็มรูปแบบต่อหน้า, แหล่งข้อมูล, และอ็อบเจกต์ระดับต่ำ + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*ทำไมจึงสำคัญ*: การโหลดเอกสารจะสร้างโมเดลในหน่วยความจำที่คุณสามารถแก้ไขได้อย่างปลอดภัย คำสั่ง `using` ทำให้การจัดการไฟล์ถูกปล่อยอัตโนมัติหลังจากเสร็จสิ้น + +## ขั้นตอนที่ 2 – ดึงหน้าที่ต้องการแก้ไขเป็นหน้าแรก + +ความทึบถูกกำหนดต่อหน้าโดยผ่านพจนานุกรมทรัพยากรของหน้า ที่นี่เราตั้งเป้าหมายที่หน้าแรก แต่คุณสามารถวนลูป `doc.Pages` เพื่อทำงานเป็นชุดได้ + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*ทำไมจึงสำคัญ*: แต่ละหน้ามีคอลเลกชัน `Resources` ของตนเอง ซึ่งเก็บ graphics states, ฟอนต์, รูปภาพ ฯลฯ การแก้ไขหน้าที่ถูกต้องทำให้เอฟเฟกต์ความทึบปรากฏตรงที่คุณคาดหวัง + +## ขั้นตอนที่ 3 – เปิดพจนานุกรมทรัพยากรของหน้าเพื่อแก้ไข + +Aspose.PDF มีตัวช่วย `DictionaryEditor` เพื่อจัดการพจนานุกรม PDF ระดับต่ำโดยไม่ทำให้โครงสร้างไฟล์เสียหาย + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*ทำไมจึงสำคัญ*: การแก้ไขพจนานุกรม COS (Content Object System) ของ PDF โดยตรงเป็นวิธีเดียวที่สามารถแทรก graphics state กำหนดเองได้ ตัวแก้ไขทำหน้าที่เป็นชั้นนามธรรมของไวยากรณ์ระดับต่ำในขณะที่ทำให้ PDF ยังคงเป็นรูปแบบที่ถูกต้อง + +## ขั้นตอนที่ 4 – ดึงพจนานุกรม ExtGState ที่มีอยู่ + +พจนานุกรม **ExtGState** (external graphics state) เก็บค่าความทึบ, โหมดการผสม, ความกว้างเส้น ฯลฯ หากไม่มี Aspose.PDF จะสร้างให้โดยอัตโนมัติเมื่อคุณเพิ่มรายการใหม่ + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*ทำไมจึงสำคัญ*: หากไม่มีรายการ `ExtGState` คุณจะไม่สามารถอ้างอิงความทึบที่กำหนดเองในสตรีมเนื้อหาของหน้าได้ ขั้นตอนนี้รับประกันว่าคอนเทนเนอร์มีอยู่ + +## ขั้นตอนที่ 5 – สร้าง graphics state ใหม่พร้อมความทึบที่ต้องการ + +graphics state คือชุดของพารามิเตอร์ สำหรับความทึบเราตั้งค่า `CA` (stroke opacity) และ `ca` (fill opacity) พร้อมกำหนดโหมดการผสม (`BM`) เพื่อควบคุมว่าพิกเซลโปร่งใสจะโต้ตอบกับเนื้อหาพื้นฐานอย่างไร + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*ทำไมจึงสำคัญ*: `CA` และ `ca` รับค่าตั้งแต่ 0 (โปร่งใสเต็ม) ถึง 1 (ทึบเต็ม) ปรับตัวเลขเหล่านี้เพื่อให้ได้เอฟเฟกต์ที่ต้องการ โหมดการผสม `"Normal"` เป็นค่าที่ใช้บ่อยที่สุด แต่คุณสามารถทดลอง `"Multiply"` หรือ `"Screen"` เพื่อสร้างเอฟเฟกต์ศิลปะ + +## ขั้นตอนที่ 6 – ลงทะเบียน graphics state ใหม่ในคอลเลกชัน ExtGState + +แต่ละ graphics state ต้องมีชื่อที่ไม่ซ้ำ (เช่น `GS0`) เราเพิ่มพจนานุกรมของเราไปยังคอลเลกชัน `ExtGState` แล้วอัปเดตทรัพยากรของหน้า + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*ทำไมจึงสำคัญ*: ด้วยการตั้งชื่อ state (`GS0`) คุณสามารถอ้างอิงมันต่อไปในสตรีมเนื้อหาของหน้าโดยใช้โอเปอเรเตอร์ `gs` หากต้องการหลายระดับความทึบ ให้สร้างรายการเพิ่มเติม (`GS1`, `GS2`, …) + +## ขั้นตอนที่ 7 – ใช้ graphics state กับคำสั่งการวาด (ตามต้องการ) + +หากต้องการใช้ความทึบทันทีกับเนื้อหาที่มีอยู่ คุณต้องแก้ไขสตรีมเนื้อหาของหน้า ตัวอย่างด้านล่างจะแสดงการวาดสี่เหลี่ยมครึ่งโปร่งใสโดยใช้ state ที่สร้างใหม่ + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*ทำไมจึงสำคัญ*: โอเปอเรเตอร์ `gs` (`SetGraphicsState`) บอกเรนเดอร์ของ PDF ให้ใช้ค่าความทึบที่กำหนดใน `GS0` สำหรับคำสั่งการวาดต่อไป `grestore`/`gsave` คู่กันทำให้ส่วนอื่นของหน้าไม่ถูกกระทบ + +## ขั้นตอนที่ 8 – บันทึก PDF ที่แก้ไขแล้ว + +สุดท้าย ให้เขียนเอกสารที่อัปเดตกลับไปยังดิสก์ + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*ทำไมจึงสำคัญ*: การบันทึกทำให้การเปลี่ยนแปลงทั้งหมดเสร็จสมบูรณ์ ฝัง graphics state ใหม่ และสร้าง PDF ที่ผู้ชมใด ๆ (Adobe Acrobat, Chrome ฯลฯ) สามารถแสดงผลพร้อมความโปร่งใสตามที่ตั้งค่าไว้ + +### ผลลัพธ์ที่คาดหวัง + +เปิด `output.pdf` ในโปรแกรมดู PDF คุณควรเห็นสี่เหลี่ยมสีแดงที่เส้นขอบมีความทึบ 80 % และส่วนเติมเต็มมีความทึบ 40 % ผสมอย่างราบรื่นกับเนื้อหาพื้นหลังใด ๆ ส่วนที่เหลือของหน้าจะคงเดิม + +## ความแตกต่างทั่วไปและกรณีขอบ + +| สถานการณ์ | สิ่งที่ต้องเปลี่ยน | เหตุผล | +|-----------|----------------|--------| +| **หลายระดับความทึบ** | สร้าง graphics state เพิ่ม (`GS1`, `GS2`, …) พร้อมค่า `CA`/`ca` ต่างกันและอ้างอิงตามต้องการ | ให้การควบคุมละเอียดต่อองค์ประกอบต่าง ๆ | +| **โหมดการผสมที่ต่างกัน** | ใช้ `"Multiply"`, `"Screen"`, `"Overlay"` ฯลฯ แทน `"Normal"` ในรายการ `BM` | สร้างเอฟเฟกต์การผสมศิลปะ | +| **นำไปใช้กับสตรีมเนื้อหาที่มีอยู่** | แทรก `SetGraphicsState` ก่อนโอเปอเรเตอร์การวาดที่ต้องการ | ป้องกันความทึบที่ไม่ต้องการบนวัตถุอื่น | +| **PDF ขนาดใหญ่** | ประมวลผลหน้าในลูป `foreach (Page p in doc.Pages)` เพื่อหลีกเลี่ยงการโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำพร้อมกัน | เพิ่มประสิทธิภาพและลดภาระหน่วยความจำ | +| **ไม่มี ExtGState อยู่แล้ว** | โค้ดในขั้นตอน 4 จะสร้างให้หากไม่มี ดังนั้นไม่ต้องจัดการเพิ่มเติม | รับประกันว่าพจนานุกรมมีอยู่ | + +### เคล็ดลับพิเศษ + +เมื่อคุณเพิ่ม graphics state กำหนดเองหลายรายการ ควรรักษาการตั้งชื่อให้สอดคล้อง (`GS0`, `GS1`, …) และบันทึกวัตถุประสงค์ของแต่ละรายการในบล็อกคอมเมนต์ วิธีนี้ทำให้การบำรุงรักษาในอนาคตง่ายขึ้น โดยเฉพาะในโครงการที่ทำงานร่วมกัน + +## ตัวอย่างเต็มที่สามารถรันได้ + +ด้านล่างเป็นโปรแกรมสมบูรณ์ที่คุณสามารถคัดลอก, วาง, และรันได้ รวมทุกขั้นตอน, คำสั่ง `using` ที่จำเป็น, และคอมเมนต์ + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +รันโปรแกรม, + +## สิ่งที่คุณควรเรียนต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีโค้ดตัวอย่างทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานแบบอื่นในโปรเจกต์ของคุณเอง + +- [ตั้งค่าพื้นหลังรูปภาพใน PDF ด้วย Aspose.PDF for .NET: คู่มือฉบับสมบูรณ์](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [วิธีสร้างเส้นประใน PDF ด้วย Aspose.PDF for .NET: คู่มือขั้นตอนต่อขั้นตอน](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [วิธีปรับแต่ง PDF ด้วย Aspose.PDF for .NET: ตั้งค่าขอบกระดาษและวาดเส้น](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..616f8d6405 100644 --- a/pdf/thai/net/programming-with-forms/_index.md +++ b/pdf/thai/net/programming-with-forms/_index.md @@ -26,7 +26,7 @@ | [กล่องคอมโบ](./combo-box/) เรียนรู้วิธีการเพิ่ม Combo Box ลงใน PDF โดยใช้ Aspose.PDF สำหรับ .NET ปฏิบัติตามคำแนะนำทีละขั้นตอนของเราเพื่อสร้างแบบฟอร์ม PDF แบบโต้ตอบได้อย่างง่ายดาย - | [สร้างเอกสาร](./create-doc/) | เรียนรู้การสร้างเอกสาร PDF แบบโต้ตอบพร้อมปุ่มตัวเลือกโดยใช้ Aspose.PDF สำหรับ .NET ในคู่มือทีละขั้นตอนที่ครอบคลุมนี้ - [ลบฟิลด์ฟอร์มในเอกสาร PDF](./delete-form-field/) | เรียนรู้วิธีการลบฟิลด์ฟอร์มในเอกสาร PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยคู่มือทีละขั้นตอนนี้ เหมาะสำหรับนักพัฒนาและผู้ที่ชื่นชอบ PDF - -| [กำหนดฟิลด์ที่จำเป็นในแบบฟอร์ม PDF](./determine-required-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 ในบทช่วยสอนทีละขั้นตอนนี้ - [กรอกช่องฟอร์ม PDF](./fill-form-field/) เรียนรู้วิธีการกรอกช่องฟอร์ม PDF โดยใช้ Aspose.PDF สำหรับ .NET ด้วยบทช่วยสอนแบบทีละขั้นตอนนี้ ทำให้กระบวนการทำงาน PDF ของคุณเป็นแบบอัตโนมัติได้อย่างง่ายดาย - | [กรอก XFAField](./fill-xfafields/) | เรียนรู้วิธีการกรอกฟิลด์ XFA ใน PDF โดยใช้โปรแกรม Aspose.PDF สำหรับ .NET ด้วยบทช่วยสอนแบบทีละขั้นตอนนี้ ค้นพบเครื่องมือจัดการ PDF ที่เรียบง่ายและทรงพลัง - @@ -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 ด้วย Aspose.PDF – คู่มือฉบับสมบูรณ์](./save-pdf-document-with-aspose-pdf-complete-guide/) | เรียนรู้วิธีบันทึกไฟล์ PDF อย่างครบถ้วนด้วย Aspose.PDF สำหรับ .NET ผ่านขั้นตอนละเอียดในคู่มือฉบับสมบูรณ์นี้ | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/thai/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..5135f04be6 --- /dev/null +++ b/pdf/thai/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-08-08 +description: บันทึกเอกสาร PDF ด้วย Aspose.PDF, เรียนรู้วิธีเพิ่มหน้า PDF, เติมฟิลด์ฟอร์ม + PDF, และสร้าง PDF พร้อมฟิลด์ฟอร์มในบทแนะนำเดียว. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: th +lastmod: 2026-08-08 +og_description: บันทึกเอกสาร PDF ด้วย Aspose.PDF และค้นพบวิธีการเพิ่มหน้า PDF, เติมฟิลด์ฟอร์ม + PDF, และสร้าง PDF พร้อมฟิลด์ฟอร์มอย่างรวดเร็วและเชื่อถือได้. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: บันทึกเอกสาร PDF ด้วย Aspose.PDF – คู่มือขั้นตอนโดยละเอียด +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: บันทึกเอกสาร PDF ด้วย Aspose.PDF – คู่มือฉบับสมบูรณ์ +url: /th/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# บันทึกเอกสาร PDF ด้วย Aspose.PDF – คู่มือเต็ม + +หากคุณต้องการ **บันทึกเอกสาร PDF** ที่มีฟิลด์ฟอร์มแบบโต้ตอบ คู่มือนี้จะแสดงให้คุณเห็นขั้นตอนอย่างละเอียด คุณจะได้เรียนรู้วิธีเพิ่มหน้า PDF, สร้างฟอร์ม PDF, และเติมค่าฟิลด์ฟอร์ม PDF—ทั้งหมดด้วย Aspose.PDF for .NET. + +ในส่วนต่อไปนี้คุณจะได้เรียนรู้ว่า: + +* เพิ่มหลายหน้าใน PDF ใหม่, +* สร้างฟิลด์ฟอร์มแบบกล่องข้อความในหน้าแรก, +* วาง widget annotation สำหรับฟิลด์เดียวกันในหน้าที่สอง, +* ตั้งค่าฟิลด์ (เติมค่าฟิลด์ฟอร์ม PDF), +* และสุดท้าย **บันทึกเอกสาร PDF** ลงดิสก์. + +ไม่ต้องใช้เครื่องมือภายนอก; โค้ดที่ทำงานได้เต็มรูปแบบรวมอยู่ในนี้แล้ว. + +## Prerequisites + +* .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานได้กับ .NET Framework 4.7.2+) +* ใบอนุญาต Aspose.PDF for .NET ที่ถูกต้องหรือคีย์ทดลองใช้งานฟรี +* Visual Studio 2022 (หรือ IDE C# ใดก็ได้) + +Add the NuGet package: + +```bash +dotnet add package Aspose.PDF +``` + +## วิธีเพิ่มหน้า PDF + +ขั้นตอนแรกคือการสร้าง PDF ว่างและเพิ่มหน้าที่คุณต้องการ การเพิ่มหน้า ก่อนกำหนดฟิลด์ฟอร์ม จะทำให้พิกัดการจัดวางแม่นยำ + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*ทำไมเรื่องนี้ถึงสำคัญ:* แต่ละอ็อบเจกต์ `Page` แสดงถึงผ้าใบที่สามารถพิมพ์ได้ การเพิ่มหน้าในขั้นตอนแรกทำให้คุณสามารถอ้างอิงได้ในภายหลังเมื่อกำหนดตำแหน่งขององค์ประกอบฟอร์ม + +## วิธีสร้างฟอร์ม PDF ด้วย Aspose.PDF + +ฟอร์ม PDF ประกอบด้วย **field definition** (ตัวเก็บข้อมูลเชิงตรรกะ) และหนึ่งหรือหลาย **widget annotations** (การแสดงผลเชิงภาพ) ตัวอย่างนี้สร้าง `TextBoxField` ชื่อ **Comments** บนหน้าแรก + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*ทำไมเรื่องนี้ถึงสำคัญ:* พิกัด `Rectangle` แสดงเป็นจุด (1 pt = 1/72 in) ปรับค่าตามการออกแบบของคุณ + +## เติมค่าฟิลด์ฟอร์ม PDF + +คุณสามารถตั้งค่าฟิลด์โดยโปรแกรมก่อนบันทึกเอกสาร นี่คือหัวใจของ **populate PDF form field** + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +หากคุณต้องการเติมฟิลด์ในภายหลัง (เช่น จากข้อมูลผู้ใช้) เพียงกำหนดสตริงใหม่ให้กับ `commentsField.Value` ก่อนเรียก `Save` + +## เพิ่ม widget annotation สำหรับฟิลด์เดียวกันในหน้าที่สอง + +widget annotation ทำให้ฟิลด์ฟอร์มปรากฏบนหน้าโดยการเพิ่ม widget ที่สอง ฟิลด์เชิงตรรกะเดียวกันจะแสดงบนทั้งสองหน้า แสดง **create PDF with form fields** ที่ขยายหลายหน้า + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*ทำไมเรื่องนี้ถึงสำคัญ:* คอลเลกชัน `Widgets` สามารถเก็บการแสดงผลเชิงภาพได้จำนวนไม่จำกัด ผู้ใช้สามารถโต้ตอบกับฟิลด์บนหน้าใดก็ได้และค่าที่กรอกจะซิงค์กัน + +## แนบฟิลด์เข้ากับ annotation ของหน้าแรก + +ฟิลด์ฟอร์มต้องถูกเพิ่มเข้าไปในคอลเลกชัน annotation ของหน้าเพื่อให้โปรแกรมอ่าน PDF สามารถแสดงได้ + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## บันทึกเอกสาร PDF + +เมื่อฟอร์มถูกกำหนดครบถ้วนแล้ว คุณสามารถ **บันทึกเอกสาร PDF** ไปยังตำแหน่งที่ต้องการได้ + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +เมื่อคุณเปิด `output.pdf` ด้วย Adobe Acrobat Reader หรือโปรแกรมอ่าน PDF ใดก็ได้ คุณจะเห็นกล่องข้อความบนหน้า 1 และกล่องที่ตรงกันบนหน้า 2 การพิมพ์ในกล่องใดก็จะอัปเดตฟิลด์พื้นฐานเดียวกัน + +## ตัวอย่างเต็มที่ทำงานได้ + +ด้านล่างเป็นโปรแกรมเต็มที่คุณสามารถคัดลอก‑วางลงในแอปพลิเคชันคอนโซล มันคอมไพล์และสร้าง PDF ตามที่อธิบายโดยไม่ต้องแก้ไขใด ๆ + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** ไฟล์ชื่อ `output.pdf` มีสองหน้า หน้า 1 แสดงกล่องข้อความที่มีป้าย “Comments” ที่พิกัด (100, 600) หน้า 2 แสดงฟิลด์เดียวกันที่ (100, 400) ฟิลด์ถูกเติมล่วงหน้าด้วย “Enter your feedback here” การเปลี่ยนข้อความบนหน้าใดก็จะอัปเดตค่าเดียวกันเมื่อบันทึกเอกสารอีกครั้ง + +## คำถามทั่วไปและการจัดการกรณีขอบ + +| Question | Answer | +|----------|--------| +| *ฉันสามารถเพิ่ม widget มากกว่าหนึ่งตัวสำหรับฟิลด์เดียวกันได้หรือไม่?* | ได้. เพิ่มอ็อบเจกต์ `WidgetAnnotation` เพิ่มเติมลงใน `commentsField.Widgets`. แต่ละ widget สามารถวางบนหน้าใดก็ได้. | +| *ถ้าฉันต้องการตั้งค่าลักษณะของฟิลด์ (แบบอักษร, ขอบ, พื้นหลัง) จะทำอย่างไร?* | ใช้ `commentsField.DefaultAppearance` เพื่อระบุแบบอักษรและสี, และตั้งค่าคุณสมบัติ `commentsField.Border` สำหรับสไตล์เส้น. | +| *ฉันจะทำให้ฟิลด์เป็นแบบอ่าน‑อย่างเดียวได้อย่างไร?* | ตั้งค่า `commentsField.ReadOnly = true;`. ฟิลด์จะยังคงแสดงค่าของมันแต่ผู้ใช้ไม่สามารถแก้ไขได้. | +| *สามารถเติมค่าฟิลด์หลังจากสร้าง PDF แล้วได้หรือไม่?* | ได้. โหลด PDF ที่บันทึกไว้ด้วย `new Document("output.pdf")`, ค้นหาฟิลด์ผ่าน `pdfDocument.Form["Comments"]`, กำหนดค่า `Value` ใหม่, แล้วเรียก `Save` อีกครั้ง. | +| *ถ้า PDF ต้องเป็นไปตามมาตรฐาน PDF/A เพื่อการเก็บถาวรจะทำอย่างไร?* | หลังจากสร้างเอกสารแล้ว, เรียก `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` ก่อนบันทึก. | + +## เคล็ดลับจากสนาม + +* **เคล็ดลับ:** รักษาชื่อฟิลด์เชิงตรรกะให้สั้นและไม่ซ้ำกัน; มันเป็นตัวระบุที่คุณจะใช้เมื่อเติมฟอร์มโดยโปรแกรมในภายหลัง. +* **ระวัง:** สี่เหลี่ยม widget ที่ทับซ้อนกัน. การทับซ้อนอาจทำให้เกิดข้อบกพร่องในการแสดงผลในบางโปรแกรมอ่าน. +* **หมายเหตุประสิทธิภาพ:** การเพิ่มหลายหน้า หรือหลาย widget ในลูปที่แน่นสามารถปรับให้เร็วขึ้นโดยใช้ `Rectangle` ตัวเดียวและเปลี่ยนพิกัดเท่านั้น. + +## สรุป + +คุณตอนนี้รู้วิธี **บันทึกเอกสาร PDF** ที่มีฟอร์มทำงานเต็มรูปแบบ, วิธี **เติมค่าฟิลด์ฟอร์ม PDF**, และวิธี **เพิ่มหน้า PDF** และ **สร้าง PDF ด้วยฟิลด์ฟอร์ม** ด้วย Aspose.PDF for .NET ตัวอย่างเต็มแสดงกระบวนการจากการสร้างเอกสารจนถึงการบันทึกขั้นสุดท้าย + +ต่อไปสำรวจหัวข้อที่เกี่ยวข้องเช่น **การเพิ่มกล่องเช็ค**, **การสร้างรายการดรอป‑ดาวน์**, หรือ **การแปลงฟอร์มเป็นแบบอ่าน‑อย่างเดียว** สำหรับการแจกจ่ายแบบอ่าน‑อย่างเดียว แต่ละหัวข้อสร้างบนหลักการเดียวกันและขยายความสามารถการทำงานอัตโนมัติของ PDF ของคุณ + +ขอให้สนุกกับการเขียนโค้ด! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งรวมตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยคุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานทางเลือกในโปรเจกต์ของคุณ + +- [วิธีสร้าง PDF ด้วย Aspose – เพิ่มฟิลด์ฟอร์มและหน้า](/pdf/english/net/programming-with-forms/how-to-create-pdf-with-aspose-add-form-field-and-pages/) +- [สร้างเอกสาร PDF ด้วย Aspose – เพิ่มหน้า, กล่องข้อความ, และฟอร์ม](/pdf/english/net/forms-annotations/create-pdf-document-with-aspose-add-page-text-box-and-form/) +- [วิธีเพิ่มและดึงฟิลด์ฟอร์ม PDF ด้วย Aspose.PDF for .NET: คู่มือฉบับสมบูรณ์](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/thai/net/programming-with-pdf-pages/_index.md index a9b92c6b1f..66dbc35308 100644 --- a/pdf/thai/net/programming-with-pdf-pages/_index.md +++ b/pdf/thai/net/programming-with-pdf-pages/_index.md @@ -37,7 +37,8 @@ | [แยกเป็นหน้า](./split-to-pages/) แยกไฟล์ PDF ออกเป็นหน้าต่างๆ ได้อย่างง่ายดายโดยใช้ Aspose.PDF สำหรับ .NET ด้วยบทช่วยสอนที่ครอบคลุมนี้ พร้อมคำแนะนำทีละขั้นตอน - [อัปเดตขนาดหน้า PDF](./update-dimensions/) | ค้นพบวิธีอัปเดตขนาดหน้า PDF ได้อย่างง่ายดายด้วย Aspose.PDF สำหรับ .NET ในคู่มือทีละขั้นตอนที่ครอบคลุมนี้ - [ซูมเข้าเนื้อหาหน้าในไฟล์ PDF](./zoom-to-page-contents/) | เรียนรู้วิธีซูมเนื้อหาหน้าในไฟล์ PDF โดยใช้ Aspose.PDF สำหรับ .NET ในคู่มือฉบับสมบูรณ์นี้ ปรับปรุงเอกสาร PDF ของคุณตามความต้องการเฉพาะของคุณ | -- [เพิ่มหมายเลขหน้า PDF ด้วย C# – คู่มือเต็มขั้นตอน](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | เรียนรู้วิธีเพิ่มหมายเลขหน้าในไฟล์ PDF ด้วย C# โดยใช้ Aspose.PDF สำหรับ .NET ผ่านคู่มือขั้นตอนเต็มรูปแบบ +- [เพิ่มหมายเลขหน้า PDF ด้วย C# – คู่มือเต็มขั้นตอน](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | เรียนรู้วิธีเพิ่มหมายเลขหน้าในไฟล์ PDF ด้วย C# โดยใช้ Aspose.PDF สำหรับ .NET ผ่านคู่มือขั้นตอนเต็มรูปแบบ +- [เพิ่มหมายเลขบาเตส PDF ด้วย Aspose – คู่มือเต็มขั้นตอน](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | เรียนรู้วิธีเพิ่มหมายเลขบาเตสในไฟล์ PDF ด้วย Aspose.PDF สำหรับ .NET ผ่านคู่มือขั้นตอนเต็ม {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/thai/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..92b407c6e7 --- /dev/null +++ b/pdf/thai/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-08-08 +description: เพิ่มหมายเลขบาเตสใน PDF ด้วย Aspose.Pdf ใน C# บทเรียนนี้ยังแสดงวิธีการเพิ่มหน้าเปล่าใน + PDF และสร้าง PDF อย่างเป็นโปรแกรม. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: th +lastmod: 2026-08-08 +og_description: เพิ่มหมายเลขบาเตสใน PDF ด้วย Aspose.Pdf ใน C# — เรียนรู้การเพิ่มหน้าเปล่าใน + PDF, สร้าง PDF ด้วยโปรแกรม, และบันทึกเอกสารขั้นสุดท้ายภายในไม่กี่นาที. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: เพิ่มการใส่หมายเลขบาเตสใน PDF ด้วย Aspose – คู่มือ C# ฉบับสมบูรณ์ +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: เพิ่มการใส่หมายเลขบาเตสใน PDF ด้วย Aspose – คู่มือแบบทีละขั้นตอน +url: /th/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# เพิ่ม bates numbering pdf ด้วย Aspose – คู่มือแบบขั้นตอน + +การเพิ่ม bates numbering pdf ด้วย Aspose.Pdf ทำได้ง่ายเมื่อคุณเข้าใจขั้นตอนหลัก หากคุณต้องการเพิ่ม blank page pdf หรือสร้าง pdf ด้วยโปรแกรม คู่มือนี้ครอบคลุมทุกอย่างที่คุณต้องการ + +ในบทเรียนนี้คุณจะได้ทำ: + +* สร้างเอกสาร PDF ใหม่ตั้งแต่ต้น +* เพิ่ม blank page pdf ที่จะเป็นที่ใส่หมายเลข Bates +* กำหนดค่า Bates numbering artifact ด้วยคำนำหน้าแบบกำหนดเอง +* บันทึก PDF เพื่อให้หมายเลขปรากฏบนไฟล์ที่สร้างขึ้น + +เมื่อทำเสร็จคุณจะมีแอปพลิเคชันคอนโซล C# ที่ทำงานเต็มรูปแบบซึ่งสร้าง PDF ที่มีหมายเลข Bates เช่น **CASE‑1000**, **CASE‑1001**, … – ความต้องการทั่วไปสำหรับกระบวนการทางกฎหมายและ e‑discovery + +## Prerequisites + +* .NET 6.0 SDK หรือใหม่กว่า (โค้ดนี้ยังทำงานกับ .NET Framework 4.8) +* Visual Studio 2022 หรือ IDE ที่รองรับ C# ใด ๆ +* ใบอนุญาต Aspose.Pdf for .NET ที่ถูกต้อง (หรือคีย์ทดลองใช้ฟรี) +* ความคุ้นเคยพื้นฐานกับไวยากรณ์ C# + +> **Pro tip:** หากคุณรันโค้ดโดยไม่มีใบอนุญาต Aspose จะเพิ่มลายน้ำขนาดเล็กลงใน PDF ที่ส่งออก + +## Step 1: Set up the project and import Aspose.Pdf + +สร้างโปรเจกต์คอนโซลใหม่และเพิ่มแพคเกจ NuGet ของ Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +คำสั่ง `using` ที่จำเป็นสำหรับตัวอย่างนี้คือ: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +เนมสเปซเหล่านี้ให้คุณเข้าถึงคลาส `Document`, `Page` และ `BatesNumberingArtifact` ที่จะใช้ต่อไป + +## Step 2: Add a blank page pdf + +หมายเลข Bates ต้องถูกแนบกับหน้า ดังนั้นเราจะสร้างหน้าเปล่าก่อนเพื่อรับ artifact ของการใส่หมายเลข + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +คลาส `Document` แทนไฟล์ PDF ทั้งไฟล์ ส่วน `Pages.Add()` จะใส่หน้าใหม่ที่ว่างเปล่าที่ตำแหน่งสุดท้ายของคอลเลกชันหน้าเอกสาร เนื่องจากเอกสารเริ่มต้นว่างเปล่า การเรียกนี้จึงสร้างหน้าที่หนึ่งด้วยเช่นกัน + +## Step 3: Configure the Bates numbering artifact + +ตอนนี้เราจะกำหนดรูปแบบของหมายเลข Bates ให้เป็นอย่างไร `BatesNumberingArtifact` ให้คุณตั้งค่าเลขเริ่มต้น, คำนำหน้า, คำต่อท้ายและตัวเลือกการจัดรูปแบบอื่น ๆ + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**ทำไมจึงสำคัญ:** +การตั้งค่า `StartNumber` เป็น **1000** สอดคล้องกับมาตรฐานไฟล์คดีทางกฎหมายทั่วไป `Prefix` ทำให้แต่ละหมายเลขแสดงเป็น **CASE‑1000**, **CASE‑1001**, … ซึ่งทำให้การค้นหาและการจัดเรียงง่ายขึ้น + +## Step 4: Attach the artifact to the page + +ต้องเพิ่ม artifact นี้ลงในคอลเลกชัน `Artifacts` ของหน้าเพื่อให้ Aspose แสดงผลบนทุกหน้าเมื่อบันทึก + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +เมื่อบันทึกเอกสาร Aspose จะทำซ้ำ artifact นี้บนทุกหน้าโดยอัตโนมัติและเพิ่มเลขสำหรับหน้าถัดไป + +## Step 5: (Optional) Add additional pages + +หากต้องการหน้าเพิ่มเติม เพียงเรียก `pdfDocument.Pages.Add()` อีกครั้ง Bates numbering artifact ที่แนบไว้ในขั้นตอนก่อนหน้าจะปรากฏบนหน้าใหม่โดยอัตโนมัติ + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Step 6: Save the PDF – generate pdf programmatically + +สุดท้ายให้บันทึกเอกสารลงดิสก์ นี่คือจุดที่หมายเลข Bates ถูกวาดลงบนหน้า + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**ผลลัพธ์ที่คาดหวัง:** +เปิด *BatesNumberedDocument.pdf* คุณจะเห็น PDF จำนวนสามหน้า แต่ละหน้าจะแสดงหมายเลข Bates ที่มุมล่างขวา: + +* หน้า 1 → **CASE‑1000** +* หน้า 2 → **CASE‑1001** +* หน้า 3 → **CASE‑1002** + +ตัวเลขจะเพิ่มขึ้นโดยอัตโนมัติเนื่องจาก artifact ถูกแนบกับคอลเลกชันหน้า + +## Full, runnable example + +รวมทุกอย่างเข้าด้วยกัน นี่คือตัวอย่างโปรแกรมคอนโซลเต็มรูปแบบที่คุณสามารถคัดลอก วาง และรันได้: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +รันโปรแกรมด้วย `dotnet run` หลังจากทำงานเสร็จ ให้ค้นหาไฟล์บนเดสก์ท็อปและตรวจสอบหมายเลข Bates + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Common questions and edge cases + +### What if I need a different font or position? + +`BatesNumberingArtifact` มีคุณสมบัติเช่น `FontSize`, `FontColor`, `HorizontalAlignment` และ `VerticalAlignment` ตัวอย่างเช่น: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### How do I exclude a specific page from numbering? + +สร้าง `BatesNumberingArtifact` แยกต่างหากสำหรับหน้าที่ต้องการนับเลขและเพิ่มเฉพาะในหน้านั้น ๆ หน้าโดยไม่มี artifact จะไม่ถูกนับเลข + +### Does this work with existing PDFs? + +ใช่ แทนที่จะใช้ `new Document()` ให้โหลดไฟล์ที่มีอยู่: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +จากนั้นแนบ artifact ไปยังหน้าที่ต้องการและบันทึก + +## Conclusion + +คุณได้เรียนรู้วิธี **add bates numbering pdf** ด้วย Aspose.Pdf, วิธี **add blank page pdf**, และวิธี **generate pdf programmatically** ในโซลูชัน C# ที่สะอาดและนำกลับมาใช้ใหม่ได้ วิธีนี้ทำงานกับจำนวนหน้าที่ไม่จำกัด, คำนำหน้าแบบกำหนดเอง, และตัวเลือกการจัดรูปแบบต่าง ๆ ให้คุณควบคุมเอกสารสุดท้ายได้เต็มที่ + +ขั้นตอนต่อไปที่คุณอาจสนใจ: + +* Use **create pdf as + +## What Should You Learn Next? + +บทเรียนต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายขั้นตอนเพื่อช่วยคุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโปรเจกต์ของคุณ + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 47630367ab..95b9c2a790 100644 --- a/pdf/thai/net/programming-with-security-and-signatures/_index.md +++ b/pdf/thai/net/programming-with-security-and-signatures/_index.md @@ -16,7 +16,7 @@ บทช่วยสอนการเขียนโปรแกรมด้วยความปลอดภัยและลายเซ็นจะแนะนำคุณเกี่ยวกับคุณลักษณะด้านความปลอดภัยและลายเซ็นสำหรับเอกสาร PDF คุณจะได้เรียนรู้วิธีปกป้องไฟล์ PDF ของคุณด้วยรหัสผ่าน เพิ่มลายเซ็นดิจิทัล และตรวจสอบความสมบูรณ์ของเอกสารที่ลงนาม -บทช่วยสอนนี้จะให้ภาพรวมโดยละเอียดเกี่ยวกับวิธีการและเทคนิคต่างๆ เพื่อให้แน่ใจว่าไฟล์ PDF ของคุณมีความลับและถูกต้อง คุณจะได้เรียนรู้วิธีจัดการใบรับรองดิจิทัล เพิ่มสิทธิ์การรักษาความปลอดภัย ใช้หลักนโยบายความปลอดภัย และอื่นๆ อีกมากมาย เมื่อใช้บทช่วยสอนเหล่านี้ คุณจะสามารถรักษาความปลอดภัยเอกสาร PDF ของคุณได้อย่างน่าเชื่อถือและเป็นมืออาชีพ +บทช่วยสอนนี้จะให้ภาพรวมโดยละเอียดเกี่ยวกับวิธีการและเทคนิคต่างๆ เพื่อให้แน่ใจว่าไฟล์ PDF ของคุณมีความลับและถูกต้อง คุณจะได้เรียนรู้วิธีจัดการใบรับรองดิจิทัล เพิ่มสิทธิ์การรักษาความปลอดภัย ใช้หลักนโยบายความปลอดภัย และอื่นๆ อีกมากมาย เมื่อใช้บทช่วยสอนเหล่านี้ คุณสามารถรักษาความปลอดภัยเอกสาร PDF ของคุณได้อย่างน่าเชื่อถือและเป็นมืออาชีพ ## บทช่วยสอน | ชื่อเรื่อง | คำอธิบาย | @@ -34,7 +34,9 @@ | [ลงนามด้วยสมาร์ทการ์ดโดยใช้ลายเซ็นไฟล์ PDF](./sign-with-smart-card-using-pdf-file-signature/) | เรียนรู้วิธีลงนามไฟล์ PDF โดยใช้สมาร์ทการ์ดด้วย Aspose.PDF สำหรับ .NET ปฏิบัติตามคำแนะนำทีละขั้นตอนนี้เพื่อลายเซ็นดิจิทัลที่ปลอดภัย - | [ลงนามด้วยสมาร์ทการ์ดโดยใช้ช่องลายเซ็น](./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 สำหรับ .NET - +- [ตรวจสอบลายเซ็น PDF ใน C# – คู่มือฉบับสมบูรณ์](./verify-pdf-signature-in-c-with-aspose-pdf-complete-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: ตรวจสอบลายเซ็นดิจิทัลของ PDF ด้วย Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | เรียนรู้วิธีตรวจสอบลายเซ็นดิจิทัลของไฟล์ PDF ด้วย Aspose.PDF - {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/thai/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/thai/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..915d46b4a6 --- /dev/null +++ b/pdf/thai/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-08-08 +description: บทเรียนการลงนาม PDF ที่แสดงวิธีตรวจสอบลายเซ็นดิจิทัลของ PDF ด้วยตัวเลือกการตรวจสอบลายเซ็นและโค้ด + C# – คู่มือขั้นตอนเร็ว +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: th +lastmod: 2026-08-08 +og_description: บทเรียนการลงนาม PDF จะพาคุณผ่านขั้นตอนการตรวจสอบลายเซ็นดิจิทัลของ + PDF ด้วย Aspose.PDF เรียนรู้การกำหนดค่าตัวเลือกการตรวจสอบลายเซ็นและตรวจสอบผลลัพธ์ +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: คู่มือการลงลายเซ็น PDF – ตรวจสอบลายเซ็นดิจิทัลของ PDF ใน C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'บทแนะนำการลงนาม PDF: ตรวจสอบลายเซ็นดิจิทัลของ PDF ด้วย Aspose.PDF' +url: /th/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# บทแนะนำการลงนาม PDF – ตรวจสอบลายเซ็นดิจิทัล PDF ใน C# + +หากคุณต้องการ **pdf signature tutorial** ที่แสดงอย่างชัดเจนว่าต้องทำอย่างไรเพื่อยืนยันลายเซ็นดิจิทัลของ PDF คู่มือนี้ครอบคลุมทุกขั้นตอน คุณจะได้เห็นวิธีโหลด PDF ที่มีลายเซ็น ตั้งค่า **signature validation options** เรียกใช้การตรวจสอบ และแสดงผลลัพธ์ – ทั้งหมดด้วยโค้ด C# ที่สามารถรันได้ทันที + +การตรวจสอบลายเซ็น PDF เป็นสิ่งสำคัญเมื่อคุณทำงานกับสัญญา ใบแจ้งหนี้ หรือเอกสารที่มีผลผูกพันทางกฎหมาย บทแนะนำนี้จะพาคุณผ่านกระบวนการทำงานทั้งหมด เพื่อให้คุณสามารถผสานการตรวจสอบลายเซ็นเข้าไปในแอปพลิเคชันของคุณได้โดยไม่ต้องเดาว่า API ใดที่ต้องเรียกใช้ + +## สิ่งที่คุณจะทำสำเร็จ + +เมื่อจบบทแนะนำนี้แล้วคุณจะสามารถ: + +* โหลดไฟล์ PDF ที่มีลายเซ็นโดยใช้ Aspose.PDF +* ตั้งค่า **signature validation options** เช่น อัลกอริทึมแฮช +* เรียกเมธอด `Validate` เพื่อ **validate pdf digital signature** +* แสดงข้อความ “Signature valid” อย่างชัดเจนบนคอนโซล + +**ข้อกำหนดเบื้องต้น** + +* .NET 6.0 (หรือใหม่กว่า) ติดตั้งแล้ว +* Visual Studio 2022 (หรือ IDE สำหรับ C# ใดก็ได้) +* แพคเกจ NuGet Aspose.PDF for .NET (`Aspose.Pdf`) + +> **เคล็ดลับ:** ใช้เวอร์ชันล่าสุดของ Aspose.PDF เพื่อรับการสนับสนุนอัลกอริทึม SHA‑3 และประสิทธิภาพการตรวจสอบที่ดีขึ้น + +## ขั้นตอนที่ 1: ติดตั้งแพคเกจ NuGet Aspose.PDF + +เปิดโปรเจกต์ของคุณใน Visual Studio แล้วรันคำสั่งต่อไปนี้ใน Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +แพคเกจนี้จะเพิ่มเนมสเปซ `Aspose.Pdf` ซึ่งประกอบด้วยคลาส `Document` และ API ที่เกี่ยวกับลายเซ็นที่คุณจะใช้ + +## ขั้นตอนที่ 2: โหลดเอกสาร PDF ที่มีลายเซ็น + +บรรทัดแรกของโค้ดสร้างอ็อบเจ็กต์ `Document` ที่แทนไฟล์ PDF บนดิสก์ + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*ทำไมจึงสำคัญ:* คลาส `Document` จะทำการพาร์สโครงสร้าง PDF และเปิดเผยคอลเลกชัน `Signatures` ที่เก็บลายเซ็นดิจิทัลทั้งหมด หากเส้นทางไฟล์ไม่ถูกต้อง จะเกิดข้อยกเว้น ดังนั้นตรวจสอบพาธก่อนรันโปรแกรม + +## ขั้นตอนที่ 3: ตั้งค่า options สำหรับการตรวจสอบลายเซ็น + +คุณสามารถปรับกระบวนการตรวจสอบด้วยคลาส `SignatureValidationOptions` ในบทแนะนำนี้เรากำหนดอัลกอริทึมแฮช แต่คุณก็สามารถตั้งค่าการตรวจสอบการเพิกถอนใบรับรอง การตรวจสอบ timestamp ฯลฯ ได้เช่นกัน + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*ทำไมจึงสำคัญ:* อัลกอริทึมแฮชต้องตรงกับที่ใช้สร้างลายเซ็น หากใช้อัลกอริทึมที่ไม่ตรงกัน การตรวจสอบจะล้มเหลือแม้ว่าลายเซ็นจะถูกต้องในแง่อื่น ๆ + +## ขั้นตอนที่ 4: ตรวจสอบลายเซ็นแรก + +ส่วนใหญ่ PDF จะมีลายเซ็นเดียว แต่คอลเลกชัน `Signatures` สามารถมีหลายรายการ ตัวอย่างนี้ตรวจสอบรายการแรก (`[0]`) เมธอด `Validate` จะคืนค่า Boolean ที่บ่งบอกความสำเร็จ + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*กรณีขอบ:* หาก PDF ไม่มีลายเซ็น `document.Signatures.Count` จะเป็น `0` และการเข้าถึง `[0]` จะทำให้เกิด `IndexOutOfRangeException` ป้องกันโดยตรวจสอบอย่างง่ายดังนี้: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## ขั้นตอนที่ 5: แสดงผลลัพธ์การตรวจสอบ + +สุดท้ายให้เขียนผลลัพธ์ลงคอนโซล ขั้นตอนนี้แสดงผล **check pdf signature** ในรูปแบบที่มนุษย์อ่านได้ + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +เมื่อคุณรันโปรแกรม ควรเห็นผลลัพธ์ดังนี้: + +``` +Signature valid: True +``` + +หากลายเซ็นเสียหาย ใช้อัลกอริธึมที่ไม่รองรับ หรือใบรับรองถูกเพิกถอน ผลลัพธ์จะเป็น `False` + +## ตัวอย่างเต็มที่สามารถรันได้ + +คัดลอกโค้ดต่อไปนี้ไปยังโปรเจกต์คอนโซลใหม่ (`dotnet new console`) แล้วแทนที่ `YOUR_DIRECTORY/signed.pdf` ด้วยพาธของไฟล์ PDF ที่มีลายเซ็นของคุณ + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +``` +Signature valid: True +``` + +หากลายเซ็นล้มเหลวในการตรวจสอบ คอนโซลจะแสดง `Signature valid: False` + +## คำถามที่พบบ่อยและการแก้ไขปัญหา + +| Question | Answer | +|----------|--------| +| **What if the PDF uses a different hash algorithm?** | Change `HashAlgorithm` in `SignatureValidationOptions` to match, e.g., `HashAlgorithm.SHA256`. | +| **How do I validate all signatures in a multi‑signature PDF?** | Loop through `document.Signatures` and call `Validate` for each entry. | +| **Can I verify the signing certificate’s trust chain?** | Set `validationOptions.CheckCertificateRevocation = true` and optionally provide a custom `CertificateStore` to include trusted root certificates. | +| **What if I need to support timestamp validation?** | Enable `validationOptions.CheckTimestamp = true`. Aspose.PDF will then verify the embedded timestamp token. | +| **Is there a way to get detailed validation errors?** | Use `ValidateEx(validationOptions, out ValidationResult result)`; `result` contains `ErrorMessage` and `ErrorCode` for each failure. | + +## ขั้นตอนต่อไป + +* สำรวจ **validate pdf signature** สำหรับหลายลายเซ็นโดยวนลูป `document.Signatures` +* ผสานบทแนะนำนี้กับ **check pdf signature** ใน Web API เพื่อให้บริการตรวจสอบแบบเรียลไทม์สำหรับสัญญาที่อัปโหลด +* ศึกษา **signature validation options** เพิ่มเติม เช่น การตรวจสอบ CRL/OCSP, การตรวจสอบ timestamp, และ trust store ที่กำหนดเอง + +ตอนนี้คุณมี **pdf signature tutorial** ครบถ้วนที่แสดงวิธี **validate pdf digital signature** ด้วย Aspose.PDF ใน C# แล้ว คุณสามารถปรับโค้ดให้เข้ากับ workflow ของคุณเอง เพิ่มการบันทึก log หรือผสานเข้ากับ pipeline การประมวลผลเอกสารที่ใหญ่ขึ้นได้ตามต้องการ ขอให้สนุกกับการเขียนโค้ด! + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการทำงานอื่น ๆ ในโปรเจกต์ของคุณ + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/thai/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..18b95d91d3 --- /dev/null +++ b/pdf/thai/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: ตรวจสอบลายเซ็น PDF ด้วย C# โดยใช้ Aspose.PDF เรียนรู้วิธีตรวจสอบความถูกต้องของลายเซ็นดิจิทัลใน + PDF และแสดงรายการลายเซ็น PDF เพียงไม่กี่บรรทัดของโค้ด +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: th +lastmod: 2026-08-08 +og_description: ตรวจสอบลายเซ็น PDF ใน C# ด้วย Aspose.PDF คู่มือนี้จะแสดงวิธีตรวจสอบความถูกต้องของลายเซ็นดิจิทัลใน + PDF, รายการลายเซ็น PDF, และจัดการกับลายเซ็นที่เสียหายอย่างมีประสิทธิภาพ +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: ตรวจสอบลายเซ็น PDF ใน C# – บทแนะนำ Aspose.PDF อย่างรวดเร็ว +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: ตรวจสอบลายเซ็น PDF ด้วย C# และ Aspose.PDF – คู่มือฉบับสมบูรณ์ +url: /th/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# ตรวจสอบลายเซ็น PDF ใน C# ด้วย Aspose.PDF – คู่มือเต็ม + +หากคุณต้องการ **ตรวจสอบลายเซ็น PDF** ในแอปพลิเคชัน .NET คู่มือนี้จะแสดงวิธีทำอย่างกระชับด้วย Aspose.PDF คุณจะได้เรียนรู้วิธี **ตรวจสอบลายเซ็นดิจิทัล PDF**, **แสดงรายการลายเซ็น PDF**, และตรวจจับลายเซ็นที่เสียหายในไม่กี่บรรทัดของโค้ด + +บทเรียนนี้ครอบคลุมตั้งแต่การติดตั้งไลบรารีจนถึงการจัดการกรณีขอบเช่นเอกสารที่ไม่มีลายเซ็นหรือ PDF ที่เข้ารหัส เมื่อเสร็จสิ้นคุณจะสามารถรวมการตรวจสอบลายเซ็นเข้าไปในโปรเจกต์ C# ใด ๆ เพื่อรับประกันความถูกต้องของไฟล์ PDF ที่เข้ามา + +**ข้อกำหนดเบื้องต้น** + +- .NET 6.0 หรือใหม่กว่า (โค้ดนี้ยังทำงานกับ .NET Framework 4.6+) +- ความคุ้นเคยพื้นฐานกับ C# และ Visual Studio (หรือ IDE ใดก็ได้ที่คุณชอบ) +- ไลเซนส์ Aspose.PDF for .NET (รุ่นทดลองฟรีใช้สำหรับการประเมิน) + +หากคุณตรงตามข้อกำหนดเหล่านี้ คุณพร้อมที่จะเริ่มตรวจสอบลายเซ็น PDF แล้ว + +## ตรวจสอบลายเซ็น PDF – ตั้งค่าโปรเจกต์ + +1. **เพิ่มแพ็กเกจ NuGet ของ Aspose.PDF** + เปิด Package Manager Console แล้วรัน: + + ```bash + Install-Package Aspose.PDF + ``` + + คำสั่งนี้จะดึงแอสเซมบลี `Aspose.Pdf` และการพึ่งพาต่าง ๆ มาให้ + +2. **นำเข้า namespace ที่จำเป็น** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` ให้เมธอด `Any` ที่ใช้ต่อไป, ส่วน `Aspose.Pdf` มีคลาส `Document` และ `Signature` + +## โหลดเอกสาร PDF + +ขั้นตอนแรกคือการเปิดไฟล์ PDF ที่ต้องการตรวจสอบ Aspose.PDF จะอ่านไฟล์เข้าสู่หน่วยความจำ ทำให้คุณสามารถสืบค้นลายเซ็นได้ + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **ทำไมจึงสำคัญ** – การโหลดเอกสารภายในบล็อก `using` รับประกันว่าการจัดการไฟล์จะถูกปล่อยออกอย่างทันท่วงที ป้องกันปัญหาไฟล์ล็อกในบริการที่ทำงานเป็นเวลานาน + +## แสดงรายการลายเซ็น PDF + +ก่อนที่คุณจะตรวจสอบลายเซ็น คุณอาจต้องการรู้ว่ามีลายเซ็นกี่รายการ ขั้นตอนนี้สาธิตความสามารถ **แสดงรายการลายเซ็น PDF** + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**คำอธิบาย** + +- `document.Signatures` คืนคอลเลกชันของอ็อบเจกต์ `Signature` +- `Count` บอกจำนวนลายเซ็นที่มีอยู่ +- แต่ละ `Signature` เปิดเผยเมตาดาต้าเช่น `Id`, `SignatureType` และ `Reason` ซึ่งมีประโยชน์สำหรับบันทึกการตรวจสอบ + +**กรณีขอบ** – หาก PDF ไม่มีลายเซ็น `Count` จะเป็น `0` และลูปจะไม่ทำงาน คุณสามารถจัดการสถานการณ์นี้อย่างสุภาพได้: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## ตรวจสอบลายเซ็นดิจิทัล PDF – ตรวจจับลายเซ็นที่เสียหาย + +เมื่อคุณสามารถนับลายเซ็นได้แล้ว งานหลักคือ **ตรวจสอบความสมบูรณ์ของลายเซ็น PDF** Aspose.PDF มีพร็อพเพอร์ตี้ `IsCompromised` ที่คืนค่า `true` เมื่อแฮชคริปโตของลายเซ็นไม่ตรงกับเนื้อหาเอกสารอีกต่อไป + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**ทำไมวิธีนี้ถึงได้ผล** + +- `Signature.IsCompromised` ทำการตรวจสอบคริปโตเต็มรูปแบบโดยใช้ห่วงโซ่ใบรับรองที่ฝังอยู่ในลายเซ็น +- ตัวดำเนินการ LINQ `Any` จะหยุดที่ลายเซ็นแรกที่เสียหาย ทำให้การตรวจสอบมีประสิทธิภาพแม้เอกสารจะมีลายเซ็นหลายรายการ + +### จัดการหลายลายเซ็นแยกกัน + +หากต้องการทราบว่าลายเซ็นใดล้มเหลวโดยเฉพาะ ให้วนลูปแทนการใช้ `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**เคล็ดลับ:** เก็บผลการตรวจสอบพร้อมกับ `sig.Id` ลงฐานข้อมูลเพื่อการวิเคราะห์ฟอเรนสิกในภายหลัง + +## แสดงผลลัพธ์และพิจารณากรณีขอบ + +ด้านล่างเป็นโปรแกรมเต็มรูปแบบที่สามารถรันได้ ซึ่งรวมขั้นตอนทั้งหมดเข้าด้วยกัน มันโหลด PDF, แสดงรายการลายเซ็นทั้งหมด, ตรวจสอบความสมบูรณ์, และพิมพ์ผลลัพธ์ที่ชัดเจน + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง (ลายเซ็นที่ถูกต้อง)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**ผลลัพธ์ที่คาดหวัง (ลายเซ็นที่เสียหาย)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง + +| ปัญหา | วิธีแก้ | +|---------|----------| +| PDF ถูกป้องกันด้วยรหัสผ่าน | ส่งรหัสผ่านผ่าน `document.Encrypt.Decrypt(password)` ก่อนเข้าถึง `Signatures` | +| ไม่ได้ตั้งค่าไลเซนส์ Aspose.PDF | ใช้ `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` เพื่อหลีกเลี่ยงลายน้ำรุ่นทดลอง | +| PDF ขนาดใหญ่ทำให้ใช้หน่วยความจำสูง | ประมวลผลไฟล์ในโหมดสตรีม (`Document.Load(stream)`) แทนการโหลดทั้งไฟล์เข้าหน่วยความจำ | + +## สรุป + +คุณได้เรียนรู้วิธี **ตรวจสอบลายเซ็น PDF** ใน C# ด้วย Aspose.PDF, วิธี **ตรวจสอบลายเซ็นดิจิทัล PDF**, และวิธี **แสดงรายการลายเซ็น PDF** เพื่อการรายงานหรือการตรวจสอบ ตัวอย่างเต็มแสดงการโหลดเอกสาร, นับลายเซ็น, ตรวจสอบแต่ละลายเซ็นว่ามีการเสียหายหรือไม่, และจัดการกรณีขอบทั่วไป + +ขั้นตอนต่อไปที่คุณอาจสนใจ: + +- **ตรวจสอบโทเค็น timestamp** เพื่อยืนยันว่าลายเซ็นถูกสร้างก่อนใบรับรองหมดอายุ +- **ดึงใบรับรองของผู้ลงนาม** (`sig.Certificate`) เพื่อทำการตรวจสอบกับ trust‑store ของคุณเอง +- **รวมกับ ASP.NET Core** เพื่อปฏิเสธไฟล์ PDF ที่อัปโหลดแล้วไม่ผ่านการตรวจสอบโดยอัตโนมัติ + +ลองทดลองกับลายเซ็นหลายรายการ, โลจิกการตรวจสอบแบบกำหนดเอง, หรือไลบรารี PDF ทางเลือกอื่น หากคุณพบว่าคู่มือนี้มีประโยชน์ อย่าลืมแชร์ให้ทีมงานหรือเพิ่มเคล็ดลับของคุณในส่วนความคิดเห็น + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดและต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งรวมโค้ดทำงานเต็มรูปแบบพร้อมคำอธิบายทีละขั้นตอน เพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจวิธีการทำงานแบบต่าง ๆ ในโปรเจกต์ของคุณ + +- [วิธีตรวจสอบ PDF – ตรวจสอบลายเซ็น PDF ด้วย Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [ตรวจสอบลายเซ็น PDF ใน C# – คู่มือเต็มเพื่อ Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/thai/net/text-operations/_index.md index f62619b58f..4e7737ef3f 100644 --- a/pdf/thai/net/text-operations/_index.md +++ b/pdf/thai/net/text-operations/_index.md @@ -96,7 +96,7 @@ เรียนรู้วิธีเน้นข้อความในเอกสาร PDF อย่างมีประสิทธิภาพโดยใช้ Aspose.PDF .NET พร้อมด้วยคำแนะนำทีละขั้นตอนและตัวอย่างโค้ด ### [วิธีการวัดความกว้างของสตริงใน Aspose.PDF สำหรับ .NET: คำแนะนำเกี่ยวกับการใช้งาน Font และ TextState](./measuring-string-width-aspose-pdf-net/) -เรียนรู้วิธีการวัดความกว้างของสตริงอย่างแม่นยำโดยใช้ Aspose.PDF สำหรับ .NET ที่มีวัตถุ Font และ TextState คู่มือนี้ครอบคลุมขั้นตอนการใช้งานโดยละเอียด แอปพลิเคชันในทางปฏิบัติ และเคล็ดลับประสิทธิภาพ +เรียนรู้วิธีการวัดความกว้างของสตริงอย่างแม่นยำโดยใช้ Aspose.PDF สำหรับ .NET ที่มีวัตถุ Font และ TextState คู่มือนี้ครอบคลุมขั้นตอนการใช้งานโดยละเอียด แอปพลิเคชันในทางปฏิบัติและเคล็ดลับประสิทธิภาพ ### [วิธีการหมุนข้อความใน PDF โดยใช้ Aspose.PDF สำหรับ .NET: คำแนะนำทีละขั้นตอน](./rotate-text-aspose-pdf-net-guide/) เรียนรู้วิธีปรับปรุงเค้าโครงเอกสารของคุณด้วยการหมุนข้อความอย่างมีประสิทธิภาพด้วย Aspose.PDF สำหรับ .NET @@ -164,6 +164,9 @@ ### [ปรับแต่งข้อความใน PDF ที่มีแท็กโดยใช้ Aspose.PDF สำหรับ .NET | คำแนะนำสำหรับการสร้าง PDF ที่เข้าถึงได้และสวยงาม](./style-text-tagged-pdfs-aspose-pdf-net/) เรียนรู้วิธีการกำหนดรูปแบบข้อความในเอกสาร PDF ที่มีแท็กด้วย Aspose.PDF สำหรับ .NET คู่มือนี้ครอบคลุมถึงการติดตั้ง เทคนิค และแอปพลิเคชันจริงเพื่อเพิ่มการเข้าถึง +### [วิธีสรุป PDF ด้วย Aspose.Pdf.AI – คู่มือ](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +เรียนรู้วิธีสรุปเนื้อหา PDF อย่างรวดเร็วด้วย Aspose.Pdf.AI ด้วยคำแนะนำทีละขั้นตอน + ## แหล่งข้อมูลเพิ่มเติม - [Aspose.PDF สำหรับเอกสารประกอบ Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/thai/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/thai/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..081c21dee9 --- /dev/null +++ b/pdf/thai/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-08-08 +description: วิธีสรุป PDF ด้วย Aspose.Pdf.AI – เรียนรู้วิธีสรุป PDF ด้วย AI, สร้างสรุป + PDF, และบันทึกสรุปเป็น PDF. โค้ดเต็มและแนวปฏิบัติที่ดีที่สุด. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: th +lastmod: 2026-08-08 +og_description: วิธีสรุป PDF ด้วย Aspose.Pdf.AI การสอนนี้จะแสดงวิธีสรุป PDF ด้วย AI, + สร้างสรุป PDF, และบันทึกสรุปเป็น PDF ด้วยไม่กี่บรรทัดของ C# +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: วิธีสรุป PDF ด้วย Aspose.Pdf.AI – คู่มือขั้นตอนโดยละเอียด +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: วิธีสรุป PDF ด้วย Aspose.Pdf.AI – คู่มือ +url: /th/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีสรุป PDF ด้วย Aspose.Pdf.AI – คู่มือ + +หากคุณต้องการ **วิธีสรุป PDF** อย่างรวดเร็วและเชื่อถือได้ คุณสามารถให้โมเดล AI ทำงานหนักแทนได้ บทแนะนำนี้จะแสดงให้คุณเห็นวิธีสรุป PDF ด้วย AI, สร้างสรุป PDF, และบันทึกสรุปเป็น PDF โดยใช้ Aspose.Pdf.AI SDK สำหรับ .NET คุณจะได้รับตัวอย่างที่ทำงานได้ครบถ้วนพร้อมคำอธิบายของแต่ละบรรทัดเพื่อให้คุณปรับใช้โซลูชันนี้ในโปรเจกต์ของคุณ + +คู่มือครอบคลุม: + +* การเตรียมโฟลเดอร์ต้นทางและคีย์ API +* การสร้าง `OpenAIClient` ที่สื่อสารกับโมเดล +* การกำหนดค่าตัวเลือกการสรุป เช่น temperature และเส้นทางไฟล์เอกสาร +* การสร้าง `SummaryCopilot` และดึงข้อความสรุปแบบอะซิงโครนัส +* การบันทึกสรุปที่สร้างขึ้นกลับเป็นไฟล์ PDF + +ไม่จำเป็นต้องใช้บริการภายนอกนอกจาก endpoint ของ OpenAI และโค้ดทำงานได้กับ .NET 6+ และ Aspose.Pdf.AI 23.7 (หรือเวอร์ชันใหม่กว่า) + +## ข้อกำหนดเบื้องต้น + +* **.NET 6 SDK** (หรือเวอร์ชัน .NET ใดก็ได้ที่ใหม่กว่า) +* **Aspose.Pdf.AI for .NET** – ติดตั้งผ่าน NuGet: `dotnet add package Aspose.Pdf.AI` +* คีย์ **OpenAI API** ที่มีสิทธิ์เข้าถึงโมเดลที่คุณต้องการใช้ (เช่น `gpt‑4o`) +* ไฟล์ PDF ที่คุณต้องการสรุป (ตัวอย่างใช้ `SampleDocument.pdf`) + +ตรวจสอบให้แน่ใจว่าโฟลเดอร์ที่คุณระบุใน `dataDirectory` มีอยู่และแอปพลิเคชันมีสิทธิ์อ่าน/เขียน + +## ขั้นตอนที่ 1: ตั้งค่าโครงสร้างโปรเจกต์ + +สร้างโปรเจกต์คอนโซล (หรือผสานโค้ดนี้เข้ากับแอป .NET ที่มีอยู่). `Program.cs` ขั้นพื้นฐานจะมีลักษณะดังนี้: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### ทำไมโครงสร้างนี้ถึงสำคัญ + +* **`await using`** จะทำการปล่อย `OpenAIClient` ออกโดยอัตโนมัติ ปล่อยการเชื่อมต่อ HTTP +* **`Path.Combine`** สร้างเส้นทางที่ไม่ขึ้นกับระบบปฏิบัติการ ป้องกันบั๊กบน Windows vs. Linux +* **Temperature** ควบคุมความสร้างสรรค์; `0.5` ให้สรุปที่สมดุลและเป็นข้อเท็จจริง +* **`GetSummaryAsync`** คืนค่าเป็นข้อความธรรมดา, ส่วน `SaveSummaryAsync` สร้าง PDF ที่สมบูรณ์ซึ่งรักษาฟอนต์และรูปแบบ + +## ขั้นตอนที่ 2: ทำความเข้าใจตัวเลือกการสรุป + +The `OpenAISummaryCopilotOptions` class lets you fine‑tune the summarization process: + +| ตัวเลือก | วัตถุประสงค์ | ค่าที่พบบ่อย | +|--------|---------|----------------| +| `WithTemperature(double)` | ควบคุมความสุ่ม. `0.0` = กำหนดได้, `1.0` = สร้างสรรค์มาก. | `0.3‑0.7` สำหรับเอกสารธุรกิจ | +| `WithDocument(string)` | เส้นทางไปยัง PDF ต้นทาง. ต้องเป็นไฟล์ที่อ่านได้. | เส้นทางแบบ absolute หรือ relative ใดก็ได้ | +| `WithPrompt(string)` *(optional)* | พรอมต์ที่กำหนดเองเพื่อชี้นำโมเดล. | “สรุปข้อค้นพบสำคัญใน 150 คำ.” | + +หากคุณมี **PDF ขนาดใหญ่** (มากกว่า 10 MB หรือหลายหน้า) ควรพิจารณาแยกเอกสารเป็นส่วนย่อยก่อนทำการสรุปเพื่อหลีกเลี่ยงข้อผิดพลาดจากขีดจำกัดโทเคน SDK ไม่ทำการแยกอัตโนมัติ; คุณสามารถใช้ `PdfDocument` จาก `Aspose.Pdf` เพื่อดึงหน้าและป้อนทีละหน้า + +## ขั้นตอนที่ 3: รันโค้ดและตรวจสอบผลลัพธ์ + +1. วาง `SampleDocument.pdf` ไว้ในโฟลเดอร์ `Data` ที่คุณอ้างอิง +2. แทนที่ `"YOUR_API_KEY"` ด้วยคีย์ OpenAI ของคุณจริง +3. รันคำสั่ง `dotnet run` + +คุณควรเห็นสองส่วนในคอนโซล: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +เปิด `Summary_out.pdf` ด้วยโปรแกรมดู PDF ใดก็ได้ – จะมีข้อความสรุปเดียวกันโดยใช้ฟอนต์เริ่มต้น PDF นี้สามารถค้นหาได้ทั้งหมดเนื่องจาก SDK ฝังข้อความเป็นหน้า PDF มาตรฐาน + +## ขั้นตอนที่ 4: การปรับใช้ทั่วไปและการจัดการกรณีขอบ + +### สรุปเฉพาะส่วนของเอกสาร + +หากคุณต้องการ **สรุป pdf ด้วย ai** สำหรับบทเฉพาะ ให้ดึงช่วงนั้นก่อน: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +จากนั้นตั้งค่า `WithDocument` ให้ชี้ไปที่ `Chapter5.pdf`. + +### ปรับความยาวของสรุป + +คุณสามารถกำหนดความยาวโดยเพิ่มพรอมต์ที่กำหนดเอง: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### การจัดการข้อผิดพลาดของ API + +ข้อผิดพลาดของเครือข่ายหรือขีดจำกัดโควต้าจะทำให้เกิด `Aspose.Pdf.AI.Exceptions.AIException`. ห่อการเรียกในบล็อก `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### การบันทึกสรุปในรูปแบบที่กำหนดเอง + +`SaveSummaryAsync` เขียนเป็นข้อความธรรมดา. หากต้องการจัดรูปแบบ PDF (เพิ่มหัวเรื่อง, ส่วนหัว, หรือแบรนด์) ให้สร้าง `PdfDocument` ใหม่และแทรกสรุปด้วยตนเอง: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## ขั้นตอนที่ 5: เคล็ดลับด้านประสิทธิภาพและแนวปฏิบัติที่ดีที่สุด + +* **Reuse the `OpenAIClient`** สำหรับการสรุปหลายครั้งในกระบวนการเดียว – การสร้างคลไอเอนท์นั้นราคาถูก แต่การใช้ `HttpClient` เดิมซ้ำจะลดการใช้ซ็อกเก็ตเกิน +* **Cache the summary** หาก PDF ต้นทางไม่เปลี่ยน; คุณสามารถเก็บข้อความในฐานข้อมูลและข้ามการเรียก API + +## คุณควรเรียนรู้อะไรต่อไป? + +บทแนะนำต่อไปนี้ครอบคลุมหัวข้อที่เกี่ยวข้องอย่างใกล้ชิดซึ่งต่อยอดจากเทคนิคที่แสดงในคู่มือนี้ แต่ละแหล่งข้อมูลมีตัวอย่างโค้ดทำงานครบถ้วนพร้อมคำอธิบายทีละขั้นตอนเพื่อช่วยให้คุณเชี่ยวชาญฟีเจอร์ API เพิ่มเติมและสำรวจแนวทางการนำไปใช้ทางเลือกในโปรเจกต์ของคุณ + +- [วิธีดึงและบันทึกหน้าที่เฉพาะของ PDF ด้วย Aspose.PDF สำหรับ .NET - คู่มือครบวงจร](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [วิธีดึงและบันทึกไฟล์แนบ PDF ด้วย Aspose.PDF .NET: คู่มือครบวงจร](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [วิธีแปลง HTML เป็น PDF ด้วย Aspose.PDF .NET: คู่มือเต็ม](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/conversion-export/_index.md b/pdf/turkish/net/conversion-export/_index.md index 4325e37c54..b4c2dbe1d3 100644 --- a/pdf/turkish/net/conversion-export/_index.md +++ b/pdf/turkish/net/conversion-export/_index.md @@ -224,6 +224,9 @@ Aspose.PDF for .NET kullanarak PDF'den HTML'e dönüştürmede ustalaşın. Öze ### [Aspose.PDF for .NET ile PDF'yi HTML'ye Dönüştürme](./pdf-to-html-conversion-aspose-dot-net/) Aspose.PDF Net için bir kod öğreticisi +### [Aspose.PDF ile PDF'yi HTML Olarak Kaydetme – Adım Adım Kılavuz](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Aspose.PDF for .NET kullanarak PDF dosyalarını HTML formatına nasıl kaydedeceğinizi adım adım öğrenin. + ### [Aspose.PDF Kullanarak .NET'te PDF'yi TIFF'e Dönüştürme: Adım Adım Kılavuz](./pdf-to-tiff-conversion-aspose-pdf-net/) Aspose.PDF for .NET kullanarak PDF belgelerini TIFF görüntülerine nasıl dönüştüreceğinizi öğrenin. Özel renk derinliklerinde ve gelişmiş görüntü işleme tekniklerinde ustalaşın. diff --git a/pdf/turkish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/turkish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..9a84aa0822 --- /dev/null +++ b/pdf/turkish/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF kullanarak C#'de PDF'yi HTML olarak kaydedin. PDF'yi HTML'ye + nasıl dönüştüreceğinizi, raster görüntüleri atlamayı ve yaygın kenar durumlarını + nasıl ele alacağınızı öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: tr +lastmod: 2026-08-08 +og_description: Aspose.PDF kullanarak PDF'yi HTML olarak kaydedin. Bu kılavuz, PDF'yi + HTML'ye nasıl dönüştüreceğinizi, raster görüntüleri atlayacağınızı ve yaygın hatalardan + nasıl kaçınacağınızı gösterir. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Aspose.PDF ile PDF'yi HTML olarak kaydedin – tam C# öğreticisi +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Aspose.PDF ile PDF'yi HTML olarak kaydedin – adım adım rehber +url: /tr/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'yi HTML olarak Kaydetme Aspose.PDF ile – adım adım rehber + +If you need to **PDF'yi HTML olarak kaydet** quickly, this tutorial shows you exactly how to do it with Aspose.PDF for .NET. Whether you are building a document‑viewer web app or exporting reports for SEO‑friendly indexing, you’ll see a complete, runnable solution that converts PDF to HTML while giving you fine‑grained control over raster images. + +In addition to the primary task, we’ll also cover the **aspose pdf html conversion** options that let you skip raster images, adjust CSS handling, and manage large documents efficiently. By the end of this guide you’ll have a self‑contained program you can drop into any .NET project. + +## Önkoşullar + +* .NET 6.0 SDK veya daha yeni bir sürüm (kod .NET Core ve .NET Framework ile de çalışır) +* Visual Studio 2022 veya C# destekleyen herhangi bir IDE +* Aspose.PDF for .NET lisansı (ücretsiz deneme sürümü değerlendirme için çalışır) +* Koddan referans verebileceğiniz bir klasöre yerleştirilmiş `report.pdf` adlı bir PDF dosyası + +`Aspose.Pdf` dışındaki ek NuGet paketlerine gerek yok. + +## Adım 1: Aspose.PDF NuGet paketini kurun + +Proje klasörünüzde terminali açın ve şu komutu çalıştırın: + +```bash +dotnet add package Aspose.Pdf +``` + +Paket, `Aspose.Pdf` ad alanını ekler; bu ad alanı **convert pdf to html** işlemleri için kullanılan `Document` sınıfını ve `HtmlSaveOptions` tipini içerir. + +## Adım 2: Bir konsol projesi oluşturun ve using yönergelerini ekleyin + +Henüz bir tane yoksa yeni bir konsol uygulaması oluşturun: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Ardından `Program.cs` dosyasını açın ve gerekli ad alanlarını ekleyin: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Bu yönergeler, temel PDF API'sine ve **aspose convert pdf html** sürecini kontrol eden HTML kaydetme seçeneklerine erişmenizi sağlar. + +## Adım 3: PDF belgesini yükleyin + +İlk işlem satırı, kaynak PDF'yi bir `Aspose.Pdf.Document` nesnesine okur. Bu nesne, tüm PDF dosyasını bellekte temsil eder ve kaydetme, düzenleme ve içerik çıkarma yöntemleri sunar. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*Why this matters*: *Neden önemli*: Belgeyi bir kez yüklemek, özellikle büyük PDF'lerde bellek kullanımını öngörülebilir kılar. Dosya bulunamazsa, Aspose bir `FileNotFoundException` fırlatır; bu yüzden yolun doğru olduğundan emin olun. + +## Adım 4: HTML kaydetme seçeneklerini yapılandırın + +`HtmlSaveOptions`, PDF'nin nasıl dönüştürüleceğini ince ayar yapmanıza olanak tanır. Bu öğreticide çıktıyı hafif tutmak için raster görüntüleri atlıyoruz, ancak ihtiyacınız varsa modu `EmbedAll` olarak değiştirebilirsiniz. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Önemli noktalar**: + +* `RasterImagesSavingMode.Skip`, dönüşüm sırasında Aspose'un bitmap görüntüleri (JPEG, PNG) yok saymasını sağlar. Bu, kaynak PDF taranmış sayfalar içerdiğinde ve HTML görünümünde bu sayfalara ihtiyaç duymadığınızda idealdir. +* Görüntüleri ayrı dosyalar olarak kaydetmek isterseniz `EmbedAll` veya `External` moduna geçebilirsiniz. +* `ResourcesFolder` özelliği yalnızca görüntüler dışarıda kaydedildiğinde anlam kazanır. + +## Adım 5: Belgeyi HTML olarak kaydedin + +Şimdi yapılandırılmış seçenekleri kullanarak HTML dosyasını diske yazıyorsunuz. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Bu çağrı tamamlandığında, `report.html` orijinal PDF'den korunan metin içeriği, vektör grafikleri ve düzeni içerir, ancak raster görüntüler yoktur. Sonucu doğrulamak için dosyayı bir tarayıcıda açabilirsiniz. + +## Beklenen çıktı + +`report.html` dosyasını Chrome veya Edge'de açtığınızda şunları görmelisiniz: + +* Tüm başlıklar, paragraflar ve vektör şekiller doğru şekilde render edilir. +* Raster görüntüler için `` etiketleri yoktur (`Skip` modu nedeniyle atlanırlar). +* Seçtiğiniz seçeneğe bağlı olarak satır içi ya da ayrı bir stil sayfasında temiz, minimal CSS. + +Görüntülerin atlandığını doğrulamanız gerekiyorsa, sayfa kaynağını (`Ctrl+U`) inceleyin. `` girdisi bulamayacaksınız. + +## Adım 6: Yaygın kenar durumlarını ele alın + +### 6.1 Büyük PDF'ler (> 100 MB) + +Çok büyük dosyalar için, bellek baskısını azaltmak amacıyla akışı (streaming) etkinleştirin: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming, HTML parçalarını doğrudan diske yazar, böylece tüm belgenin bellekte tutulmasını önler. + +### 6.2 Şifre korumalı PDF'ler + +Kaynak PDF şifrelenmişse, kaydetmeden önce şifreyi sağlayın: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Şifre çözmeden kaydetmeye çalışmak `InvalidPasswordException` hatası fırlatır. + +### 6.3 Unicode karakterler + +Aspose.PDF otomatik olarak Unicode yazı tiplerini gömer, ancak tutarlı render için belirli bir yazı tipini zorlayabilirsiniz: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Çok sayfalı dosyalar için özel dosya adlandırma + +Her PDF sayfasını ayrı bir HTML dosyası olarak istiyorsanız, şu ayarı yapın: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Bu, `report_page_1.html`, `report_page_2.html` vb. dosyaları oluşturur; bu, web uygulamalarında sayfalama için kullanışlı olabilir. + +## Tam, çalıştırılabilir örnek + +Aşağıda, tartışılan tüm adımları içeren tam program yer almaktadır. `Program.cs` dosyasına kopyalayın, yolları ayarlayın ve `dotnet run` komutunu çalıştırın. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Doğrulama**: Çalıştırdıktan sonra, konsol başarı mesajını yazdırır. Oluşturulan HTML dosyasını bir tarayıcıda açarak metin ve vektör grafiklerin doğru göründüğünü ve raster görüntülerin atlandığını doğrulayın. + +## Profesyonel ipuçları ve tuzaklar + +* **Pro tip**: Daha sonra raster görüntülere ihtiyacınız olursa, `RasterImagesSavingMode` değerini `External` olarak değiştirin ve `ResourcesFolder` ayarlayın. Bu, çıkarılan bitmap'leri içeren bir `images` alt klasörü oluşturur. +* **Dikkat edilmesi gereken**: Tarama görüntülerine yoğun şekilde bağlı PDF'lerde varsayılan `Skip` modunu kullanmak, o görüntülerin yer alması gereken boş alanlar oluşturur. Belgelerinizin temsilci bir örneğiyle her zaman test edin. +* **Performans ipucu**: Birden fazla belge için tek bir `HtmlSaveOptions` örneğini yeniden kullanmak, toplu dönüşümlerde nesne oluşturma yükünü azaltır. +* **Sürüm kontrolü**: Gösterilen API, Aspose.PDF for .NET sürüm 23.9 ve üzeri ile çalışır. Daha eski sürümler, biraz farklı bir enum adıyla `HtmlSaveOptions.RasterImagesSavingMode` kullanabilir. + +## Sonuç + +Artık Aspose.PDF kullanarak **PDF'yi HTML olarak kaydetmeyi**, raster görüntü işleme kontrolünü ve büyük dosyalar, şifre koruması ve sayfa bazlı HTML çıktısı gibi tipik zorlukları nasıl ele alacağınızı biliyorsunuz. Bu eksiksiz çözüm, PDF‑to‑HTML dönüşümünü herhangi bir C# uygulamasına güvenle entegre etmenizi sağlar. + +### Sıradaki adım ne? + +* **aspose pdf html conversion**'ı keşfedin; yazı tiplerini gömmek ve CSS'yi özelleştirmek için. +* Bu dönüşümü bir web API ile birleştirerek HTML'yi isteğe bağlı olarak sunun. +* Ters yönü deneyin—**convert pdf to html** ve ardından PDF'ye geri dönüştürerek dönüşüm doğruluğunu test edin. + +Seçeneklerle denemeler yapmaktan çekinmeyin ve bulgularınızı yorumlarda ya da Aspose forumlarında paylaşın. Kodlamanın tadını çıkarın! + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini öğrenmenize ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmenize yardımcı olmak için adım adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [Convert PDF to HTML in .NET Using Aspose.PDF Without Saving Images](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [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/) +- [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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/digital-signatures/_index.md b/pdf/turkish/net/digital-signatures/_index.md index d1543118fd..71f266a68c 100644 --- a/pdf/turkish/net/digital-signatures/_index.md +++ b/pdf/turkish/net/digital-signatures/_index.md @@ -58,6 +58,10 @@ C# kullanarak PDF dosyalarındaki dijital imzaları nasıl doğrulayacağınız ### [PDF'yi Doğrulama – Aspose ile PDF İmzasını Doğrulama](./how-to-verify-pdf-validate-pdf-signature-with-aspose/) Aspose.PDF for .NET kullanarak PDF dosyalarında dijital imzaları nasıl doğrulayacağınızı adım adım öğrenin. + +### [Aspose.PDF ile PDF'yi doğrulama – C#'ta PDF imza geçerliliğini kontrol edin](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +C# ile PDF imzasının geçerliliğini kontrol etmeyi öğrenin. + ### [PDF Belgesi Yükle C# – PDF/X‑4'e Dönüştür ve İmzaları Listele](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) C# kullanarak PDF belgesini yükleyin, PDF/X‑4 formatına dönüştürün ve imzaları listeleyin. diff --git a/pdf/turkish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/turkish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..233f5e5cd3 --- /dev/null +++ b/pdf/turkish/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF kullanarak PDF nasıl doğrulanır ve PDF dijital imzası nasıl + doğrulanır. PDF imzasını hızlıca kontrol etmek için bu adım adım rehberi izleyin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: tr +lastmod: 2026-08-08 +og_description: Aspose.PDF kullanarak PDF nasıl doğrulanır. PDF dijital imzasını doğrulamayı + ve PDF imza geçerliliğini birkaç satır C# kodu ile öğrenin. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: PDF nasıl doğrulanır – Aspose.PDF ile C#’ta PDF imza geçerliliğini kontrol + et +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Aspose.PDF ile PDF doğrulama – C#'ta PDF imza geçerliliğini kontrol etme +url: /tr/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF ile PDF doğrulama – C#'ta pdf imza geçerliliğini kontrol etme + +Dijital imzalar içeren **PDF dosyalarını nasıl doğrularsınız** sorusuna bu öğretici tam bir çözüm sunar. Bir PDF dosyasını nasıl yükleyeceğinizi, bir sertifika doğrulayıcı oluşturacağınızı ve Aspose.PDF for .NET ile pdf imza geçerliliğini nasıl kontrol edeceğinizi öğreneceksiniz. + +PDF dijital imzasını doğrulamak, uyumluluk, faturalama ve güvenli belge değişimi için yaygın bir gereksinimdir. Bu kılavuzun sonunda, imzalı bir PDF'in güvenilir olup olmadığını emin bir şekilde doğrulayabilecek ve eksik sertifikalar veya birden fazla imza gibi tipik kenar durumlarını nasıl ele alacağınızı anlayacaksınız. + +## Önkoşullar + +Başlamadan önce şunların yüklü olduğundan emin olun: + +- .NET 6.0 veya daha yeni bir sürüm +- Visual Studio 2022 gibi bir IDE (C# destekleyen herhangi bir editör) +- **Aspose.PDF for .NET** lisanslı bir kopya (değerlendirme için ücretsiz deneme sürümü yeterli) +- İmzalı bir PDF dosyası (`signed.pdf`) ve imza özel bir CA'ya dayanıyorsa ilgili güvenilir sertifika (`trustedCertificate.pfx`) + +`Aspose.PDF` dışındaki ek NuGet paketlerine ihtiyaç yoktur. + +## Adım 1: Aspose.PDF'i Yükleyin + +Proje klasörünüzde bir terminal açın ve şu komutu çalıştırın: + +```bash +dotnet add package Aspose.PDF +``` + +Bu komut, daha sonra kullanılacak `Document` ve `CertificateValidator` sınıflarını içeren en yeni Aspose.PDF kütüphanesini ekler. + +## Adım 2: PDF belgesini yükleyin + +PDF yüklemek, **pdf nasıl programatik olarak yüklenir** sorusunun ilk adımıdır. `Document` yapıcı metodu bir dosya yolu, bir akış veya bir bayt dizisi alabilir. Tam bir yol kullanmak örneği net tutar. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Neden önemli:** `Document` nesnesi, PDF dosyasının tamamını bellekte temsil eder. Dosyayı yüklemeden, **pdf imzasını kontrol et**mek için gereken `Signatures` koleksiyonuna erişemezsiniz. + +## Adım 3: Sertifika doğrulayıcıyı hazırlayın + +Bir dijital imza, yalnızca imzalayan sertifika sizin güvendiğiniz bir kök sertifikaya zincirleniyorsa güvenilir kabul edilir. `CertificateValidator`, Aspose.PDF'i güvenilir bir sertifika deposuna ya da belirli bir PFX dosyasına yönlendirmenizi sağlar. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +PDF'iniz Windows'un zaten güvendiği bir genel CA kullanıyorsa, `certPath` parametresini atlayabilir ve `CertificateValidator`'ı varsayılan yapıcı ile örnekleyebilirsiniz. Özel bir PFX sağlamak, dahili PKI ortamları için faydalıdır. + +## Adım 4: İlk dijital imzayı doğrulayın + +Bir PDF birden fazla imza içerebilir. Basitlik açısından bu öğreticide ilk imza (`Signatures[0]`) doğrulanır. `Validate` metodu, imzanın kriptografik olarak bütün olduğu **ve** imzalayan sertifikanın güvenilir olduğu durumda `true` döner. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**Arka planda ne olur:** +- Metod, imzalı içeriğin hash'ini imza değeriyle karşılaştırır. +- Sağlanan doğrulayıcıyı kullanarak sertifika zincirini oluşturur. +- Doğrulayıcı buna göre yapılandırılmışsa iptal durumu (CRL/OCSP) değerlendirilir. + +### Birden fazla imzayı ele alma + +PDF'inizde birden fazla imza varsa, `Signatures` koleksiyonu üzerinde döngü yapın: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Bu desen, **pdf imzasını kontrol et**mek için her bir imzayı incelemenize ve ayrı ayrı sonuçları raporlamanıza olanak tanır. + +## Adım 5: Doğrulama sonucunu çıktılayın + +Son olarak, sonucu konsola yazdırın. Üretim kodunda muhtemelen sonucu loglayacak ya da geçersiz bir imza için bir istisna fırlatacaksınız. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Beklenen konsol çıktısı + +``` +Valid +``` + +veya + +``` +Invalid +``` + +Mesaj, `Validate` tarafından döndürülen boolean değeri yansıtır. “Invalid” (Geçersiz) bir sonuç, belgenin değiştirilmiş olabileceğini, güvenilmeyen bir sertifika kullanıldığını veya imzalayan sertifikanın süresinin dolmuş olduğunu gösterebilir. + +## Adım 6: Yaygın tuzaklar ve en iyi uygulama ipuçları + +### 1. Güvenilir sertifikanın eksik olması +`Invalid` alıyor ve imzanın güvenilir olması gerektiğini biliyorsanız, doğru kök sertifikanın `CertificateValidator`'a sağlandığından emin olun. Birden fazla kök için `X509Certificate2Collection` kabul eden aşırı yüklemeyi kullanın. + +### 2. Harici referanslı imza +Bazı imzalar harici içeriği (ör. ekli bir dosya) kapsar. Harici kaynakların erişilebilir olduğundan emin olun; aksi takdirde hash doğrulaması başarısız olur. + +### 3. Zaman damgası doğrulama +Bir imza zaman damgası tokenı içerebilir. Bunu doğrulamak için doğrulayıcıyı zaman damgası otoritesi (TSA) sertifikalarını kontrol edecek şekilde yapılandırın: + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Büyük PDF'lerde performans +Yüzlerce sayfalık bir PDF'i yüklemek bellek tüketebilir. Yalnızca imza verisine ihtiyacınız varsa, sayfaları render etmeden imza sözlüğünü çıkarmak için `PdfFileEditor` kullanın. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. İş parçacığı güvenliği +`Document` örnekleri iş parçacığı‑güvenli değildir. Paralel olarak birçok PDF doğrularken her iş parçacığı için yeni bir `Document` oluşturun. + +## Tam, çalıştırılabilir örnek + +Aşağıda, dosya yollarını güncelledikten sonra kopyalayıp çalıştırabileceğiniz tam program yer almaktadır. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Programı çalıştırmak**, her imza için bir satır yazdırır ve PDF'in **pdf dijital imzasını doğrulama** kontrolünü net bir şekilde gösterir. + +## Sonuç + +Artık Aspose.PDF for .NET kullanarak dijital imza içeren **PDF dosyalarını nasıl doğrularsınız** biliyorsunuz. Öğreticide PDF yükleme, bir sertifika doğrulayıcı yapılandırma, pdf imza geçerliliğini kontrol etme, birden fazla imzayı ele alma ve yaygın sorunları giderme konuları ele alındı. + +Sonraki adımda **PDF nasıl imzalanır**, **zaman damgası tokenları nasıl eklenir** ve **imzalı içerik nasıl çıkarılır** gibi ilgili konuları keşfedin. Bu eklemeler, C# içinde tam uçtan uca güvenli belge iş akışı oluşturmanıza olanak tanır. + +--- + + +## Bir Sonraki Öğrenmeniz Gerekenler + + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanarak yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanız ve projelerinizde alternatif uygulama yaklaşımlarını keşfetmeniz için adım‑adım açıklamalar içeren tam çalışan kod örnekleri sunar. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [How to Extract PDF Signature Information Using Aspose.PDF .NET: A Step‑By‑Step Guide](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [How to Remove PDF Digital Signatures Using Aspose.PDF .NET | Complete Guide](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/turkish/net/document-conversion/_index.md index 2e42848041..2c5b5f6ea3 100644 --- a/pdf/turkish/net/document-conversion/_index.md +++ b/pdf/turkish/net/document-conversion/_index.md @@ -23,41 +23,42 @@ Dönüştürme ayarlarını nasıl belirleyeceğinizi, metin ve görüntüleri n | --- | --- | | [PDFA'ya Ek Ekle](./add-attachment-to-pdfa/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak bir PDF/A belgesine eklerin nasıl ekleneceğini öğrenin. | [CGM'den PDF Dosyalarına](./cgm-to-pdf/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak CGM dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Hem geliştiriciler hem de tasarımcılar için mükemmel. | -| [EPUB'dan PDF'e](./epub-to-pdf/) Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak EPUB'ı PDF'ye nasıl dönüştüreceğinizi öğrenin. Kolay, etkili ve tüm kullanıcılar için mükemmel. | -| [SVG Boyutlarını Alın](./get-svg-dimensions/) | Bu adım adım kılavuzla SVG dosyalarını PDF'ye dönüştürmek için Aspose.PDF for .NET'i nasıl kullanacağınızı öğrenin. PDF'leri düzenlemek isteyen geliştiriciler için mükemmel. | -| [HTML'den PDF'e](./html-to-pdf/) | Bu kapsamlı adım adım kılavuzla Aspose.PDF for .NET'i kullanarak HTML'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. -| [Markdown'dan PDF'e](./markdown-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak Markdown'ı PDF'ye nasıl dönüştüreceğinizi öğrenin. Belge dönüşümünü kolaylaştırmak isteyen geliştiriciler için mükemmeldir. | -| [MHT PDF'ye](./mht-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak MHT dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Kolay ve etkili belge dönüştürme. | -| [Görüntü Boyutlarına Göre Sayfa Yönlendirmesi](./page-orientation-according-image-dimensions/) Bu adım adım kılavuzda, Aspose.PDF for .NET ile PDF'lerin nasıl oluşturulacağını ve sayfa yönünün görüntü boyutlarına göre nasıl ayarlanacağını öğrenin. -| [PCL'den PDF'e](./pcl-to-pdf/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PCL dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Hem geliştiriciler hem de işletmeler için mükemmel. | -| [PDFA'dan PDF'e](./pdfa-to-pdf/) | Bu kapsamlı, adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF/A'yı PDF'ye nasıl dönüştüreceğinizi öğrenin. | -| [PDF'den DOC'a](./pdf-to-doc/) | Bu kapsamlı kılavuzda Aspose.PDF for .NET kullanarak PDF'yi DOC'ye nasıl dönüştüreceğinizi öğrenin. Adım adım talimatlar ve ipuçları dahildir. | -| [PDF'den EPUB'a](./pdf-to-epub/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak PDF'yi EPUB'a nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve içerik oluşturucular için mükemmel. | -| [PDF'den HTML'ye](./pdf-to-html/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi HTML'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve içerik oluşturucular için mükemmel. | -| [PDF'den PDFA'ya](./pdf-to-pdfa/) Bu adım adım eğitimle Aspose.PDF for .NET kullanarak PDF dosyalarını PDF/A formatına nasıl dönüştüreceğinizi öğrenin. | -| [PDF'den PDFA3b'ye](./pdf-to-pdfa3b/) | Bu adım adım kılavuzda Aspose.PDF for .NET ile PDF dosyalarını zahmetsizce PDF/A-3B formatına dönüştürmeyi öğrenin. +| [EPUB'dan PDF'e](./epub-to-pdf/) Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak EPUB'ı PDF'ye nasıl dönüştüreceğinizi öğrenin. Kolay, etkili ve tüm kullanıcılar için mükemmel. | +| [SVG Boyutlarını Alın](./get-svg-dimensions/) | Bu adım adım kılavuzla SVG dosyalarını PDF'ye dönüştürmek için Aspose.PDF for .NET'i nasıl kullanacağınızı öğrenin. PDF'leri düzenlemek isteyen geliştiriciler için mükemmel. | +| [HTML'den PDF'e](./html-to-pdf/) | Bu kapsamlı adım adım kılavuzla Aspose.PDF for .NET'i kullanarak HTML'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. | +| [Markdown'dan PDF'e](./markdown-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak Markdown'ı PDF'ye nasıl dönüştüreceğinizi öğrenin. Belge dönüşümünü kolaylaştırmak isteyen geliştiriciler için mükemmeldir. | +| [MHT PDF'ye](./mht-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak MHT dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Kolay ve etkili belge dönüştürme. | +| [Görüntü Boyutlarına Göre Sayfa Yönlendirmesi](./page-orientation-according-image-dimensions/) Bu adım adım kılavuzda, Aspose.PDF for .NET ile PDF'lerin nasıl oluşturulacağını ve sayfa yönünün görüntü boyutlarına göre nasıl ayarlanacağını öğrenin. | +| [PCL'den PDF'e](./pcl-to-pdf/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PCL dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Hem geliştiriciler hem de işletmeler için mükemmel. | +| [PDFA'dan PDF'e](./pdfa-to-pdf/) | Bu kapsamlı, adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF/A'yı PDF'ye nasıl dönüştüreceğinizi öğrenin. | +| [PDF'den DOC'a](./pdf-to-doc/) | Bu kapsamlı kılavuzda Aspose.PDF for .NET kullanarak PDF'yi DOC'ye nasıl dönüştüreceğinizi öğrenin. Adım adım talimatlar ve ipuçları dahildir. | +| [PDF'den EPUB'a](./pdf-to-epub/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak PDF'yi EPUB'a nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve içerik oluşturucular için mükemmel. | +| [PDF'den HTML'ye](./pdf-to-html/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi HTML'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve içerik oluşturucular için mükemmel. | +| [PDF'den PDFA'ya](./pdf-to-pdfa/) Bu adım adım eğitimle Aspose.PDF for .NET kullanarak PDF dosyalarını PDF/A formatına nasıl dönüştüreceğinizi öğrenin. | +| [PDF'den PDFA3b'ye](./pdf-to-pdfa3b/) | Bu adım adım kılavuzda Aspose.PDF for .NET ile PDF dosyalarını zahmetsizce PDF/A-3B formatına dönüştürmeyi öğrenin. | | [PDF'den PNG'ye Yazı Tipi İpucu](./pdf-to-png-font-hinting/) | Aspose.PDF for .NET'i kullanarak PDF'yi font ipuçlarıyla PNG'ye dönüştürmeyi kolay adım adım bir kılavuzda öğrenin. | | [PDF'den PNG'ye Dönüştürme – C#'ta PDF Sayfalarını PNG'ye Çevirme](./pdf-to-png-tutorial-convert-pdf-pages-to-png-in-c/) | Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak PDF sayfalarını PNG formatına nasıl dönüştüreceğinizi öğrenin. | -| [PDF'den PPT'ye](./pdf-to-ppt/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi PPT'ye nasıl dönüştüreceğinizi öğrenin. Kolay, etkili ve sunumlar için mükemmel. | -| [PDF'den SVG'ye](./pdf-to-svg/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak PDF dosyalarını SVG formatına nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve tasarımcılar için mükemmel. | -| [PDF'den TeX'e](./pdf-to-tex/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi TeX'e nasıl dönüştüreceğinizi öğrenin. Belge işleme becerilerini geliştirmek isteyen geliştiriciler için mükemmeldir. | -| [PDF'den XLS'e](./pdf-to-xls/) Aspose.PDF for .NET kullanarak PDF dosyalarını kolayca XLS formatına dönüştürün. Sorunsuz veri çıkarma için adım adım kılavuzumuzu izleyin. | -| [PDF'den XML'e](./pdf-to-xml/) | Bu kapsamlı eğitimde Aspose.PDF for .NET kullanarak PDF'yi XML'e nasıl dönüştüreceğinizi öğrenin. Kod örneklerinin de dahil olduğu adım adım kılavuz. | -| [PDF'den XPS'e](./pdf-to-xps/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi XPS'e nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve belge işleme meraklıları için mükemmel. | -| [PDF'ye Son Söz](./postscript-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak Postscript dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Her seviyedeki geliştirici için mükemmel. | -| [HTML'den PDF'e Geçiş Sırasında Kimlik Bilgilerini Sağlayın](./provide-credentials-during-html-to-pdf/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak HTML'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. Belge oluşturmayı kolaylaştırmak isteyen geliştiriciler için mükemmeldir. | -| [Html'den Dönüştürdükten Sonra Köprü Bağlantılarını Kaldır](./remove-hyperlinks-after-converting-from-html/) Aspose.PDF for .NET'i kullanarak HTML belgelerini PDF'ye dönüştürdükten sonra köprü metinlerinin nasıl kaldırılacağını bu adım adım kılavuzda öğrenin. -| [Eksik Yazı Tiplerini Değiştir](./replace-missing-fonts/) | Bu adım adım kılavuzla Aspose.PDF for .NET'i kullanarak PDF belgelerindeki eksik yazı tiplerini nasıl değiştireceğinizi öğrenin. -| [Varsayılan Yazı Tipi Adını Ayarla](./set-default-font-name/) | Aspose.PDF for .NET kullanarak PDF'leri resimlere dönüştürürken varsayılan yazı tipi adının nasıl ayarlanacağını öğrenin. Bu kılavuz ön koşulları, adım adım talimatları ve SSS'leri kapsar. | -| [SVG'den PDF'e](./svg-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak SVG'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve tasarımcılar için mükemmel. | -| [TeX'ten PDF'e](./tex-to-pdf/) | Bu ayrıntılı, adım adım kılavuzla Aspose.PDF for .NET kullanarak TeX'i PDF'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve belge profesyonelleri için mükemmel. | -| [Metinden PDF'e](./text-to-pdf/) Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak metin dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Uygulamalarını geliştirmek isteyen geliştiriciler için mükemmeldir. | -| [TIFF'ten PDF'e Performans İyileştirme](./tiff-to-pdf-performance-improvement/) | TIFF görüntülerini Aspose.PDF for .NET kullanarak PDF'ye verimli bir şekilde dönüştürün. Büyük görüntü dosyalarını sorunsuz bir şekilde işlemek için performans optimizasyon ipuçlarıyla adım adım öğrenin. | -| [Web Sayfasını PDF'ye Dönüştür](./web-page-to-pdf/) | Bu detaylı, adım adım eğitimde Aspose.PDF for .NET kullanarak web sayfalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. -| [XML'den PDF'e](./xml-to-pdf/) | Bu kapsamlı adım adım eğitimde, kod örnekleri ve detaylı açıklamalarla birlikte Aspose.PDF for .NET kullanarak XML'i PDF'ye nasıl dönüştüreceğinizi öğrenin. -| [XML'den PDFSet Görüntü Yoluna](./xml-to-pdfset-image-path/) | Aspose.PDF for .NET kullanarak XML'i PDF'ye zahmetsizce nasıl dönüştüreceğinizi öğrenin. Bu ayrıntılı kılavuz, kurulumdan tamamlanmaya kadar süreci adım adım anlatır. | +| [PDF'den PPT'ye](./pdf-to-ppt/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi PPT'ye nasıl dönüştüreceğinizi öğrenin. Kolay, etkili ve sunumlar için mükemmel. | +| [PDF'den SVG'ye](./pdf-to-svg/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak PDF dosyalarını SVG formatına nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve tasarımcılar için mükemmel. | +| [PDF'den TeX'e](./pdf-to-tex/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi TeX'e nasıl dönüştüreceğinizi öğrenin. Belge işleme becerilerini geliştirmek isteyen geliştiriciler için mükemmeldir. | +| [PDF'den XLS'e](./pdf-to-xls/) Aspose.PDF for .NET kullanarak PDF dosyalarını kolayca XLS formatına dönüştürün. Sorunsuz veri çıkarma için adım adım kılavuzumuzu izleyin. | +| [PDF'den XML'e](./pdf-to-xml/) | Bu kapsamlı eğitimde Aspose.PDF for .NET kullanarak PDF'yi XML'e nasıl dönüştüreceğinizi öğrenin. Kod örneklerinin de dahil olduğu adım adım kılavuz. | +| [PDF'den XPS'e](./pdf-to-xps/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak PDF'yi XPS'e nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve belge işleme meraklıları için mükemmel. | +| [PDF'ye Son Söz](./postscript-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak Postscript dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Her seviyedeki geliştirici için mükemmel. | +| [HTML'den PDF'e Geçiş Sırasında Kimlik Bilgilerini Sağlayın](./provide-credentials-during-html-to-pdf/) | Bu adım adım kılavuzla Aspose.PDF for .NET kullanarak HTML'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. Belge oluşturmayı kolaylaştırmak isteyen geliştiriciler için mükemmeldir. | +| [Html'den Dönüştürdükten Sonra Köprü Bağlantılarını Kaldır](./remove-hyperlinks-after-converting-from-html/) Aspose.PDF for .NET'i kullanarak HTML belgelerini PDF'ye dönüştürdükten sonra köprü metinlerinin nasıl kaldırılacağını bu adım adım kılavuzda öğrenin. | +| [Eksik Yazı Tiplerini Değiştir](./replace-missing-fonts/) | Bu adım adım kılavuzla Aspose.PDF for .NET'i kullanarak PDF belgelerindeki eksik yazı tiplerini nasıl değiştireceğinizi öğrenin. | +| [Varsayılan Yazı Tipi Adını Ayarla](./set-default-font-name/) | Aspose.PDF for .NET kullanarak PDF'leri resimlere dönüştürürken varsayılan yazı tipi adının nasıl ayarlanacağını öğrenin. Bu kılavuz ön koşulları, adım adım talimatları ve SSS'leri kapsar. | +| [SVG'den PDF'e](./svg-to-pdf/) | Bu adım adım eğitimde Aspose.PDF for .NET kullanarak SVG'yi PDF'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve tasarımcılar için mükemmel. | +| [TeX'ten PDF'e](./tex-to-pdf/) | Bu ayrıntılı, adım adım kılavuzla Aspose.PDF for .NET kullanarak TeX'i PDF'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve belge profesyonelleri için mükemmel. | +| [Metinden PDF'e](./text-to-pdf/) Bu adım adım kılavuzda Aspose.PDF for .NET kullanarak metin dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Uygulamalarını geliştirmek isteyen geliştiriciler için mükemmeldir. | +| [TIFF'ten PDF'e Performans İyileştirme](./tiff-to-pdf-performance-improvement/) | TIFF görüntülerini Aspose.PDF for .NET kullanarak PDF'ye verimli bir şekilde dönüştürün. Büyük görüntü dosyalarını sorunsuz bir şekilde işlemek için performans optimizasyon ipuçlarıyla adım adım öğrenin. | +| [Web Sayfasını PDF'ye Dönüştür](./web-page-to-pdf/) | Bu detaylı, adım adım eğitimde Aspose.PDF for .NET kullanarak web sayfalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. | +| [XML'den PDF'e](./xml-to-pdf/) | Bu kapsamlı adım adım eğitimde, kod örnekleri ve detaylı açıklamalarla birlikte Aspose.PDF for .NET kullanarak XML'i PDF'ye nasıl dönüştüreceğinizi öğrenin. | +| [XML'den PDFSet Görüntü Yoluna](./xml-to-pdfset-image-path/) | Aspose.PDF for .NET kullanarak XML'i PDF'ye zahmetsizce nasıl dönüştüreceğinizi öğrenin. Bu ayrıntılı kılavuz, kurulumdan tamamlanmaya kadar süreci adım adım anlatır. | | [XPS'den PDF'e](./xps-to-pdf/) Bu adım adım eğitimle Aspose.PDF for .NET kullanarak XPS dosyalarını PDF'ye nasıl dönüştüreceğinizi öğrenin. Geliştiriciler ve belge meraklıları için mükemmel. | | [PDF'yi C#'ta PDF/X‑4'e Dönüştür – Adım Adım ASP.NET PDF Eğitimi](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Aspose.PDF for .NET kullanarak PDF dosyalarını PDF/X‑4 formatına C# ile nasıl dönüştüreceğinizi öğrenin. | +| [PDF/X‑4'e Dönüştürme Öğreticisi – PDF Standardını Ayarlayın ve Aspose Kullanarak PDF Dönüştürün](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Aspose.PDF for .NET ile PDF standardını ayarlayıp PDF'yi dönüştürmeyi adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/turkish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..1295364c8b --- /dev/null +++ b/pdf/turkish/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-08-08 +description: PDF/X‑4 dönüşüm öğreticisi, PDF standardını PDF/X‑4 olarak ayarlamayı + ve Aspose ile PDF'yi güvenilir format dönüşümü için dönüştürmeyi gösterir. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: tr +lastmod: 2026-08-08 +og_description: pdfx4 dönüşüm öğreticisi, PDF standardını PDF/X‑4 olarak ayarlamayı + ve Aspose kullanarak C#’ta güvenilir bir PDF dönüşümü gerçekleştirmeyi açıklar. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: pdfx4 dönüşüm öğreticisi – PDF standardını ayarlayın ve Aspose kullanarak + PDF dönüştürün +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: pdfx4 dönüşüm öğreticisi – PDF standardını ayarlayın ve Aspose kullanarak PDF + dönüştürün +url: /tr/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdfx4 dönüşüm öğreticisi – PDF standardını ayarlayın ve Aspose ile PDF dönüştürün + +Eğer bir **pdfx4 dönüşüm öğreticisine** ihtiyacınız varsa, bu kılavuz PDF standardını PDF/X‑4 olarak ayarlama ve Aspose kullanarak PDF dönüştürme sürecinin tamamını adım adım gösterir. Baskıya hazır dosyalar hazırlıyor ya da uzun vadeli arşiv uyumluluğunu sağlıyorsanız, .NET 6 ve üzeri ile çalışan güvenilir bir **aspose pdf format conversion** iş akışını öğreneceksiniz. + +Bu öğretici, proje kurulumundan eksik kaynak dosyaları veya desteklenmeyen özellikler gibi kenar durumlarının ele alınmasına kadar her şeyi kapsar. Makalenin sonunda, aşağı akışlar için hazır, PDF/X‑4 uyumlu bir dosya üreten bağımsız bir C# programına sahip olacaksınız. + +## Önkoşullar + +Başlamadan önce şunların yüklü olduğundan emin olun: + +- .NET 6 SDK veya daha yeni bir sürüm ([buradan indirin](https://dotnet.microsoft.com/download)) +- Geçerli bir Aspose.PDF for .NET lisansı (ücretsiz deneme sürümü test için yeterlidir) +- Visual Studio 2022, VS Code veya .NET geliştirmeyi destekleyen herhangi bir IDE +- Dönüştürmek istediğiniz kaynak PDF dosyası (bilinen bir klasöre koyun) + +Bu gereksinimler, kodun ek yapılandırma olmadan çalışmasını sağlar. + +## Adım 1: Yeni bir .NET konsol projesi oluşturun + +Bir terminal açın ve `PdfX4Converter` adlı bir konsol uygulaması oluşturmak için aşağıdaki komutları çalıştırın: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Aspose.PDF NuGet paketini ekleyin: + +```bash +dotnet add package Aspose.Pdf +``` + +`Aspose.Pdf` paketi, **convert pdf pdfx4** işlemleri için gereken `Document` sınıfını ve `PdfFormatConversionOptions` öğesini sağlar. + +## Adım 2: Dönüşüm kodunu yazın + +`Program.cs` dosyasını (veya yeni üst‑seviye ifadeleri kullanıyorsanız `Program.cs` dosyasını) açın ve içeriğini aşağıdaki tam örnekle değiştirin. Kod, PDF/X‑4’e **set pdf standard** ayarlamayı, dönüşümü gerçekleştirmeyi ve yaygın hatalar için hata yönetimini gösterir. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Her bölümün önemi + +- **Argüman doğrulama**, kullanıcı dosya yolunu unuttuğunda programın çökmesini önler. +- **`Document` yükleme**, kaynak PDF eksik veya bozuksa net bir istisna fırlatır; bu, sağlam bir **convert pdf using aspose** deneyimi için kritiktir. +- **`PdfFormatConversionOptions`**, **set pdf standard** ayarının yapıldığı yerdir. `PdfStandard.PdfX4` atandığında, Aspose otomatik olarak renk alanlarını ayarlar, gerekli fontları gömer ve gerekli PDF/X‑4 meta verilerini yazar. +- **`FontEmbeddingMode.EmbedAll`**, kaynak PDF’de kullanılan her fontun gömülmesini sağlar; bu, baskıya hazır PDF’ler için yaygın bir gereksinimdir. +- **`doc.Convert`**, gerçek **aspose pdf format conversion** işlemini gerçekleştirir. Metot, yeni dosyayı tek bir çağrıyla yazar ve iş akışını basitleştirir. + +## Adım 3: Dönüştürücüyü çalıştırın + +Projeyi derleyin ve kaynak ile hedef yollarını belirterek çalıştırın: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Her şey doğru çalışırsa, konsol şu çıktıyı verir: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Artık `output_pdfx4.pdf` dosyasını PDF/X‑4 destekleyen herhangi bir PDF görüntüleyicide (ör. Adobe Acrobat Pro) açabilir ve *Dosya → Özellikler → Standartlar* menüsüyle uyumluluğu doğrulayabilirsiniz. + +## Adım 4: PDF/X‑4 uyumluluğunu doğrulayın (isteğe bağlı) + +Üretim hatları için çıktıyı programlı olarak doğrulamak isteyebilirsiniz. Aspose, aşağıdaki gibi kullanılabilen bir `PdfComplianceChecker` sınıfı ( `Aspose.Pdf` paketinde bulunur) sunar: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Dönüştürmeden hemen sonra bu kod parçasını çalıştırmak, otomatik CI/CD hatları için faydalı olan açık bir geçiş/başarısızlık sonucu verir. + +## Adım 5: Yaygın hatalar ve en iyi uygulama ipuçları + +| Sorun | Neden oluşur | Nasıl önlenir | +|-------|--------------|---------------| +| Kaynak PDF’de eksik fontlar | Fontlar referans alınmış ancak gömülmemiş, bu da dönüşüm uyarılarına yol açar | Yukarıda gösterildiği gibi `FontEmbeddingMode.EmbedAll` kullanın | +| Kaynak PDF, PDF/X‑4’te izin verilmeyen şeffaf nesneler içeriyor | PDF/X‑4 belirli şeffaflık karışımlarını engeller | Dönüştürmeden önce `doc.ProcessTransparentObjects()` ile PDF’yi ön‑işlemden geçirin | +| Büyük dosyalar OutOfMemoryException’a neden olur | Tüm belge belleğe yüklenir | `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` ile akış kullanın | +| Lisans uygulanmamış | Deneme sürümü filigran ekler | Her Aspose API kullanımından önce `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` çağrısı yapın | + +Bu ipuçlarını uygulamak, üretim ortamlarında sorunsuz bir **convert pdf pdfx4** deneyimi sağlar. + +## Adım 6: Öğreticiyi genişletme + +Temel **pdfx4 conversion tutorial**’ı öğrendikten sonra şunları keşfedebilirsiniz: + +- **Toplu dönüşüm**: Bir klasördeki PDF’leri döngüyle işleyip her birini PDF/X‑4’e dönüştürün. +- **Meta veri ekleme**: Belirli baskı evlerinin talep ettiği XMP meta verilerini ekleyin. +- **Renk profili yönetimi**: Dönüştürmeden önce `doc.ColorSpace = ColorSpace.DeviceRGB;` ile ICC profilleri ekleyin. + +Tüm bu uzantılar, burada gösterilen **aspose pdf format conversion** temeli üzerine inşa edilmiştir. + +## Sonuç + +Bu **pdfx4 conversion tutorial**, PDF standardını PDF/X‑4 olarak **set pdf standard** ayarlamayı, güvenilir bir **convert pdf using Aspose** işlemini gerçekleştirmeyi ve sonucu doğrulamayı gösterdi. Artık daha büyük belge‑işleme hatlarına entegre edilebilecek ya da bağımsız bir yardımcı program olarak kullanılabilecek tam, çalıştırılabilir bir C# programına sahipsiniz. Toplu işleme, meta veri yönetimine veya alternatif PDF standartlarına (PDF/A‑2b, PDF/UA) geçerek **aspose pdf format conversion** konusundaki uzmanlığınızı derinleştirebilirsiniz. + +İyi kodlamalar ve PDF/X‑4 uyumlu çıktının getirdiği güvenin tadını çıkarın! + + +## 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 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. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/turkish/net/document-creation/_index.md b/pdf/turkish/net/document-creation/_index.md index b91aab774f..18fa06af90 100644 --- a/pdf/turkish/net/document-creation/_index.md +++ b/pdf/turkish/net/document-creation/_index.md @@ -75,9 +75,12 @@ Aspose.PDF for .NET kullanarak PDF'leri nasıl oluşturacağınızı, özelleşt Aspose.PDF Net için bir kod öğreticisi ### [Aspose.PDF ile PDF Belgesi Oluşturma – Sayfa, Şekil Ekle ve Kaydet](./create-pdf-document-with-aspose-pdf-add-page-shape-save/) + ### [Aspose.PDF ile PDF Belgesi Oluşturma – Adım Adım Kılavuz](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Aspose.PDF for .NET ile PDF belgesi oluşturmayı adım adım öğrenin ve örnek kodlarla uygulayın. +### [C# ile Aspose.Pdf kullanarak PDF belgesi oluşturma](./create-pdf-document-in-c-with-aspose-pdf/) + ## Ek Kaynaklar - [Net Belgeleme için Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/turkish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/turkish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..b2e3061b0d --- /dev/null +++ b/pdf/turkish/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf kullanarak C#'de PDF belgesi oluşturun. Boş sayfa PDF eklemeyi, + PDF'ye paragraf eklemeyi ve metni PDF'de kesin koordinatlarla konumlandırmayı öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: tr +lastmod: 2026-08-08 +og_description: C#'ta hızlıca PDF belgesi oluşturun. Bu öğreticide, Aspose.Pdf kullanarak + boş sayfa PDF ekleme, PDF'ye paragraf ekleme ve PDF'de metni konumlandırma gösterilmektedir. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Aspose.Pdf ile C#'ta PDF Belgesi Oluşturma – Tam Rehber +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Aspose.Pdf ile C#'ta PDF belgesi oluşturma +url: /tr/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile Aspose.Pdf kullanarak pdf belgesi oluşturma + +Programlı olarak **pdf belgesi oluşturmanız** gerektiğinde, bu kılavuz tam olarak nasıl yapılacağını gösterir. Aspose.Pdf for .NET kullanarak boş bir sayfa pdf ekleyebilir, pdf içine bir paragraf ekleyebilir ve metni piksel‑tam doğrulukla pdf içinde konumlandırabilirsiniz—hepsi birkaç satır C# kodu ile. + +Bu öğreticiyi, belirttiğiniz koordinatlarda bir not içeren tam işlevsel bir PDF dosyasıyla tamamlayacaksınız. Harici araçlar, manuel düzenleme yok—herhangi bir .NET projesine ekleyebileceğiniz temiz, tekrarlanabilir kod. + +## Öğrenecekleriniz + +* Aspose.Pdf ile **pdf belgesi oluşturma**. +* **Boş sayfa pdf ekleme**nin doğru yolu ve içerik eklemeden önce bir sayfanın neden var olması gerektiği. +* **Pdf içine paragraf ekleme** ve özel bir etiket ekleme (daha sonra çıkarma veya stil verme için kullanışlı). +* `Position` sınıfını kullanarak **pdf içinde metni konumlandırma** tekniği. +* Sonucu diske kaydetme ve çıktıyı doğrulama. + +**Önkoşullar** + +* .NET 6.0 veya üzeri (kod .NET Framework 4.7+ ile de çalışır). +* Geçerli bir Aspose.Pdf for .NET lisansı veya ücretsiz deneme anahtarı. +* Visual Studio 2022 veya C# uzantılı VS Code gibi bir IDE. + +> **Pro tip:** Ücretsiz deneme kullanıyorsanız, oluşturulan PDF küçük bir filigran içerecektir. Filigranı kaldırmak için bir lisans kaydedin. + +## Aspose.Pdf ile pdf belgesi nasıl oluşturulur + +İlk adım `Document` sınıfını örneklemektir. Bu nesne tüm PDF dosyasını temsil eder ve sayfalara, kaynaklara ve kaydetme seçeneklerine erişim sağlar. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Belge oluşturmak **henüz** diske bir şey yazmaz; yalnızca bellekte bir temsil hazırlar. Bu yaklaşım API'yi hızlı ve bellek‑verimli tutar. + +## Aspose.Pdf ile boş sayfa pdf ekleme + +Bir PDF, içerik yerleştirebilmek için en az bir sayfa içermelidir. Boş bir sayfa eklemek tek bir metod çağrısıdır: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +`Add()` metodu varsayılan boyutta (A4) ve dikey (portrait) bir sayfa oluşturur. Farklı bir boyuta ihtiyacınız varsa, `Add()`'a bir `PageSize` örneği geçirin. + +## Pdf içine paragraf ekleme ve not ayarlama + +Sayfa artık mevcut olduğuna göre, görünen metni tutan bir `Paragraph` nesnesi oluşturabilirsiniz. Paragraf ayrıca özel bir etiket taşıyabilir; bu, öğeyi daha sonra programatik olarak bulmak veya stil vermek istediğinizde kullanışlıdır. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Neden etiket kullanılır? + +Etiketler, PDF öğesiyle birlikte taşınan meta verilerdir. Daha sonra `Document.FindObject()` ile sorgulanabilir veya erişilebilirlik ya da indeksleme için etiketlere güvenen sonraki PDF işlemcileri tarafından kullanılabilir. + +## Pdf içinde metni kesin koordinatlarla konumlandırma + +Paragrafın varsayılan konumu sayfa kenar boşluğunun sol‑üst köşesidir. Metni tam bir konuma taşımak için paragrafın etiketindeki `Position` özelliğini ayarlayın: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Koordinatlar puan cinsindendir (1 point = 1/72 inç). Başlangıç noktası (0,0) sayfanın sol‑alt köşesindedir; bu, çoğu PDF render motoru ile uyumludur. `X` ve `Y` değerlerini düzenleyerek düzen ihtiyaçlarınıza göre ayarlayın. + +Konumlandırmadan sonra paragrafı sayfanın koleksiyonuna ekleyin: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Pdf belgesini kaydetme + +Son olarak, bellekteki PDF'yi bir dosyaya yazın. Çıktı yolunu, formatı ve hatta şifreleme seçeneklerini belirtebilirsiniz. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Program bittiğinde, `output.pdf` tek bir sayfada **Important note** metnini üst‑sağ köşeye yakın bir konumda (X = 50, Y = 750) içerir. Yerleşimi doğrulamak için dosyayı herhangi bir PDF görüntüleyicide açın. + +![C# Aspose.Pdf ile oluşturulmuş, konumlandırılmış notu gösteren oluşturulmuş PDF belgesi](https://example.com/images/generated-pdf.png) + +*Görsel alt metni: C# Aspose.Pdf ile oluşturulmuş, konumlandırılmış notu gösteren oluşturulmuş PDF belgesi* (includes primary keyword). + +## Tam, çalıştırılabilir örnek + +Tüm parçaları bir araya getirerek, kopyalayıp derleyip çalıştırabileceğiniz eksiksiz bir konsol uygulaması aşağıdadır: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Beklenen çıktı**, programı çalıştırdığınızda: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +`output.pdf` dosyasını açtığınızda, tek bir sayfada **Important note** metninin belirttiğiniz koordinatlarda konumlandığını görürsünüz. + +## Yaygın varyasyonlar ve kenar durumları + +| Senaryo | Ne değiştirilmeli | Neden önemlidir | +|----------|-------------------|-----------------| +| **Farklı sayfa boyutu** | `pdfDocument.Pages.Add(PageSize.A5)` | Daha küçük sayfalar dosya boyutunu azaltır ve mobil ekranlara uyar. | +| **Birden fazla not** | Bir dizi string üzerinde döngü kurup her biri için bir `Paragraph` oluşturun, `Y` koordinatını artırın. | Madde işaretli notların toplu oluşturulmasını sağlar. | +| **Unicode karakterler** | Kaynak dosyanın UTF‑8 olarak kaydedildiğinden emin olun ve `noteParagraph.Text = "重要なメモ"` ayarlayın | Aspose.Pdf Unicode'u kutudan çıkar çıkmaz destekler, ancak dosya kodlaması eşleşmelidir. | +| **Şifre korumalı PDF** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Gizli notlar için güvenlik ekler. | +| **Yüksek çözünürlüklü çıktı** | İçerik eklemeden önce `pdfDocument.PageInfo.Width` ve `Height` değerlerini daha büyük bir değere ayarlayın. | Büyük formatlı PDF'lerin basımında kullanışlıdır. | + +## Üretim kullanımı için ipuçları + +* Tek bir istek içinde çok sayıda PDF üretirken **`Document` örneğini yeniden kullanın**; bu, GC baskısını azaltır. +* Döngü içinde birçok belge oluşturuyorsanız **nesneleri serbest bırakın** (`pdfDocument.Dispose()`). +* **Koordinatları doğrulayın**: `Y` değeri sayfa yüksekliğini aşamaz; aksi takdirde metin kesilir. +* Daha sonra etiketi (`/P`) üzerinden notu çıkarmak isterseniz **`TextFragmentAbsorber`** kullanın. + +## Sonuç + +Artık Aspose.Pdf ile **pdf belgesi oluşturma**, **boş sayfa pdf ekleme**, **pdf içine paragraf ekleme**, **pdf notu ekleme** ve **pdf içinde metni konumlandırma** konularını biliyorsunuz. Tam örnek, faturalar, raporlar veya herhangi bir belge‑otomasyon senaryosu için genişletebileceğiniz temiz, tekrarlanabilir bir iş akışı gösterir. + +Sonraki adımda, **pdf içine resim ekleme**, **Aspose.Pdf ile tablo oluşturma** veya **dijital imza uygulama** gibi ilgili konuları keşfedin. Bu konular, burada ele alınan temel kavramlar üzerine inşa edildiği için daha karmaşık PDF oluşturma görevlerine hazır olacaksınız. + +İyi kodlamalar! + + +## Sonra Ne Öğrenmelisiniz? + + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanarak yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanız ve projelerinizde alternatif uygulama yaklaşımları keşfetmeniz için adım‑adım açıklamalı tam çalışan kod örnekleri içerir. + +- [Aspose.PDF ile PDF Belgesi Oluşturma – Sayfa Ekle, Şekil & Kaydet](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Aspose.PDF for .NET ile PDF'in Sonuna Boş Sayfa Ekleme | Adım Adım Kılavuz](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Aspose.PDF .NET ile PDF'e Metin Damgası Ekleme: Kapsamlı Rehber](/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/images-graphics/_index.md b/pdf/turkish/net/images-graphics/_index.md index 069d9eaa9f..74e1c81783 100644 --- a/pdf/turkish/net/images-graphics/_index.md +++ b/pdf/turkish/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Aspose.PDF .NET kullanarak paragrafları çıkarıp vurgulayarak görsel olarak ### [Aspose.PDF .NET ile PDF'lere Şeffaf Şekiller Çizin](./draw-transparent-shapes-aspose-pdf-net/) Aspose.PDF Net için bir kod öğreticisi +### [C# ile PDF Opaklığını Ayarlama: Aspose.PDF Tam Kılavuz](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Aspose.PDF for .NET kullanarak C# ile PDF belgelerinin opaklığını nasıl ayarlayacağınızı adım adım öğrenin. + ### [Aspose.PDF for .NET ile Verimli PDF Görüntü Tanımlama](./master-image-identification-aspose-pdf-net/) Aspose.PDF for .NET kullanarak PDF'lerdeki gri tonlamalı ve RGB görüntüleri nasıl tanımlayacağınızı öğrenin. Bu eğitim, kurulum, görüntü çıkarma ve performans ipuçlarını kapsar. diff --git a/pdf/turkish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/turkish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..ca2ef3fe1f --- /dev/null +++ b/pdf/turkish/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF kullanarak C#'de PDF opaklığını ayarlayın – birkaç satır kodla + çizgi ve dolgu şeffaflığını nasıl ayarlayacağınızı öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: tr +lastmod: 2026-08-08 +og_description: C#'ta PDF saydamlığını hızlıca ayarlayın. Bu rehber, Aspose.PDF'nin + grafik durumu API'sini kullanarak çizgi ve dolgu şeffaflığını nasıl değiştireceğinizi + gösterir. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: C# ile Aspose.PDF kullanarak PDF opaklığını ayarlama – adım adım öğretici +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: C# ile Aspose.PDF kullanarak PDF opaklığını ayarlama – tam rehber +url: /tr/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile PDF opaklığını ayarlama Aspose.PDF – tam kılavuz + +Belirli çizim işlemleri için **PDF opaklığını ayarlamanız** gerekiyorsa, bu öğretici Aspose.PDF for .NET ile bunu tam olarak nasıl yapacağınızı gösterir. İster filigran, yarı saydam bindirme ya da özel grafikler oluşturuyor olun, öz ve üretim‑hazır bir yaklaşımı öğreneceksiniz. + +Aşağıdaki bölümlerde PDF yüklemeden grafik durumunu düzenlemeye, yeni bir opaklık tanımı eklemeye ve sonucu kaydetmeye kadar her şeyi ele alacağız. Harici bir dokümantasyona ihtiyaç yok—sadece aşağıdaki kod ve her adımın kısa açıklaması yeterli. + +## Gereksinimler + +Başlamadan önce şunların olduğundan emin olun: + +* .NET 6.0 veya daha yeni bir sürüm (kod .NET Framework 4.7+ ile de çalışır) +* Geçerli bir Aspose.PDF for .NET lisansı (değerlendirme için ücretsiz deneme sürümü yeterli) +* Okuma/yazma iznine sahip bir klasörde bulunan bir giriş PDF dosyası (`input.pdf`) +* Visual Studio 2022 veya tercih ettiğiniz herhangi bir C# IDE + +## Adım 1 – PDF belgesini yükleyin (Aspose.PDF for .NET) + +İlk görev mevcut PDF’i açmaktır. Aspose.PDF, bir PDF dosyasını `Document` sınıfı ile temsil eder; bu sınıf sayfalara, kaynaklara ve düşük seviyeli nesnelere tam erişim sağlar. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Why this matters*: Loading the document creates an in‑memory model that you can safely modify. The `using` statement ensures the file handle is released automatically after we finish. + +## Adım 2 – Düzenlemek istediğiniz ilk sayfayı alın + +Opaklık, sayfanın kaynak sözlüğü üzerinden sayfa bazında tanımlanır. Burada ilk sayfayı hedefliyoruz, ancak toplu işlem için `doc.Pages` içinde döngü kurabilirsiniz. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Why this matters*: Each page has its own `Resources` collection, which stores graphics states, fonts, images, etc. Modifying the right page ensures the opacity effect appears where you expect. + +## Adım 3 – Sayfanın kaynak sözlüğünü düzenleme için açın + +Aspose.PDF, dosya yapısını bozmadan düşük seviyeli PDF sözlüklerini manipüle etmenizi sağlayan bir `DictionaryEditor` yardımcı sınıfı sunar. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Why this matters*: Directly editing the PDF’s COS (Content Object System) dictionaries is the only way to inject a custom graphics state. The editor abstracts the low‑level syntax while keeping the PDF valid. + +## Adım 4 – Mevcut ExtGState sözlüğünü alın + +**ExtGState** (external graphics state) sözlüğü opaklık, karışım modu, çizgi kalınlığı vb. değerleri tutar. Eğer yoksa, yeni bir giriş eklediğinizde Aspose.PDF otomatik olarak oluşturur. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Why this matters*: Without an `ExtGState` entry you cannot reference a custom opacity later in the page content stream. This step guarantees the container is present. + +## Adım 5 – İstenen opaklıkla yeni bir grafik durumu oluşturun + +Bir grafik durumu bir dizi parametreden oluşur. Opaklık için `CA` (çizgi opaklığı) ve `ca` (dolgu opaklığı) ayarları yapılır. Ayrıca, şeffaf piksellerin alttaki içerikle etkileşimini kontrol eden bir karışım modu (`BM`) belirleriz. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Why this matters*: `CA` and `ca` accept values from 0 (completely transparent) to 1 (fully opaque). Adjust these numbers to achieve the visual effect you need. The blend mode `"Normal"` is the most common, but you can experiment with `"Multiply"` or `"Screen"` for artistic effects. + +## Adım 6 – Yeni grafik durumunu ExtGState koleksiyonuna kaydedin + +Her grafik durumu benzersiz bir ada (ör. `GS0`) sahip olmalıdır. Sözlüğümüzü `ExtGState` koleksiyonuna ekler, ardından sayfanın kaynaklarını güncelleriz. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Why this matters*: By naming the state (`GS0`), you can reference it later in the page’s content stream using the `gs` operator. If you need multiple opacity levels, create additional entries (`GS1`, `GS2`, …). + +## Adım 7 – Grafik durumunu çizim komutlarına uygulayın (isteğe bağlı) + +Opaklığı mevcut içeriğe hemen uygulamak istiyorsanız, sayfanın içerik akışını düzenlemeniz gerekir. Aşağıda, yeni oluşturulan durumu kullanarak yarı saydam bir dikdörtgen çizen basit bir örnek yer alıyor. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Why this matters*: The `gs` operator (`SetGraphicsState`) tells the PDF renderer to use the opacity values defined in `GS0` for any subsequent drawing commands. The `grestore`/`gsave` pair ensures other page elements remain unaffected. + +## Adım 8 – Değiştirilen PDF’i kaydedin + +Son olarak, güncellenen belgeyi diske yazın. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Why this matters*: Saving finalizes all changes, embeds the new graphics state, and produces a PDF that any viewer (Adobe Acrobat, Chrome, etc.) can display with the intended transparency. + +### Beklenen sonuç + +`output.pdf` dosyasını bir PDF görüntüleyicide açın. Kenarı %80 opak, dolgusu %40 opak bir kırmızı dikdörtgen görmeli ve arka plan içeriğiyle sorunsuz bir şekilde karışmalıdır. Sayfanın geri kalan kısmı değişmemiş olmalıdır. + +## Yaygın varyasyonlar ve kenar durumları + +| Durum | Ne değiştirilmeli | Sebep | +|-----------|----------------|--------| +| **Birden fazla opaklık seviyesi** | Farklı `CA`/`ca` değerlerine sahip ek grafik durumları (`GS1`, `GS2`, …) oluşturun ve gerektiğinde başvurun | Farklı öğeler üzerinde ince ayar kontrolü sağlar | +| **Farklı karışım modları** | `BM` girişinde `"Normal"` yerine `"Multiply"`, `"Screen"`, `"Overlay"` vb. kullanın | Sanatsal karışım efektleri üretir | +| **Mevcut içerik akışına uygulama** | Etkilemek istediğiniz belirli çizim operatörlerinden önce `SetGraphicsState` ekleyin | İlgisiz nesnelerde istenmeyen opaklığı önler | +| **Büyük PDF’ler** | Belleğe tek seferde tüm dosyayı yüklememek için `foreach (Page p in doc.Pages)` döngüsüyle sayfaları işleyin | Performansı artırır ve bellek baskısını azaltır | +| **ExtGState yok** | Adım 4’teki kod eksikse otomatik olarak bir tane oluşturur, ek bir işlem gerekmez | Sözlüğün mevcut olduğundan emin olur | + +### Pro ipucu + +Birçok özel grafik durumu eklediğinizde adlandırmayı tutarlı tutun (`GS0`, `GS1`, …) ve her birinin amacını bir yorum bloğunda belgeleyin. Bu, özellikle ortak projelerde gelecekteki bakım işini kolaylaştırır. + +## Tam, çalıştırılabilir örnek + +Aşağıda kopyalayıp yapıştırıp çalıştırabileceğiniz tam program yer alıyor. Tüm adımları, gerekli `using` yönergelerini ve yorumları içerir. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Programı çalıştırın, + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanarak yakından ilgili konuları kapsar. Her kaynak, adım adım açıklamalarla birlikte tam çalışan kod örnekleri sunar; böylece ek API özelliklerini öğrenebilir ve projelerinizde alternatif uygulama yaklaşımlarını keşfedebilirsiniz. + +- [Aspose.PDF for .NET ile PDF’lerde Görüntü Arka Planları Ayarlama: Kapsamlı Bir Kılavuz](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [Aspose.PDF for .NET ile PDF’lerde Kesikli Çizgiler Oluşturma: Adım Adım Rehber](/pdf/english/net/images-graphics/create-dashed-lines-aspose-pdf-net/) +- [Aspose.PDF for .NET ile PDF’leri Özelleştirme: Sayfa Kenar Boşluklarını Ayarlama ve Çizgiler Çizme](/pdf/english/net/document-manipulation/customize-pdfs-aspose-pdf-set-margins-draw-lines/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..f7a5191d39 100644 --- a/pdf/turkish/net/programming-with-forms/_index.md +++ b/pdf/turkish/net/programming-with-forms/_index.md @@ -51,6 +51,7 @@ Bu eğitimler ayrıca anlamanızı ve öğrenmenizi kolaylaştırmak için ayrı | [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.PDF ile PDF Belgesini Kaydet – tam rehber](./save-pdf-document-with-aspose-pdf-complete-guide/) | Aspose.PDF for .NET kullanarak PDF belgelerini kaydetmenin tüm adımlarını öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/turkish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..909d425278 --- /dev/null +++ b/pdf/turkish/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,236 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF kullanarak PDF belgesini kaydedin, PDF sayfaları eklemeyi, + PDF form alanlarını doldurmayı ve tek bir öğreticide form alanlarıyla PDF oluşturmayı + öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: tr +lastmod: 2026-08-08 +og_description: Aspose.PDF ile PDF belgesini kaydedin ve PDF sayfaları eklemeyi, PDF + form alanını doldurmayı ve form alanlarıyla PDF oluşturmayı hızlı ve güvenilir bir + şekilde nasıl yapacağınızı keşfedin. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Aspose.PDF ile PDF belgesini kaydedin – adım adım rehber +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Aspose.PDF ile PDF belgesini kaydetme – tam rehber +url: /tr/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.PDF ile PDF belgesini kaydet – tam kılavuz + +Etkileşimli form alanları içeren bir **PDF belgesini kaydet**meniz gerekiyorsa, bu öğretici tam olarak nasıl yapılacağını gösterir. PDF sayfaları eklemeyi, bir PDF formu oluşturmayı ve bir PDF form alanını doldurmayı — hepsini Aspose.PDF for .NET ile göreceksiniz. + +Aşağıdaki bölümlerde şunları öğreneceksiniz: + +* yeni bir PDF’e birden fazla sayfa ekleme, +* ilk sayfada bir metin kutusu form alanı oluşturma, +* aynı alan için ikinci sayfada bir widget açıklaması yerleştirme, +* alanın değerini ayarlama (PDF form alanını doldurma), +* ve sonunda **PDF belgesini kaydet**me. + +Harici araçlara gerek yok; tam, çalıştırılabilir kod dahil edilmiştir. + +## Önkoşullar + +* .NET 6.0 veya daha yenisi (kod .NET Framework 4.7.2+ ile de çalışır). +* Geçerli bir Aspose.PDF for .NET lisansı veya ücretsiz bir değerlendirme anahtarı. +* Visual Studio 2022 (veya herhangi bir C# IDE). + +NuGet paketini ekleyin: + +```bash +dotnet add package Aspose.PDF +``` + +## PDF sayfalarını ekleme + +İlk adım, boş bir PDF oluşturup ihtiyacınız olan sayfaları eklemektir. Form alanlarını tanımlamadan önce sayfaları eklemek, yerleşim koordinatlarının doğru olmasını sağlar. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Bu neden önemlidir:* Her `Page` nesnesi, yazdırılabilir bir tuvali temsil eder. Sayfaları erken ekleyerek, form öğelerini konumlandırırken daha sonra onlara referans verebilirsiniz. + +## Aspose.PDF ile PDF formu oluşturma + +Bir PDF formu, **alan tanımı** (mantıksal kapsayıcı) ve bir veya daha fazla **widget açıklaması** (görsel temsil) içerir. Örnek, ilk sayfada **Comments** adlı bir `TextBoxField` oluşturur. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Bu neden önemlidir:* `Rectangle` koordinatları puan cinsindendir (1 pt = 1/72 in). Değerleri tasarımınıza göre ayarlayın. + +## PDF form alanını doldurma + +Belge kaydedilmeden önce alanın değerini programlı olarak ayarlayabilirsiniz. Bu, **PDF form alanını doldurma**nın temelidir. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Alanı daha sonra (ör. kullanıcı girdisinden) doldurmanız gerekiyorsa, `Save` çağrısından önce `commentsField.Value`'ye yeni bir dize atayın. + +## Aynı alan için ikinci sayfada bir widget açıklaması ekleme + +Bir widget açıklaması, form alanını bir sayfada görünür kılar. İkinci bir widget ekleyerek aynı mantıksal alan iki sayfada da görünür olur ve **çok sayfalı form alanları** oluşturulmuş olur. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Bu neden önemlidir:* `Widgets` koleksiyonu, istediğiniz sayıda görsel temsile ev sahipliği yapabilir. Kullanıcılar alanı her iki sayfada da etkileşime girebilir ve girilen değer senkronize kalır. + +## Alanı ilk sayfanın açıklamalarına ekleme + +Form alanları, PDF görüntüleyicisinin onları renderleyebilmesi için bir sayfanın açıklama koleksiyonuna eklenmelidir. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## PDF belgesini kaydet + +Form tamamen tanımlandığında, **PDF belgesini kaydet**ebilir ve istediğiniz konuma kaydedebilirsiniz. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +`output.pdf` dosyasını Adobe Acrobat Reader veya herhangi bir PDF görüntüleyicide açtığınızda, 1. sayfada bir metin kutusu ve 2. sayfada eşleşen bir kutu göreceksiniz. Her iki kutuya da yazı yazmak aynı temel alanı günceller. + +## Tam, çalıştırılabilir örnek + +Aşağıda, bir konsol uygulamasına kopyalayıp yapıştırabileceğiniz tam program yer almaktadır. Derlenir ve açıklanan PDF'i hiçbir değişiklik yapmadan üretir. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Beklenen çıktı:** `output.pdf` adlı bir dosya, iki sayfa içerir. Sayfa 1, (100, 600) koordinatlarında “Comments” etiketiyle bir metin kutusu gösterir. Sayfa 2 aynı alanı (100, 400) koordinatlarında gösterir. Alan, “Enter your feedback here” metniyle önceden doldurulmuştur. Her iki sayfadaki metni değiştirmek, belge tekrar kaydedildiğinde aynı değeri günceller. + +## Yaygın sorular ve kenar‑durum yönetimi + +| Soru | Cevap | +|------|-------| +| *Aynı alan için birden fazla widget ekleyebilir miyim?* | Evet. `commentsField.Widgets` koleksiyonuna ek `WidgetAnnotation` nesneleri ekleyin. Her widget herhangi bir sayfaya yerleştirilebilir. | +| *Alan görünümünü (yazı tipi, kenarlık, arka plan) nasıl ayarlarım?* | `commentsField.DefaultAppearance` ile bir yazı tipi ve renk belirleyin, `commentsField.Border` özellikleriyle çizgi stilini ayarlayın. | +| *Alanı yalnızca‑okunur (read‑only) nasıl yaparım?* | `commentsField.ReadOnly = true;` satırını ekleyin. Alan değeri görüntülenir ancak kullanıcı tarafından düzenlenemez. | +| *PDF oluşturulduktan sonra alanı doldurmak mümkün mü?* | Evet. Kaydedilen PDF'i `new Document("output.pdf")` ile yükleyin, `pdfDocument.Form["Comments"]` üzerinden alana erişin, yeni bir `Value` atayın ve tekrar `Save` edin. | +| *PDF arşivleme için PDF/A standardına uymalıysa ne yapmalıyım?* | Belgeyi oluşturduktan sonra `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` çağrısını yapın, ardından kaydedin. | + +## Alandan ipuçları + +* **Pro ipucu:** Mantıksal alan adını kısa ve benzersiz tutun; bu, formu programlı olarak doldururken kullanacağınız tanımlayıcıdır. +* **Dikkat edilmesi gereken:** Çakışan widget dikdörtgenleri. Çakışmalar bazı görüntüleyicilerde render hatalarına yol açar. +* **Performans notu:** Çok sayıda sayfa veya widget eklerken, tek bir `Rectangle` örneğini yeniden kullanıp sadece koordinatlarını değiştirerek optimizasyon sağlayabilirsiniz. + +## Sonuç + +Artık **PDF belgesini kaydet**, **PDF form alanını doldur** ve **PDF sayfalarını ekle** ile **form alanlı PDF oluştur** konularını Aspose.PDF for .NET kullanarak nasıl yapacağınızı biliyorsunuz. Tam örnek, belge oluşturulmasından son kayda kadar uçtan uca iş akışını gösterir. + +Sonraki adımda, **onay kutuları ekleme**, **açılır listeler oluşturma** veya **formu düzleştirerek yalnızca‑okunur dağıtım** gibi ilgili konuları keşfedin. Bu konular, burada ele alınan aynı prensiplere dayanır ve PDF otomasyon yeteneklerinizi genişletir. + +İyi kodlamalar! + +## Bir sonraki öğrenmeniz gerekenler + +Aşağıdaki öğreticiler, bu rehberde gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, adım adım açıklamalarla tam çalışan kod örnekleri içerir, böylece ek API özelliklerini ustalaşabilir ve projelerinizde alternatif uygulama yaklaşımlarını keşfedebilirsiniz. + +- [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 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.PDF for .NET ile PDF Form Alanlarını Ekleme ve Çıkarma – Kapsamlı Rehber](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/turkish/net/programming-with-pdf-pages/_index.md index 0211230d47..6a2ae13c14 100644 --- a/pdf/turkish/net/programming-with-pdf-pages/_index.md +++ b/pdf/turkish/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Eğitimler, adım adım talimatlar, ayrıntılı kod örnekleri ve anlaşılmas | [PDF Sayfa Boyutlarını Güncelle](./update-dimensions/) | Bu kapsamlı, adım adım kılavuzda, Aspose.PDF for .NET ile PDF sayfa boyutlarını zahmetsizce nasıl güncelleyeceğinizi keşfedin. | | [PDF Dosyasındaki Sayfa İçeriğine Yakınlaştır](./zoom-to-page-contents/) | Bu kapsamlı kılavuzda Aspose.PDF for .NET kullanarak PDF dosyalarındaki sayfa içeriklerine nasıl yakınlaştırma yapacağınızı öğrenin. PDF belgelerinizi özel ihtiyaçlarınıza göre geliştirin. | | [C# ile PDF'e Sayfa Numaraları Ekle – Tam Adım‑Adım Kılavuz](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Aspose.PDF for .NET kullanarak C# ile PDF dosyalarına sayfa numaraları eklemeyi adım adım öğrenin. | +| [Aspose ile Bates Numaralandırması PDF Ekle – Tam Adım‑Adım Kılavuz](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Aspose.PDF for .NET kullanarak PDF dosyalarına Bates numaralandırması eklemeyi adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/turkish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..10498a0631 --- /dev/null +++ b/pdf/turkish/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf kullanarak C# ile Bates numaralandırmalı PDF ekleyin. Bu öğreticide + ayrıca boş sayfa PDF ekleme ve PDF'yi programlı olarak oluşturma gösterilmektedir. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: tr +lastmod: 2026-08-08 +og_description: C# ile Aspose.Pdf kullanarak Bates numaralandırmalı PDF ekleyin. Boş + sayfa PDF eklemeyi, PDF'yi programlı olarak oluşturmayı ve son belgeyi dakikalar + içinde kaydetmeyi öğrenin. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Aspose ile PDF'e Bates Numarası Ekleme – Tam C# Rehberi +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Aspose ile PDF'e Bates Numaralandırması Ekleme – Adım Adım Kılavuz +url: /tr/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose ile bates numaralandırmalı PDF ekleme – adım adım kılavuz + +Aspose.Pdf ile bates numaralandırmalı PDF eklemek, temel adımları anladığınızda oldukça basittir. Boş sayfa PDF ekleme veya PDF'i programlı olarak oluşturma ihtiyacınız da varsa, bu kılavuz ihtiyacınız olan her şeyi kapsar. + +Bu öğreticide şunları yapacaksınız: + +* Sıfırdan yeni bir PDF belgesi oluşturma. +* Bates numaralarını barındıracak bir boş sayfa PDF ekleme. +* Özel bir önekle Bates numaralandırma nesnesini yapılandırma. +* Sayıların oluşturulan dosyada görünmesi için PDF'i kaydetme. + +Sonunda, **CASE‑1000**, **CASE‑1001**, … gibi Bates numaraları içeren bir PDF üreten tam işlevsel bir C# konsol uygulamanız olacak – bu, hukuk ve e‑keşif iş akışları için yaygın bir gereksinimdir. + +## Önkoşullar + +* .NET 6.0 SDK veya daha yenisi (kod .NET Framework 4.8 ile de çalışır). +* Visual Studio 2022 veya herhangi bir C# uyumlu IDE. +* Geçerli bir Aspose.Pdf for .NET lisansı (veya ücretsiz bir değerlendirme anahtarı). +* C# sözdizimi hakkında temel bilgi. + +> **İpucu:** Kodu lisans olmadan çalıştırırsanız, Aspose çıktıya küçük bir filigran ekleyecektir. + +## Adım 1: Projeyi kurun ve Aspose.Pdf'i içe aktarın + +Yeni bir konsol projesi oluşturun ve Aspose.Pdf NuGet paketini ekleyin: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Örnekte gereken `using` yönergeleri şunlardır: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Bu ad alanları, daha sonra kullanılacak `Document`, `Page` ve `BatesNumberingArtifact` sınıflarına erişim sağlar. + +## Adım 2: Boş bir sayfa PDF ekleyin + +Bates numarası bir sayfaya eklenmelidir, bu yüzden önce numaralandırma nesnesini alacak boş bir sayfa oluştururuz. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +`Document` sınıfı tüm PDF dosyasını temsil ederken, `Pages.Add()` belge sayfa koleksiyonunun sonuna yeni, boş bir sayfa ekler. Belge başlangıçta boş olduğundan, bu çağrı aynı zamanda ilk sayfayı da oluşturur. + +## Adım 3: Bates numaralandırma nesnesini yapılandırın + +Şimdi Bates numaralarının nasıl görüneceğini tanımlıyoruz. `BatesNumberingArtifact`, başlangıç numarası, önek, sonek ve biçimlendirme seçeneklerini ayarlamanıza olanak tanır. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Neden önemli:** +`StartNumber` değerini **1000** olarak ayarlamak, tipik hukuk dosyası konvansiyonlarıyla eşleşir. `Prefix` her sayının **CASE‑1000**, **CASE‑1001**, … şeklinde görünmesini sağlar; bu da aramayı ve sıralamayı kolaylaştırır. + +## Adım 4: Nesneyi sayfaya ekleyin + +Nesne, Aspose'un kaydetme sırasında her sayfada render etmesi için sayfanın `Artifacts` koleksiyonuna eklenmelidir. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Belge kaydedildiğinde, Aspose otomatik olarak nesneyi tüm sayfalara tekrarlar ve sonraki her sayfa için numarayı artırır. + +## Adım 5: (İsteğe bağlı) Ek sayfalar ekleyin + +Daha fazla sayfaya ihtiyacınız varsa, sadece `pdfDocument.Pages.Add()` ifadesini tekrarlayın. Önceki adımda eklediğiniz Bates numaralandırma nesnesi, her yeni sayfada otomatik olarak görünecektir. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Adım 6: PDF'i kaydedin – programlı olarak pdf oluşturma + +Son olarak belgeyi diske kalıcı olarak kaydedin. İşte Bates numaralarının sayfalara işlendiği nokta. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Beklenen sonuç:** +*BatesNumberedDocument.pdf* dosyasını açtığınızda üç sayfalı bir PDF göreceksiniz. Her sayfa sağ alt köşede bir Bates numarası gösterir: + +* Sayfa 1 → **CASE‑1000** +* Sayfa 2 → **CASE‑1001** +* Sayfa 3 → **CASE‑1002** + +Nesne sayfa koleksiyonuna eklendiği için numaralar otomatik olarak artırılır. + +## Tam, çalıştırılabilir örnek + +Her şeyi bir araya getirdiğimizde, kopyalayıp yapıştırıp çalıştırabileceğiniz eksiksiz bir konsol programı aşağıdadır: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Programı `dotnet run` ile çalıştırın. Çalıştırdıktan sonra dosyayı masaüstünüzde bulun ve Bates numaralarını doğrulayın. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Yaygın sorular ve kenar durumları + +### Farklı bir yazı tipi veya konum gerekirse ne yapmalıyım? + +`BatesNumberingArtifact` `FontSize`, `FontColor`, `HorizontalAlignment` ve `VerticalAlignment` gibi özellikler sunar. Örneğin: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Belirli bir sayfayı numaralandırmadan dışarıda bırakmak nasıl olur? + +Numaralandırmak istediğiniz sayfalar için ayrı bir `BatesNumberingArtifact` oluşturun ve sadece o sayfalara ekleyin. Artefakt eklenmemiş sayfalar numarasız kalır. + +### Mevcut PDF'lerle çalışabilir mi? + +Evet. `new Document()` yerine mevcut bir dosyayı yükleyin: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Ardından artefaktı istediğiniz sayfalara ekleyin ve kaydedin. + +## Sonuç + +Artık **add bates numbering pdf** işlemini Aspose.Pdf kullanarak nasıl yapacağınızı, **add blank page pdf** eklemeyi ve **generate pdf programmatically** işlemini temiz, yeniden kullanılabilir bir C# çözümünde nasıl gerçekleştireceğinizi biliyorsunuz. Yaklaşım, sayfa sayısı, özel önekler ve stil seçenekleri ne olursa olsun çalışır ve nihai belge üzerinde tam kontrol sağlar. + +İleride keşfedebileceğiniz adımlar: + +* Use **create pdf as + + +## What Should You Learn Next? + + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanarak yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini öğrenmenize ve 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. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 ce8a6aa358..852cbae9b8 100644 --- a/pdf/turkish/net/programming-with-security-and-signatures/_index.md +++ b/pdf/turkish/net/programming-with-security-and-signatures/_index.md @@ -35,6 +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 imzasını doğrulama – Aspose.PDF tam rehberi](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Aspose.PDF for .NET kullanarak C# ile PDF imzalarını doğrulama rehberi. | +| [PDF imza öğreticisi: Aspose.PDF ile PDF dijital imzasını doğrulama](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Aspose.PDF for .NET kullanarak PDF dijital imzasını nasıl doğrulayacağınızı öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/turkish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/turkish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..7c029433ab --- /dev/null +++ b/pdf/turkish/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-08-08 +description: PDF imza öğreticisi, imza doğrulama seçeneklerini ve C# kodunu kullanarak + PDF dijital imzasını nasıl doğrulayacağınızı gösterir – hızlı adım adım rehber. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: tr +lastmod: 2026-08-08 +og_description: PDF imza öğreticisi, Aspose.PDF ile bir PDF dijital imzasını doğrulamayı + adım adım gösterir. İmza doğrulama seçeneklerini yapılandırmayı ve sonucu kontrol + etmeyi öğrenin. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: PDF imza öğreticisi – C#'ta PDF dijital imzalarını doğrulama +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'pdf imza öğreticisi: Aspose.PDF ile bir PDF dijital imzasını doğrulama' +url: /tr/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# pdf imza öğreticisi – C#'ta bir PDF dijital imzasını doğrulama + +Eğer **pdf signature tutorial**'a ihtiyacınız varsa ve PDF dijital imzasını nasıl doğrulayacağınızı tam olarak gösteriyorsa, bu rehber sizin için. İmzalı bir PDF'yi nasıl yükleyeceğinizi, **signature validation options**'ı nasıl yapılandıracağınızı, doğrulamayı nasıl çalıştıracağınızı ve sonucu nasıl görüntüleyeceğinizi göreceksiniz — hepsi net, çalıştırılabilir C# kodu ile. + +PDF imzasını doğrulamak, sözleşmeler, faturalar veya herhangi bir yasal bağlayıcı belge işlediğinizde önemlidir. Bu öğretici, tam iş akışını adım adım gösterir, böylece hangi API çağrılarının gerektiğini tahmin etmeden imza kontrollerini kendi uygulamalarınıza entegre edebilirsiniz. + +## Neler Başaracaksınız + +* Aspose.PDF kullanarak imzalı bir PDF dosyasını yükleyin. +* **signature validation options**'ı hash algoritması gibi ayarlayın. +* `Validate` metodunu çağırarak **validate pdf digital signature** yapın. +* Konsola net bir “Signature valid” mesajı yazdırın. + +**Önkoşullar** + +* .NET 6.0 (veya daha yenisi) yüklü. +* Visual Studio 2022 (veya herhangi bir C# IDE). +* .NET için Aspose.PDF NuGet paketi (`Aspose.Pdf`). + +> **Pro tip:** En son Aspose.PDF sürümünü kullanarak SHA‑3 algoritmaları desteği ve geliştirilmiş doğrulama performansı elde edin. + +## Adım 1: Aspose.PDF NuGet paketini kurun + +Visual Studio'da projenizi açın ve Package Manager Console'da aşağıdaki komutu çalıştırın: + +```bash +Install-Package Aspose.Pdf +``` + +Paket, kullanacağınız `Document` sınıfını ve imza ile ilgili API'leri içeren `Aspose.Pdf` ad alanını ekler. + +## Adım 2: İmzalı PDF belgesini yükleyin + +Kodun ilk satırı, diskteki PDF dosyasını temsil eden bir `Document` nesnesi oluşturur. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Neden önemli:* `Document` sınıfı PDF yapısını çözer, tüm gömülü dijital imzaları tutan `Signatures` koleksiyonunu ortaya çıkarır. Dosya yolu yanlışsa bir istisna fırlatılır, bu yüzden programı çalıştırmadan önce yolu doğrulayın. + +## Adım 3: signature validation options'ı yapılandırın + +`SignatureValidationOptions` sınıfı ile doğrulama sürecini özelleştirebilirsiniz. Bu öğreticide hash algoritmasını belirtiyoruz, ancak aynı zamanda sertifika iptal kontrolleri, zaman damgası doğrulaması ve daha fazlasını da ayarlayabilirsiniz. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Neden önemli:* Hash algoritması, imza oluşturulurken kullanılanla aynı olmalıdır. Uyumsuz bir algoritma kullanmak, imza doğru olsa bile doğrulamanın başarısız olmasına neden olur. + +## Adım 4: İlk imzayı doğrulayın + +Çoğu PDF tek bir imza içerir, ancak `Signatures` koleksiyonu birden fazla imza tutabilir. Bu örnek ilk girişi (`[0]`) doğrular. `Validate` metodu, başarılı olup olmadığını gösteren bir Boolean döndürür. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Köşe durumu:* PDF'de imza yoksa, `document.Signatures.Count` `0` olur ve `[0]`'a erişim `IndexOutOfRangeException` fırlatır. Basit bir kontrolle bunu önleyin: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Adım 5: Doğrulama sonucunu gösterin + +Son olarak, sonucu konsola yazdırın. Bu adım, **check pdf signature** sonucunu insan tarafından okunabilir bir formatta gösterir. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Programı çalıştırdığınızda şu çıktıyı görmelisiniz: + +``` +Signature valid: True +``` + +İmza bozuksa, desteklenmeyen bir algoritma kullanıyorsa veya sertifika iptal edilmişse, çıktı `False` olacaktır. + +## Tam, çalıştırılabilir örnek + +Aşağıdaki kodu yeni bir console projesine (`dotnet new console`) kopyalayın ve `YOUR_DIRECTORY/signed.pdf` ifadesini imzalı PDF dosyanızın yolu ile değiştirin. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Beklenen çıktı + +``` +Signature valid: True +``` + +İmza doğrulamadan geçmezse, konsol `Signature valid: False` mesajını gösterecektir. + +## Yaygın sorular ve sorun giderme + +| Soru | Cevap | +|----------|--------| +| **PDF farklı bir hash algoritması kullanırsa ne olur?** | `SignatureValidationOptions` içinde `HashAlgorithm`'ı eşleşecek şekilde değiştirin, örneğin `HashAlgorithm.SHA256`. | +| **Çoklu‑imzalı bir PDF'deki tüm imzaları nasıl doğrularım?** | `document.Signatures` üzerinde döngü kurarak her giriş için `Validate` metodunu çağırın. | +| **İmzalayan sertifikanın güven zincirini doğrulayabilir miyim?** | `validationOptions.CheckCertificateRevocation = true` olarak ayarlayın ve isteğe bağlı olarak güvenilir kök sertifikaları içeren özel bir `CertificateStore` sağlayın. | +| **Zaman damgası doğrulamasını desteklemem gerekirse ne yapmalıyım?** | `validationOptions.CheckTimestamp = true` özelliğini etkinleştirin. Aspose.PDF ardından gömülü zaman damgası token'ını doğrular. | +| **Detaylı doğrulama hatalarını almanın bir yolu var mı?** | `ValidateEx(validationOptions, out ValidationResult result)` kullanın; `result` her bir başarısızlık için `ErrorMessage` ve `ErrorCode` içerir. | + +## Sonraki adımlar + +* `document.Signatures` üzerinde döngü yaparak birden fazla imza için **validate pdf signature**'ı keşfedin. +* Bu öğreticiyi **check pdf signature** ile bir web API'de birleştirerek yüklenen sözleşmeler için gerçek zamanlı doğrulama sağlayın. +* CRL/OCSP kontrolleri, zaman damgası doğrulaması ve özel güven mağazaları gibi **signature validation options**'a daha derinlemesine bakın. + +Artık Aspose.PDF kullanarak C#'ta **pdf signature tutorial**'ı tamamladınız ve **validate pdf digital signature** nasıl yapılır gösteriyor. Kodu kendi iş akışınıza uyarlamaktan, günlük eklemekten veya daha büyük belge‑işleme hatlarına entegre etmekten çekinmeyin. Kodlamanın tadını çıkarın! + +## 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. + +- [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/) +- [Digital Signature Aspose Pdf Net Tutorial](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/turkish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..eebfbdb37e --- /dev/null +++ b/pdf/turkish/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.PDF kullanarak C#'de PDF imzasını doğrulayın. Dijital PDF imzasını + nasıl doğrulayacağınızı ve sadece birkaç satır kodla PDF imzalarını nasıl listeleyeceğinizi + öğrenin. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: tr +lastmod: 2026-08-08 +og_description: Aspose.PDF ile C#’ta PDF imzasını doğrulayın. Bu rehber, dijital PDF + imzasını nasıl doğrulayacağınızı, PDF imzalarını nasıl listeleyeceğinizi ve bozulmuş + imzaları nasıl etkili bir şekilde yöneteceğinizi gösterir. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: C#'ta PDF imzasını doğrulama – hızlı Aspose.PDF öğreticisi +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Aspose.PDF ile C#'ta PDF imzasını doğrulama – tam rehber +url: /tr/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile Aspose.PDF'de PDF imzasını doğrulama – tam kılavuz + +Bir .NET uygulamasında **PDF imzasını doğrulamanız** gerekiyorsa, bu kılavuz Aspose.PDF ile bunu yapmanın özlü bir yolunu gösterir. **PDF dijital imzasını doğrulamayı**, **PDF imzalarını listelemeyi** ve bozulmuş imzaları sadece birkaç satır kodla tespit etmeyi öğreneceksiniz. + +Kılavuz, kütüphanenin kurulumu aşamasından imzası olmayan belgeler veya şifreli PDF'ler gibi kenar durumlarının ele alınmasına kadar her şeyi kapsar. Sonunda, gelen PDF dosyalarının özgünlüğünü sağlamak için imza doğrulamayı herhangi bir C# projesine entegre edebileceksiniz. + +**Prerequisites** + +- .NET 6.0 veya üzeri (kod .NET Framework 4.6+ ile de çalışır). +- C# ve Visual Studio (veya tercih ettiğiniz herhangi bir IDE) hakkında temel bilgi. +- Aspose.PDF for .NET lisansı (ücretsiz deneme sürümü değerlendirme için yeterlidir). + +Bu gereksinimleri karşılıyorsanız, PDF imzalarını doğrulamaya hazırsınız. + +## PDF imzasını doğrulama – projeyi kurma + +1. **Aspose.PDF NuGet paketini ekleyin** + Package Manager Console'u açın ve şu komutu çalıştırın: + + ```bash + Install-Package Aspose.PDF + ``` + +2. **Gerekli ad alanlarını içe aktarın** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + +`System.Linq` daha sonra kullanılan `Any` uzantısını sağlar, `Aspose.Pdf` ise `Document` ve `Signature` sınıflarını içerir. + +## PDF belgesini yükleme + +İlk işlevsel adım, incelemek istediğiniz PDF'i açmaktır. Aspose.PDF dosyayı belleğe okur ve imzalarını sorgulamanıza olanak tanır. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – `using` bloğu içinde belgeyi yüklemek, dosya tutamacının hızlıca serbest bırakılmasını garantiler ve uzun süren servislerde dosya kilidi sorunlarını önler. + +## PDF imzalarını listeleme + +Bir imzayı doğrulamadan önce, kaç imza bulunduğunu bilmek isteyebilirsiniz. Bu adım **PDF imzalarını listeleme** yeteneğini gösterir. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` bir `Signature` nesnesi koleksiyonu döndürür. +- `Count` kaç imza olduğunu söyler. +- Her `Signature`, `Id`, `SignatureType` ve `Reason` gibi denetim günlükleri için faydalı olabilecek meta verileri ortaya çıkarır. + +**Edge case** – PDF'te imza yoksa, `Count` `0` olur ve döngü çalışmaz. Bu senaryoyu nazikçe şöyle ele alabilirsiniz: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## PDF dijital imzasını doğrulama – bozulmuş imzaları tespit etme + +Artık imzaları sıralayabildiğinize göre, temel görev **PDF imzasının** bütünlüğünü **doğrulamaktır**. Aspose.PDF, imzanın kriptografik hash'i belge içeriğiyle eşleşmediğinde `true` dönen `IsCompromised` özelliğini sunar. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised`, gömülü sertifika zincirini kullanarak tam bir kriptografik doğrulama gerçekleştirir. +- `Any` LINQ operatörü, ilk bozulmuş imzada durur; bu sayede çok sayıda imza içeren belgelerde kontrol verimli olur. + +### Birden fazla imzayı ayrı ayrı işleme + +Hangi imzanın başarısız olduğunu bilmek istiyorsanız, `Any` yerine döngü kullanın: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** Doğrulama sonucunu `sig.Id` ile birlikte bir veritabanına kaydedin; böylece sonraki adli analizlerde kullanılabilir. + +## Sonuçları çıktılama ve kenar durumlarını göz önünde bulundurma + +Aşağıda, yukarıdaki adımları birleştiren tam, çalıştırılabilir bir program yer alıyor. PDF'i yükler, tüm imzaları listeler, doğrular ve net bir sonuç yazdırır. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Expected output (valid signatures)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Expected output (compromised signature)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Yaygın tuzaklar ve nasıl önlenir + +| Pitfall | Solution | +|---------|----------| +| PDF şifre korumalı. | `Signatures`'a erişmeden önce `document.Encrypt.Decrypt(password)` ile şifreyi geçin. | +| Aspose.PDF lisansı ayarlanmamış. | `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` kodunu kullanarak değerlendirme su işaretlerini kaldırın. | +| Büyük PDF'ler yüksek bellek tüketiyor. | Dosyayı bütün olarak yüklemek yerine akış modunda işleyin (`Document.Load(stream)`). | + +## Sonuç + +Artık Aspose.PDF kullanarak C# içinde **PDF imzasını doğrulama**, **PDF dijital imzasını doğrulama** ve raporlama ya da denetim amaçlı **PDF imzalarını listeleme** konularını biliyorsunuz. Tam örnek, bir belgeyi yüklemeyi, imzalarını sıralamayı, her birini bozulmuşluk açısından kontrol etmeyi ve tipik kenar durumlarını ele almayı gösteriyor. + +İleride keşfedebileceğiniz adımlar: + +- **Zaman damgası token'larını doğrulama**; böylece bir imzanın sertifika süresi dolmadan önce oluşturulduğunu garantileyebilirsiniz. +- **İmzalayan sertifikaları çıkarma** (`sig.Certificate`) ile özel güven deposu doğrulaması yapma. +- **ASP.NET Core ile bütünleştirme**; doğrulamadan geçemeyen yüklenen PDF'leri otomatik olarak reddetme. + +Birden fazla imza, özel doğrulama mantığı veya alternatif PDF kütüphaneleriyle denemeler yapmaktan çekinmeyin. Bu kılavuz faydalı olduysa, ekip arkadaşlarınızla paylaşın veya yorumlarda kendi ipuçlarınızı ekleyin. + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan ve yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanız ve kendi projelerinizde alternatif uygulama yaklaşımlarını keşfetmeniz için adım adım açıklamalı tam çalışan kod örnekleri içerir. + +- [How to Verify PDF – Validate PDF Signature with Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [verify pdf signature in C# – Complete Guide to Validate Digital Signature PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Verify Digital Signature](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/turkish/net/text-operations/_index.md index 42006bb604..ad3ce5feb3 100644 --- a/pdf/turkish/net/text-operations/_index.md +++ b/pdf/turkish/net/text-operations/_index.md @@ -164,6 +164,8 @@ Aspose.PDF Net için bir kod öğreticisi ### [.NET için Aspose.PDF kullanarak Etiketli PDF'lerdeki Metni Şekillendirin | Erişilebilir ve Estetik PDF Oluşturma Kılavuzu](./style-text-tagged-pdfs-aspose-pdf-net/) .NET için Aspose.PDF ile etiketli PDF belgelerindeki metni nasıl biçimlendireceğinizi öğrenin. Bu kılavuz, erişilebilirliği artırmak için kurulum, teknikler ve pratik uygulamaları kapsar. +### [Aspose.PDF .NET ile Aspose.Pdf.AI kullanarak PDF özetleme – kılavuz](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) + ## Ek Kaynaklar - [Net Belgeleme için Aspose.PDF](https://docs.aspose.com/pdf/net/) diff --git a/pdf/turkish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/turkish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..785ccae3c3 --- /dev/null +++ b/pdf/turkish/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Aspose.Pdf.AI ile PDF özetleme – AI ile PDF nasıl özetlenir, PDF özeti + nasıl oluşturulur ve özet PDF olarak nasıl kaydedilir öğrenin. Tam kod ve en iyi + uygulamalar. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: tr +lastmod: 2026-08-08 +og_description: Aspose.Pdf.AI ile PDF özetleme nasıl yapılır. Bu öğreticide, AI ile + PDF özetlemenin, bir PDF özeti oluşturmanın ve özeti birkaç satır C# kodu ile PDF + olarak kaydetmenin nasıl yapılacağını gösterir. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Aspose.Pdf.AI ile PDF özetleme – adım adım rehber +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Aspose.Pdf.AI ile PDF özetleme – rehber +url: /tr/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# PDF'yi Aspose.Pdf.AI ile Özetleme – Kılavuz + +Eğer PDF'yi hızlı ve güvenilir bir şekilde **özetlemek** istiyorsanız, işi bir AI modeline bırakabilirsiniz. Bu öğreticide, AI ile PDF'yi nasıl özetleyeceğinizi, bir PDF özeti oluşturmayı ve özeti PDF olarak kaydetmeyi Aspose.Pdf.AI SDK for .NET kullanarak tam olarak gösteriyoruz. Tam, çalıştırılabilir bir örnek ve her satırın açıklamasını alacaksınız, böylece çözümü kendi projelerinize uyarlayabilirsiniz. + +Kılavuz şunları kapsar: + +* Kaynak klasörünü ve API anahtarını hazırlama +* `OpenAIClient` oluşturma ve model ile iletişim kurması +* Sıcaklık ve belge yolu gibi özetleme seçeneklerini yapılandırma +* `SummaryCopilot` oluşturma ve özet metnini eşzamansız olarak alma +* Oluşturulan özeti bir PDF dosyasına kaydetme + +OpenAI uç noktasının ötesinde dış hizmetlere gerek yoktur ve kod .NET 6+ ve Aspose.Pdf.AI 23.7 (veya daha yeni) ile çalışır. + +## Önkoşullar + +* **.NET 6 SDK** (veya daha yeni bir .NET sürümü) +* **Aspose.Pdf.AI for .NET** – NuGet üzerinden kurun: `dotnet add package Aspose.Pdf.AI` +* Kullanmak istediğiniz modele erişimi olan bir **OpenAI API anahtarı** (ör. `gpt‑4o`) +* Özetlemek istediğiniz bir PDF dosyası (örnek `SampleDocument.pdf` kullanır) + +`dataDirectory` içinde belirttiğiniz klasörün mevcut olduğundan ve uygulamanın okuma/yazma izinlerine sahip olduğundan emin olun. + +## Adım 1: Proje yapısını ayarlama + +Bir konsol projesi oluşturun (veya kodu mevcut bir .NET uygulamasına entegre edin). Minimal `Program.cs` şu şekildedir: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Bu yapının önemi + +* **`await using`** `OpenAIClient`'ı otomatik olarak serbest bırakır, HTTP bağlantılarını serbest bırakır. +* **`Path.Combine`** OS bağımsız yollar oluşturur, Windows ve Linux arasındaki hataları önler. +* **Temperature** yaratıcılığı kontrol eder; `0.5` dengeli, gerçekçi bir özet verir. +* **`GetSummaryAsync`** düz metin döndürür, `SaveSummaryAsync` ise yazı tiplerini ve düzeni koruyan uygun bir PDF oluşturur. + +## Adım 2: Özetleme seçeneklerini anlamak + +`OpenAISummaryCopilotOptions` sınıfı özetleme sürecini ince ayar yapmanıza olanak tanır: + +| Seçenek | Amaç | Tipik değerler | +|--------|------|----------------| +| `WithTemperature(double)` | Rastgeleliği kontrol eder. `0.0` = deterministik, `1.0` = çok yaratıcı. | `0.3‑0.7` iş belgeleri için | +| `WithDocument(string)` | Kaynak PDF'nin yolu. Okunabilir bir dosya olmalı. | Herhangi bir mutlak veya göreli yol | +| `WithPrompt(string)` *(optional)* | Modeli yönlendirecek özel istem. | “Ana bulguları 150 kelime ile özetle.” | + +**Büyük PDF'ler** (10 MB'den büyük veya çok sayıda sayfa) varsa, özetlemeden önce belgeyi daha küçük parçalara bölmeyi düşünün, token‑limit hatalarını önlemek için. SDK otomatik olarak parçalama yapmaz; `Aspose.Pdf`'den `PdfDocument` kullanarak sayfaları çıkarabilir ve tek tek besleyebilirsiniz. + +## Adım 3: Kodu çalıştırın ve çıktıyı doğrulayın + +1. `SampleDocument.pdf` dosyasını başvurduğunuz `Data` klasörüne yerleştirin. +2. `"YOUR_API_KEY"` ifadesini gerçek OpenAI anahtarınızla değiştirin. +3. `dotnet run` komutunu çalıştırın. + +Konsolda iki bölüm görmelisiniz: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +`Summary_out.pdf` dosyasını herhangi bir PDF görüntüleyiciyle açın – aynı özet metnini, varsayılan bir fontla biçimlendirilmiş olarak içerecek. PDF tamamen aranabilir çünkü SDK metni standart bir PDF sayfası olarak gömüyor. + +## Adım 4: Yaygın varyasyonlar ve uç‑durum yönetimi + +### Belgenin yalnızca bir bölümünü özetleme + +Belirli bir bölüm için **pdf'yi ai ile özetle** gerekiyorsa, önce o aralığı çıkarın: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Ardından `WithDocument`'i `Chapter5.pdf`'ye yönlendirin. + +### Özetin uzunluğunu ayarlama + +Uzunluğu, özel bir istem ekleyerek etkileyebilirsiniz: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### API hatalarını ele alma + +Ağ kesintileri veya kota limitleri `Aspose.Pdf.AI.Exceptions.AIException` hatasını oluşturur. Çağırmayı bir `try / catch` bloğuna sarın: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Özeti özel bir düzenle kaydetme + +`SaveSummaryAsync` düz metin yazar. PDF'yi (başlık, üst bilgi veya marka eklemek) biçimlendirmek için yeni bir `PdfDocument` oluşturun ve özeti manuel olarak ekleyin: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Adım 5: Performans ipuçları ve en iyi uygulamalar + +* Aynı süreçte birden fazla özet için **`OpenAIClient`'i yeniden kullanın** – istemci oluşturmak ucuzdur, ancak temel `HttpClient`'i yeniden kullanmak soket tükenmesini azaltır. +* **Özeti önbelleğe alın** kaynak PDF değişmezse; metni bir veritabanında saklayabilir ve API'yi atlayabilirsiniz. + +## Sonra Ne Öğrenmelisiniz? + +Aşağıdaki öğreticiler, bu kılavuzda gösterilen tekniklere dayanan yakından ilgili konuları kapsar. Her kaynak, ek API özelliklerini ustalaşmanıza 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 içerir. + +- [Aspose.PDF for .NET ile Belirli PDF Sayfalarını Çıkarma ve Kaydetme - Kapsamlı Kılavuz](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Aspose.PDF .NET ile PDF Eklerini Çıkarma ve Kaydetme - Kapsamlı Kılavuz](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Aspose.PDF .NET ile HTML'yi PDF'ye Dönüştürme - Tam Kılavuz](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/conversion-export/_index.md b/pdf/vietnamese/net/conversion-export/_index.md index 0d20734180..67f3baa0fc 100644 --- a/pdf/vietnamese/net/conversion-export/_index.md +++ b/pdf/vietnamese/net/conversion-export/_index.md @@ -227,6 +227,9 @@ Hướng dẫn mã cho Aspose.PDF Net ### [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. +### [Lưu PDF dưới dạng HTML với Aspose.PDF – hướng dẫn từng bước](./save-pdf-as-html-with-aspose-pdf-step-by-step-guide/) +Hướng dẫn chi tiết cách lưu tài liệu PDF dưới dạng HTML bằng Aspose.PDF trong .NET, bao gồm các tùy chọn cấu hình và ví dụ mã. + ## Tài nguyên bổ sung - [Aspose.PDF cho Tài liệu Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/vietnamese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md b/pdf/vietnamese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md new file mode 100644 index 0000000000..31cc262e7e --- /dev/null +++ b/pdf/vietnamese/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-08-08 +description: Lưu PDF dưới dạng HTML bằng Aspose.PDF trong C#. Tìm hiểu cách chuyển + PDF sang HTML, bỏ qua hình ảnh raster và xử lý các trường hợp đặc biệt thường gặp. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf as html +- convert pdf to html +- aspose convert pdf html +- aspose pdf html conversion +language: vi +lastmod: 2026-08-08 +og_description: Lưu PDF dưới dạng HTML bằng Aspose.PDF. Hướng dẫn này chỉ cho bạn + cách chuyển PDF sang HTML, bỏ qua hình ảnh raster và tránh các lỗi thường gặp. +og_image_alt: Screenshot of C# code that saves a PDF as HTML with Aspose.PDF +og_title: Lưu PDF dưới dạng HTML với Aspose.PDF – hướng dẫn C# đầy đủ +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + headline: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + type: TechArticle +- description: Save PDF as HTML using Aspose.PDF in C#. Learn how to convert PDF to + HTML, skip raster images, and handle common edge cases. + name: Save PDF as HTML with Aspose.PDF – step‑by‑step guide + steps: + - name: 6.1 Large PDFs (> 100 MB) + text: 'For very large files, enable streaming to reduce memory pressure:' + - name: 6.2 Password‑protected PDFs + text: 'If the source PDF is encrypted, supply the password before saving:' + - name: 6.3 Unicode characters + text: 'Aspose.PDF automatically embeds Unicode fonts, but you can force a specific + font for consistent rendering:' + - name: 6.4 Custom file naming for multiple pages + text: 'If you want each PDF page as a separate HTML file, set:' + - name: What’s next? + text: '* Explore **aspose pdf html conversion** for embedding fonts and customizing + CSS. * Combine this conversion with a web API to serve HTML on demand. * Try + the opposite direction—**convert pdf to html** and then back to PDF—to validate + round‑trip fidelity.' + type: HowTo +tags: +- Aspose.PDF +- C# +- PDF conversion +title: Lưu PDF dưới dạng HTML với Aspose.PDF – hướng dẫn từng bước +url: /vi/net/conversion-export/save-pdf-as-html-with-aspose-pdf-step-by-step-guide/ +--- + +{{< 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ới Aspose.PDF – hướng dẫn từng bước + +Nếu bạn cần **lưu PDF dưới dạng HTML** nhanh chóng, hướng dẫn này sẽ chỉ cho bạn cách thực hiện với Aspose.PDF cho .NET. Dù bạn đang xây dựng một ứng dụng web xem tài liệu hay xuất báo cáo để tối ưu SEO, bạn sẽ thấy một giải pháp hoàn chỉnh, có thể chạy được, chuyển đổi PDF sang HTML đồng thời cung cấp cho bạn khả năng kiểm soát chi tiết các hình ảnh raster. + +Ngoài nhiệm vụ chính, chúng tôi cũng sẽ đề cập đến các tùy chọn **aspose pdf html conversion** cho phép bạn bỏ qua hình ảnh raster, điều chỉnh việc xử lý CSS và quản lý tài liệu lớn một cách hiệu quả. Khi kết thúc hướng dẫn này, bạn sẽ có một chương trình tự chứa mà có thể đưa vào bất kỳ dự án .NET nào. + +## Yêu cầu trước + +* .NET 6.0 SDK hoặc phiên bản mới hơn (mã hoạt động với .NET Core và .NET Framework cũng được) +* Visual Studio 2022 hoặc bất kỳ IDE nào hỗ trợ C# +* Giấy phép Aspose.PDF cho .NET (bản dùng thử miễn phí dùng để đánh giá) +* Một tệp PDF có tên `report.pdf` đặt trong thư mục bạn có thể tham chiếu từ mã + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.Pdf`. + +## Bước 1: Cài đặt gói NuGet Aspose.PDF + +Mở terminal trong thư mục dự án của bạn và chạy: + +```bash +dotnet add package Aspose.Pdf +``` + +Gói này sẽ thêm không gian tên `Aspose.Pdf`, trong đó chứa lớp `Document` và kiểu `HtmlSaveOptions` được sử dụng cho các thao tác **convert pdf to html**. + +## Bước 2: Tạo dự án console và thêm các chỉ thị using + +Tạo một ứng dụng console mới nếu bạn chưa có: + +```bash +dotnet new console -n PdfToHtmlDemo +cd PdfToHtmlDemo +``` + +Sau đó mở `Program.cs` và thêm các không gian tên cần thiết: + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; +``` + +Các chỉ thị này cho phép bạn truy cập vào API PDF cốt lõi và các tùy chọn lưu HTML kiểm soát quá trình **aspose convert pdf html**. + +## Bước 3: Tải tài liệu PDF + +Dòng lệnh đầu tiên đọc tệp PDF nguồn vào một đối tượng `Aspose.Pdf.Document`. Đối tượng này đại diện cho toàn bộ tệp PDF trong bộ nhớ và cung cấp các phương thức để lưu, chỉnh sửa và trích xuất nội dung. + +```csharp +// Step 1: Load the PDF document +var inputPath = @"YOUR_DIRECTORY\report.pdf"; +var doc = new Document(inputPath); +``` + +*​Tại sao điều này quan trọng*: Việc tải tài liệu một lần giúp việc sử dụng bộ nhớ ổn định, đặc biệt với các PDF lớn. Nếu không tìm thấy tệp, Aspose sẽ ném ra ngoại lệ `FileNotFoundException`, vì vậy hãy chắc chắn đường dẫn là đúng. + +## Bước 4: Cấu hình tùy chọn lưu HTML + +`HtmlSaveOptions` cho phép bạn tinh chỉnh cách PDF được chuyển đổi. Trong hướng dẫn này chúng tôi bỏ qua các hình ảnh raster để giảm kích thước đầu ra, nhưng bạn có thể đổi chế độ thành `EmbedAll` nếu cần. + +```csharp +// Step 2: Create HTML save options and configure raster image handling +var htmlOpts = new HtmlSaveOptions +{ + // Skip embedding raster images; they will be omitted from the output HTML + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: keep CSS inline for a single‑file output (useful for email) + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: set the output folder for external resources (if you enable images) + // ResourcesFolder = @"YOUR_DIRECTORY\html_resources", +}; +``` + +**Các điểm chính**: + +* `RasterImagesSavingMode.Skip` yêu cầu Aspose bỏ qua các hình ảnh bitmap (JPEG, PNG) trong quá trình chuyển đổi. Điều này lý tưởng khi PDF nguồn chứa các trang quét mà bạn không cần hiển thị trong HTML. +* Bạn có thể chuyển sang `EmbedAll` hoặc `External` nếu muốn các hình ảnh được lưu dưới dạng tệp riêng. +* Thuộc tính `ResourcesFolder` chỉ có ý nghĩa khi các hình ảnh được lưu ngoại vi. + +## Bước 5: Lưu tài liệu dưới dạng HTML + +Bây giờ bạn ghi tệp HTML ra đĩa bằng các tùy chọn đã cấu hình. + +```csharp +// Step 3: Save the document as HTML using the configured options +var outputPath = @"YOUR_DIRECTORY\report.html"; +doc.Save(outputPath, htmlOpts); +``` + +Sau khi lệnh này hoàn thành, `report.html` sẽ chứa nội dung văn bản, đồ họa vector và bố cục được giữ nguyên từ PDF gốc, nhưng không có bất kỳ hình ảnh raster nào. Bạn có thể mở tệp trong trình duyệt để kiểm tra kết quả. + +## Kết quả mong đợi + +Khi bạn mở `report.html` trong Chrome hoặc Edge, bạn sẽ thấy: + +* Tất cả tiêu đề, đoạn văn và các hình dạng vector được hiển thị đúng. +* Không có thẻ `` cho hình ảnh raster (được bỏ qua do chế độ `Skip`). +* CSS sạch sẽ, tối thiểu, có thể là nội tuyến hoặc trong một stylesheet riêng, tùy thuộc vào tùy chọn bạn đã chọn. + +Nếu bạn cần xác nhận rằng các hình ảnh đã bị bỏ qua, hãy kiểm tra nguồn trang (`Ctrl+U`). Bạn sẽ không thấy bất kỳ mục `` nào. + +## Bước 6: Xử lý các trường hợp đặc biệt thường gặp + +### 6.1 PDF lớn (> 100 MB) + +Đối với các tệp rất lớn, bật streaming để giảm áp lực bộ nhớ: + +```csharp +htmlOpts.Streaming = true; +``` + +Streaming sẽ ghi các đoạn HTML trực tiếp ra đĩa, ngăn toàn bộ tài liệu được giữ trong bộ nhớ. + +### 6.2 PDF có mật khẩu + +Nếu PDF nguồn được mã hoá, cung cấp mật khẩu trước khi lưu: + +```csharp +doc.Decrypt("yourPassword"); +``` + +Cố gắng lưu mà không giải mã sẽ ném ra ngoại lệ `InvalidPasswordException`. + +### 6.3 Ký tự Unicode + +Aspose.PDF tự động nhúng các phông chữ Unicode, nhưng bạn có thể ép buộc một phông chữ cụ thể để đảm bảo việc hiển thị nhất quán: + +```csharp +htmlOpts.FontEmbeddingMode = HtmlSaveOptions.FontEmbeddingModes.EmbedAll; +``` + +### 6.4 Đặt tên tệp tùy chỉnh cho nhiều trang + +Nếu bạn muốn mỗi trang PDF thành một tệp HTML riêng, thiết lập: + +```csharp +htmlOpts.SplitIntoPages = true; +``` + +Điều này sẽ tạo ra `report_page_1.html`, `report_page_2.html`, v.v., hữu ích cho việc phân trang trong các ứng dụng web. + +## Ví dụ đầy đủ, có thể chạy + +Dưới đây là chương trình hoàn chỉnh tích hợp tất cả các bước đã thảo luận. Sao chép nó vào `Program.cs`, điều chỉnh các đường dẫn và chạy `dotnet run`. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Saving; + +namespace PdfToHtmlDemo +{ + class Program + { + static void Main() + { + // Adjust these paths to match your environment + var inputPath = @"YOUR_DIRECTORY\report.pdf"; + var outputPath = @"YOUR_DIRECTORY\report.html"; + + // Load the PDF document + var doc = new Document(inputPath); + + // Configure HTML save options + var htmlOpts = new HtmlSaveOptions + { + // Skip raster images to keep HTML lightweight + RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.Skip, + + // Optional: inline CSS for a single‑file output + // CssStyleSheetType = HtmlSaveOptions.CssStyleSheetType.Inline, + + // Optional: enable streaming for large PDFs + // Streaming = true + }; + + // Save as HTML + doc.Save(outputPath, htmlOpts); + + Console.WriteLine($"PDF successfully saved as HTML at: {outputPath}"); + } + } +} +``` + +**Xác minh**: Sau khi chạy, console sẽ in thông báo thành công. Mở tệp HTML đã tạo trong trình duyệt để xác nhận rằng văn bản và đồ họa vector hiển thị đúng và các hình ảnh raster đã bị bỏ qua. + +## Mẹo chuyên nghiệp và những lưu ý + +* **Mẹo chuyên nghiệp**: Nếu sau này bạn cần các hình ảnh raster, hãy đổi `RasterImagesSavingMode` thành `External` và thiết lập `ResourcesFolder`. Điều này sẽ tạo một thư mục con `images` chứa các bitmap đã trích xuất. +* **Cảnh báo**: Sử dụng chế độ `Skip` mặc định trên các PDF phụ thuộc nhiều vào hình ảnh quét sẽ tạo ra các khu vực trống nơi các hình ảnh đó nên xuất hiện. Luôn thử nghiệm với một mẫu đại diện của tài liệu của bạn. +* **Mẹo hiệu năng**: Tái sử dụng một thể hiện `HtmlSaveOptions` duy nhất cho nhiều tài liệu sẽ giảm chi phí tạo đối tượng trong các chuyển đổi hàng loạt. +* **Kiểm tra phiên bản**: API được trình bày hoạt động với Aspose.PDF cho .NET phiên bản 23.9 trở lên. Các phiên bản cũ hơn có thể sử dụng `HtmlSaveOptions.RasterImagesSavingMode` với tên enum hơi khác. + +## Kết luận + +Bây giờ bạn đã biết cách **lưu PDF dưới dạng HTML** bằng Aspose.PDF, cách kiểm soát việc xử lý hình ảnh raster, và cách giải quyết các thách thức thường gặp như tệp lớn, bảo vệ bằng mật khẩu, và xuất HTML theo từng trang. Giải pháp hoàn chỉnh này cho phép bạn tích hợp chuyển đổi PDF‑sang‑HTML vào bất kỳ ứng dụng C# nào một cách tự tin. + +### Tiếp theo là gì? + +* Khám phá **aspose pdf html conversion** để nhúng phông chữ và tùy chỉnh CSS. +* Kết hợp chuyển đổi này với một web API để cung cấp HTML theo yêu cầu. +* Thử hướng ngược lại — **convert pdf to html** và sau đó quay lại PDF — để xác thực độ chính xác vòng quay. + +Hãy thoải mái thử nghiệm các tùy chọn, và chia sẻ kết quả của bạn trong phần bình luận hoặc trên diễn đàn Aspose. Chúc lập trình vui vẻ! + +## Bạn nên học gì tiếp theo? + +Các hướng dẫn sau đây bao gồm các chủ đề liên quan chặt chẽ, xây dựng dựa 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, hoạt động 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. + +- [Chuyển đổi PDF sang HTML trong .NET bằng Aspose.PDF mà không lưu hình ảnh](/pdf/english/net/conversion-export/convert-pdf-html-net-asposepdf-no-images/) +- [Chuyển đổi PDF sang HTML bằng Aspose.PDF .NET: Lưu hình ảnh dưới dạng PNG ngoại vi](/pdf/english/net/conversion-export/pdf-to-html-conversion-external-png-aspose-pdf-net/) +- [Chuyển đổi PDF sang HTML với URL hình ảnh tùy chỉnh bằng Aspose.PDF .NET: Hướng dẫn toàn diện](/pdf/english/net/conversion-export/convert-pdf-html-custom-image-urls-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/digital-signatures/_index.md b/pdf/vietnamese/net/digital-signatures/_index.md index 4eda08eebc..383101f892 100644 --- a/pdf/vietnamese/net/digital-signatures/_index.md +++ b/pdf/vietnamese/net/digital-signatures/_index.md @@ -58,12 +58,16 @@ Tìm hiểu cách xác minh chữ ký số trong tệp PDF bằng Aspose.PDF cho ### [Xác minh chữ ký PDF trong C# – Hướng dẫn toàn diện để xác thực chữ ký số PDF](./verify-pdf-signature-in-c-complete-guide-to-validate-digital/) Hướng dẫn chi tiết cách xác thực chữ ký số PDF bằng C# với Aspose.PDF, bao gồm các bước triển khai và kiểm tra tính toàn vẹn. + ### [Tải tài liệu PDF C# – Chuyển đổi sang PDF/X‑4 và Liệt kê chữ ký](./load-pdf-document-c-convert-to-pdf-x-4-list-signatures/) Hướng dẫn cách tải tài liệu PDF, chuyển đổi sang định dạng PDF/X‑4 và liệt kê các chữ ký trong tài liệu bằng C#. ### [Xác thực chữ ký PDF với Aspose – Chuyển PDF sang HTML](./validate-pdf-signature-with-aspose-convert-pdf-to-html/) Hướng dẫn cách xác thực chữ ký PDF và chuyển đổi tài liệu PDF sang HTML bằng Aspose. +### [Cách xác thực PDF với Aspose.PDF – kiểm tra tính hợp lệ của chữ ký PDF trong C#](./how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/) +Hướng dẫn cách kiểm tra tính hợp lệ của chữ ký PDF bằng Aspose.PDF trong C#. + ## Tài nguyên bổ sung - [Aspose.PDF cho Tài liệu Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/vietnamese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md b/pdf/vietnamese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md new file mode 100644 index 0000000000..274cad6cd9 --- /dev/null +++ b/pdf/vietnamese/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Cách xác thực PDF bằng Aspose.PDF và xác thực chữ ký số PDF. Hãy làm + theo hướng dẫn từng bước này để kiểm tra chữ ký PDF nhanh chóng. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to validate pdf +- validate pdf digital signature +- check pdf signature +- check pdf signature validity +- how to load pdf +language: vi +lastmod: 2026-08-08 +og_description: Cách xác thực PDF bằng Aspose.PDF. Tìm hiểu cách xác thực chữ ký số + PDF và kiểm tra tính hợp lệ của chữ ký PDF chỉ trong vài dòng mã C#. +og_image_alt: Screenshot of C# console output showing a valid or invalid PDF signature +og_title: Cách xác thực PDF – kiểm tra tính hợp lệ của chữ ký PDF với Aspose.PDF trong + C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + headline: How to validate PDF with Aspose.PDF – check pdf signature validity in + C# + type: TechArticle +- description: How to validate PDF using Aspose.PDF and validate pdf digital signature. + Follow this step‑by‑step guide to check pdf signature quickly. + name: How to validate PDF with Aspose.PDF – check pdf signature validity in C# + steps: + - name: Handling multiple signatures + text: 'If your PDF contains more than one signature, iterate over the `Signatures` + collection:' + - name: Expected console output + text: '``` Valid ```' + - name: 1. Missing trusted certificate + text: If you receive `Invalid` and you know the signature should be trusted, verify + that the correct root certificate is supplied to `CertificateValidator`. Use + the overload that accepts a `X509Certificate2Collection` for multiple roots. + - name: 2. Signature with external references + text: Some signatures cover external content (e.g., an attached file). Ensure + the external resources are accessible; otherwise the hash verification fails. + - name: 3. Time‑stamp validation + text: 'A signature may include a time‑stamp token. To validate it, configure the + validator to check the time‑stamp authority (TSA) certificates:' + - name: 4. Performance with large PDFs + text: Loading a multi‑hundred‑page PDF can consume memory. If you only need signature + data, use `PdfFileEditor` to extract the signature dictionary without rendering + pages. + - name: 5. Thread safety + text: '`Document` instances are not thread‑safe. Create a new `Document` per thread + when validating many PDFs in parallel.' + type: HowTo +tags: +- Aspose.PDF +- digital signature +- C# +- PDF validation +title: Cách xác thực PDF bằng Aspose.PDF – kiểm tra tính hợp lệ của chữ ký PDF trong + C# +url: /vi/net/digital-signatures/how-to-validate-pdf-with-aspose-pdf-check-pdf-signature-vali/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách xác thực PDF với Aspose.PDF – kiểm tra tính hợp lệ của chữ ký pdf trong C# + +Nếu bạn cần **cách xác thực PDF** chứa chữ ký số, hướng dẫn này sẽ cung cấp cho bạn một giải pháp hoàn chỉnh. Bạn sẽ học cách tải PDF, tạo một certificate validator, và kiểm tra tính hợp lệ của chữ ký pdf bằng Aspose.PDF cho .NET. + +Xác thực chữ ký số của PDF là một yêu cầu phổ biến cho việc tuân thủ, lập hoá đơn và trao đổi tài liệu an toàn. Khi kết thúc hướng dẫn này, bạn có thể tự tin kiểm tra xem một PDF đã ký có đáng tin cậy hay không, và bạn sẽ hiểu cách xử lý các trường hợp đặc biệt như thiếu chứng chỉ hoặc có nhiều chữ ký. + +## Prerequisites + +Trước khi bắt đầu, hãy chắc chắn rằng bạn có: + +- .NET 6.0 hoặc phiên bản mới hơn đã được cài đặt +- Một IDE như Visual Studio 2022 (bất kỳ trình soạn thảo nào hỗ trợ C# đều được) +- Một bản sao có giấy phép của **Aspose.PDF for .NET** (bản dùng thử miễn phí có thể dùng để đánh giá) +- Một file PDF đã ký (`signed.pdf`) và, nếu chữ ký dựa trên CA riêng, chứng chỉ tin cậy tương ứng (`trustedCertificate.pfx`) + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.PDF`. + +## Step 1: Install Aspose.PDF + +Mở terminal trong thư mục dự án của bạn và chạy: + +```bash +dotnet add package Aspose.PDF +``` + +Lệnh này sẽ thêm thư viện Aspose.PDF mới nhất, chứa các lớp `Document` và `CertificateValidator` sẽ được sử dụng sau này. + +## Step 2: Load the PDF document + +Tải PDF là thao tác đầu tiên bạn thực hiện khi **cách tải pdf** một cách lập trình. Hàm khởi tạo `Document` chấp nhận đường dẫn file, một stream, hoặc một mảng byte. Sử dụng đường dẫn đầy đủ giúp ví dụ rõ ràng hơn. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Step 2: Load the signed PDF document + var pdfPath = @"YOUR_DIRECTORY\signed.pdf"; + var doc = new Document(pdfPath); +``` + +**Why this matters:** Đối tượng `Document` đại diện cho toàn bộ file PDF trong bộ nhớ. Nếu không tải file, bạn không thể truy cập bộ sưu tập `Signatures`, mà cần thiết để **check pdf signature** dữ liệu. + +## Step 3: Prepare the certificate validator + +Một chữ ký số chỉ được tin cậy nếu chứng chỉ ký nối tới một gốc mà bạn tin tưởng. `CertificateValidator` cho phép bạn chỉ định cho Aspose.PDF một kho chứng chỉ tin cậy hoặc một file PFX cụ thể. + +```csharp + // Step 3: Create a certificate validator (optional: provide a trusted root certificate) + var certPath = @"YOUR_DIRECTORY\trustedCertificate.pfx"; + var validator = new CertificateValidator(certPath); +``` + +Nếu PDF của bạn sử dụng CA công cộng mà Windows đã tin cậy, bạn có thể bỏ qua `certPath` và khởi tạo `CertificateValidator` bằng constructor mặc định. Cung cấp một file PFX tùy chỉnh hữu ích cho môi trường PKI nội bộ. + +## Step 4: Validate the first digital signature + +Một PDF có thể chứa nhiều chữ ký. Để đơn giản, hướng dẫn này sẽ xác thực chữ ký đầu tiên (`Signatures[0]`). Phương thức `Validate` trả về `true` khi chữ ký vẫn nguyên vẹn về mặt mật mã **and** chứng chỉ ký được tin cậy. + +```csharp + // Step 4: Validate the first digital signature in the document + bool isSignatureValid = doc.Signatures[0].Validate(validator); +``` + +**What happens under the hood:** +- Phương thức kiểm tra hàm băm của nội dung đã ký so với giá trị chữ ký. +- Nó xây dựng chuỗi chứng chỉ bằng validator đã cung cấp. +- Trạng thái thu hồi (CRL/OCSP) được đánh giá nếu validator được cấu hình cho việc này. + +### Handling multiple signatures + +Nếu PDF của bạn có hơn một chữ ký, hãy lặp qua bộ sưu tập `Signatures`: + +```csharp + foreach (var signature in doc.Signatures) + { + bool valid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(valid ? "Valid" : "Invalid")}"); + } +``` + +Mẫu này cho phép bạn **check pdf signature** trên mỗi trang và báo cáo kết quả riêng lẻ. + +## Step 5: Output the validation result + +Cuối cùng, ghi kết quả ra console. Trong mã sản xuất, bạn có thể ghi log kết quả hoặc ném ngoại lệ khi chữ ký không hợp lệ. + +```csharp + // Step 5: Output the validation result + Console.WriteLine(isSignatureValid ? "Valid" : "Invalid"); + } +} +``` + +### Expected console output + +``` +Valid +``` + +hoặc + +``` +Invalid +``` + +Thông báo phản ánh giá trị boolean trả về bởi `Validate`. Kết quả “Invalid” có thể cho thấy tài liệu đã bị thay đổi, chứng chỉ không tin cậy, hoặc chứng chỉ ký đã hết hạn. + +## Step 6: Common pitfalls and best‑practice tips + +### 1. Missing trusted certificate +Nếu bạn nhận được `Invalid` và biết rằng chữ ký nên được tin cậy, hãy kiểm tra xem chứng chỉ gốc đúng đã được cung cấp cho `CertificateValidator` chưa. Sử dụng overload chấp nhận `X509Certificate2Collection` cho nhiều gốc. + +### 2. Signature with external references +Một số chữ ký bao phủ nội dung bên ngoài (ví dụ: file đính kèm). Đảm bảo các tài nguyên bên ngoài có thể truy cập; nếu không, việc kiểm tra hàm băm sẽ thất bại. + +### 3. Time‑stamp validation +Chữ ký có thể bao gồm token thời gian. Để xác thực, cấu hình validator để kiểm tra chứng chỉ của authority thời gian (TSA): + +```csharp +validator.CheckTimeStamp = true; +``` + +### 4. Performance with large PDFs +Tải một PDF hàng trăm trang có thể tiêu tốn bộ nhớ. Nếu bạn chỉ cần dữ liệu chữ ký, hãy dùng `PdfFileEditor` để trích xuất dictionary chữ ký mà không cần render các trang. + +```csharp +var editor = new PdfFileEditor(); +editor.ExtractSignature(pdfPath, "signature.xml"); +``` + +### 5. Thread safety +Các instance của `Document` không an toàn với đa luồng. Tạo một `Document` mới cho mỗi luồng khi xác thực nhiều PDF đồng thời. + +## Full, runnable example + +Dưới đây là chương trình hoàn chỉnh mà bạn có thể sao chép, dán và chạy sau khi cập nhật các đường dẫn file. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Facades; +using System; + +class PdfSignatureValidator +{ + static void Main() + { + // Path to the signed PDF + var pdfPath = @"C:\Docs\signed.pdf"; + + // Optional: path to a trusted root certificate (PFX). Omit if Windows trust store is sufficient. + var trustedCertPath = @"C:\Certs\trustedCertificate.pfx"; + + // Load the PDF document + var doc = new Document(pdfPath); + + // Create a validator; supply the trusted certificate if needed + var validator = new CertificateValidator(trustedCertPath); + + // Validate each signature and report the result + foreach (var signature in doc.Signatures) + { + bool isValid = signature.Validate(validator); + Console.WriteLine($"Signature on page {signature.PageNumber}: {(isValid ? "Valid" : "Invalid")}"); + } + } +} +``` + +**Running the program** in ra một dòng cho mỗi chữ ký, rõ ràng chỉ ra PDF có vượt qua kiểm tra **validate pdf digital signature** hay không. + +## Conclusion + +Bạn giờ đã biết **cách xác thực PDF** chứa chữ ký số bằng Aspose.PDF cho .NET. Hướng dẫn đã bao gồm tải PDF, cấu hình certificate validator, kiểm tra tính hợp lệ của chữ ký pdf, xử lý nhiều chữ ký, và khắc phục các vấn đề thường gặp. + +Tiếp theo, khám phá các chủ đề liên quan như **cách ký PDF**, **cách thêm token thời gian**, và **cách trích xuất nội dung đã ký**. Những mở rộng này cho phép bạn xây dựng một quy trình tài liệu an toàn từ đầu đến cuối trong C#. + +--- + + +## 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ẽ, dựa trên các kỹ thuật được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoàn chỉnh với giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Cách xác thực PDF – Xác thực chữ ký PDF với Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [Cách trích xuất thông tin chữ ký PDF bằng Aspose.PDF .NET: Hướng dẫn từng bước](/pdf/english/net/digital-signatures/extract-pdf-signature-info-aspose-pdf-net/) +- [Cách xóa chữ ký số PDF bằng Aspose.PDF .NET | Hướng dẫn đầy đủ](/pdf/english/net/digital-signatures/remove-pdf-digital-signatures-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/document-conversion/_index.md b/pdf/vietnamese/net/document-conversion/_index.md index 62e00da145..d285698ba0 100644 --- a/pdf/vietnamese/net/document-conversion/_index.md +++ b/pdf/vietnamese/net/document-conversion/_index.md @@ -58,6 +58,7 @@ Bạn sẽ học cách chỉ định cài đặt chuyển đổi, trích xuất | [XML To PDFĐặt Đường dẫn hình ảnh](./xml-to-pdfset-image-path/) | Tìm hiểu cách chuyển đổi XML sang PDF dễ dàng bằng Aspose.PDF cho .NET. Hướng dẫn chi tiết này hướng dẫn bạn từng bước trong quy trình, từ thiết lập đến hoàn tất. | | [XPS sang PDF](./xps-to-pdf/) Tìm hiểu cách chuyển đổi tệp XPS sang 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ê tài liệu. | | [Chuyển đổi PDF sang PDF/X‑4 trong C# – Hướng dẫn ASP.NET PDF từng bước](./convert-pdf-to-pdf-x-4-in-c-step-by-step-asp-net-pdf-tutoria/) | Tìm hiểu cách chuyển đổi tệp PDF sang định dạng PDF/X‑4 bằng Aspose.PDF cho .NET trong hướng dẫn từng bước này. | +| [Hướng dẫn chuyển đổi PDFX4 – đặt tiêu chuẩn PDF và chuyển đổi PDF bằng Aspose](./pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/) | Tìm hiểu cách đặt tiêu chuẩn PDF/X‑4 và chuyển đổi PDF bằng Aspose.PDF cho .NET trong hướng dẫn chi tiết này. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md b/pdf/vietnamese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md new file mode 100644 index 0000000000..bee512771c --- /dev/null +++ b/pdf/vietnamese/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/_index.md @@ -0,0 +1,229 @@ +--- +category: general +date: 2026-08-08 +description: Bài hướng dẫn chuyển đổi pdfx4 cho thấy cách thiết lập tiêu chuẩn PDF + thành PDF/X‑4 và chuyển đổi PDF bằng Aspose để đạt được chuyển đổi định dạng đáng + tin cậy. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdfx4 conversion tutorial +- set pdf standard +- convert pdf pdfx4 +- convert pdf using aspose +- aspose pdf format conversion +language: vi +lastmod: 2026-08-08 +og_description: Hướng dẫn chuyển đổi pdfx4 giải thích cách đặt tiêu chuẩn PDF thành + PDF/X‑4 và thực hiện việc chuyển đổi PDF đáng tin cậy bằng Aspose trong C#. +og_image_alt: Screenshot of a C# project converting a PDF to PDF/X‑4 with Aspose +og_title: Hướng dẫn chuyển đổi pdfx4 – đặt tiêu chuẩn PDF và chuyển đổi PDF bằng Aspose +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdfx4 conversion tutorial that shows how to set PDF standard to PDF/X‑4 + and convert PDF with Aspose for reliable format conversion. + headline: pdfx4 conversion tutorial – set PDF standard and convert PDF using Aspose + type: TechArticle +tags: +- Aspose.PDF +- PDF conversion +- .NET +- PDF/X-4 +title: Hướng dẫn chuyển đổi pdfx4 – thiết lập tiêu chuẩn PDF và chuyển đổi PDF bằng + Aspose +url: /vi/net/document-conversion/pdfx4-conversion-tutorial-set-pdf-standard-and-convert-pdf-u/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# hướng dẫn chuyển đổi pdfx4 – đặt tiêu chuẩn PDF và chuyển đổi PDF bằng Aspose + +Nếu bạn cần một **hướng dẫn chuyển đổi pdfx4**, bài viết này sẽ hướng dẫn bạn qua toàn bộ quy trình thiết lập tiêu chuẩn PDF thành PDF/X‑4 và chuyển đổi PDF bằng Aspose. Dù bạn đang chuẩn bị các tệp sẵn sàng in hay đảm bảo tuân thủ lưu trữ lâu dài, bạn sẽ học được quy trình **aspose pdf format conversion** đáng tin cậy, hoạt động với .NET 6 trở lên. + +Bài hướng dẫn bao gồm mọi thứ từ thiết lập dự án đến xử lý các trường hợp ngoại lệ như thiếu tệp nguồn hoặc tính năng không được hỗ trợ. Khi đọc xong, bạn sẽ có một chương trình C# tự chứa, tạo ra tệp PDF/X‑4 tuân thủ sẵn sàng cho các quy trình downstream. + +## 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 SDK hoặc mới hơn được cài đặt ([tải tại đây](https://dotnet.microsoft.com/download)) +- Giấy phép hợp lệ của Aspose.PDF for .NET (bản dùng thử miễn phí đủ cho việc thử nghiệm) +- Visual Studio 2022, VS Code, hoặc bất kỳ IDE nào hỗ trợ phát triển .NET +- Một tệp PDF nguồn mà bạn muốn chuyển đổi (đặt nó vào một thư mục đã biết) + +Các yêu cầu này đảm bảo mã chạy mà không cần cấu hình bổ sung. + +## Bước 1: Tạo dự án console .NET mới + +Mở terminal và chạy các lệnh sau để khởi tạo một ứng dụng console có tên `PdfX4Converter`: + +```bash +dotnet new console -n PdfX4Converter +cd PdfX4Converter +``` + +Thêm gói NuGet Aspose.PDF: + +```bash +dotnet add package Aspose.Pdf +``` + +Gói `Aspose.Pdf` cung cấp lớp `Document` và `PdfFormatConversionOptions` cần thiết cho các thao tác **convert pdf pdfx4**. + +## Bước 2: Viết mã chuyển đổi + +Mở `Program.cs` (hoặc `Program.cs` nếu bạn đang dùng cú pháp top‑level mới) và thay thế nội dung bằng ví dụ đầy đủ dưới đây. Mã minh họa cách **set pdf standard** thành PDF/X‑4, thực hiện chuyển đổi và bao gồm xử lý lỗi cho các vấn đề thường gặp. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Conversion; // Namespace for conversion options + +class PdfX4Converter +{ + static void Main(string[] args) + { + // -------------------------------------------------------------------- + // 1️⃣ Validate input arguments + // -------------------------------------------------------------------- + if (args.Length != 2) + { + Console.WriteLine("Usage: PdfX4Converter "); + return; + } + + string sourcePath = args[0]; + string outputPath = args[1]; + + // -------------------------------------------------------------------- + // 2️⃣ Load the source PDF document + // -------------------------------------------------------------------- + Document doc; + try + { + doc = new Document(sourcePath); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load source PDF: {ex.Message}"); + return; + } + + // -------------------------------------------------------------------- + // 3️⃣ Configure conversion options to **set PDF standard** to PDF/X‑4 + // -------------------------------------------------------------------- + var conversionOptions = new PdfFormatConversionOptions + { + // The PdfStandard enum defines all PDF/X, PDF/A, and PDF/UA standards. + PdfStandard = PdfStandard.PdfX4 + }; + + // Optional: enforce font embedding for better print reliability + conversionOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; + + // -------------------------------------------------------------------- + // 4️⃣ Perform the conversion and save the result + // -------------------------------------------------------------------- + try + { + doc.Convert(conversionOptions, outputPath); + Console.WriteLine($"Successfully created PDF/X‑4 file at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Conversion failed: {ex.Message}"); + } + } +} +``` + +### Tại sao mỗi phần lại quan trọng + +- **Kiểm tra đối số** ngăn chương trình bị sập khi người dùng quên cung cấp đường dẫn tệp. +- **Việc tải `Document`** sẽ ném ngoại lệ rõ ràng nếu PDF nguồn bị thiếu hoặc hỏng, điều này rất cần thiết cho trải nghiệm **convert pdf using aspose** ổn định. +- **`PdfFormatConversionOptions`** là nơi bạn **set pdf standard**. Khi gán `PdfStandard.PdfX4`, Aspose tự động điều chỉnh không gian màu, nhúng các phông chữ cần thiết và ghi metadata PDF/X‑4 tương ứng. +- **`FontEmbeddingMode.EmbedAll`** đảm bảo mọi phông chữ được sử dụng trong PDF nguồn đều được nhúng, một yêu cầu phổ biến cho các PDF sẵn sàng in. +- **`doc.Convert`** thực hiện **aspose pdf format conversion** thực tế. Phương thức này ghi tệp mới trong một lần gọi, đơn giản hoá quy trình làm việc. + +## Bước 3: Chạy trình chuyển đổi + +Biên dịch dự án và thực thi với các đường dẫn nguồn và đích: + +```bash +dotnet build +dotnet run -- "C:\Docs\source.pdf" "C:\Docs\output_pdfx4.pdf" +``` + +Nếu mọi thứ hoạt động, console sẽ in ra: + +``` +Successfully created PDF/X‑4 file at: C:\Docs\output_pdfx4.pdf +``` + +Bây giờ bạn có thể mở `output_pdfx4.pdf` trong bất kỳ trình xem PDF nào hỗ trợ PDF/X‑4 (ví dụ: Adobe Acrobat Pro) và kiểm tra tính tuân thủ qua *File → Properties → Standards*. + +## Bước 4: Kiểm tra tính tuân thủ PDF/X‑4 (tùy chọn) + +Đối với các pipeline sản xuất, bạn có thể muốn xác thực đầu ra một cách tự động. Aspose cung cấp lớp `PdfComplianceChecker` (có trong gói `Aspose.Pdf`) có thể được sử dụng như sau: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Checker; + +// ... + +bool isCompliant = PdfComplianceChecker.CheckPdfStandard( + outputPath, + PdfStandard.PdfX4, + out var validationResult); + +Console.WriteLine(isCompliant + ? "The file complies with PDF/X‑4." + : $"Compliance check failed: {validationResult}"); +``` + +Chạy đoạn mã này sau khi chuyển đổi sẽ cho bạn kết quả **pass/fail** rõ ràng, hữu ích cho các pipeline CI/CD tự động. + +## Bước 5: Những khó khăn thường gặp và mẹo thực hành + +| Vấn đề | Nguyên nhân | Cách tránh | +|-------|-------------|------------| +| Thiếu phông chữ trong PDF nguồn | Các phông chữ được tham chiếu nhưng không được nhúng, gây cảnh báo khi chuyển đổi | Sử dụng `FontEmbeddingMode.EmbedAll` như đã minh họa | +| PDF nguồn chứa các đối tượng trong suốt không cho phép trong PDF/X‑4 | PDF/X‑4 không cho phép một số chế độ pha trộn trong suốt | Tiền xử lý PDF bằng `doc.ProcessTransparentObjects()` trước khi chuyển đổi | +| Tệp lớn gây OutOfMemoryException | Toàn bộ tài liệu được tải vào bộ nhớ | Dòng dữ liệu nguồn bằng `new Document(new FileStream(sourcePath, FileMode.Open, FileAccess.Read))` | +| Không áp dụng giấy phép | Phiên bản dùng thử thêm watermark | Gọi `Aspose.Pdf.License license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic");` trước khi sử dụng bất kỳ API nào của Aspose | + +Áp dụng những mẹo này sẽ giúp trải nghiệm **convert pdf pdfx4** mượt mà hơn trong môi trường sản xuất. + +## Bước 6: Mở rộng tutorial + +Khi bạn đã nắm vững **hướng dẫn chuyển đổi pdfx4** cơ bản, bạn có thể khám phá: + +- **Chuyển đổi hàng loạt**: lặp qua một thư mục các PDF và chuyển đổi từng cái sang PDF/X‑4. +- **Tiêm metadata**: thêm metadata XMP yêu cầu bởi các nhà in cụ thể. +- **Quản lý hồ sơ màu**: gắn hồ sơ ICC bằng `doc.ColorSpace = ColorSpace.DeviceRGB;` trước khi chuyển đổi. + +Tất cả các mở rộng này dựa trên nền tảng **aspose pdf format conversion** đã được trình bày ở trên. + +## Kết luận + +Bài **hướng dẫn chuyển đổi pdfx4** này đã chỉ cho bạn cách **set pdf standard** thành PDF/X‑4, thực hiện **convert pdf using Aspose** đáng tin cậy, và xác minh kết quả. Giờ đây bạn có một chương trình C# hoàn chỉnh, có thể tích hợp vào các pipeline xử lý tài liệu lớn hơn hoặc dùng như một tiện ích độc lập. Hãy thử nghiệm xử lý hàng loạt, quản lý metadata, hoặc các tiêu chuẩn PDF thay thế (PDF/A‑2b, PDF/UA) để nâng cao kỹ năng **aspose pdf format conversion** của mình. + +Chúc lập trình vui vẻ, và tận hưởng sự tự tin khi xuất ra các tệp PDF/X‑4 tuân thủ chuẩn! + +## 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 mã mẫu đầy đủ và giải thích chi tiết 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. + +- [Convert PDF/A to Standard PDF Using Aspose.PDF .NET : A Comprehensive Guide](/pdf/english/net/conversion-export/convert-pdf-a-standard-pdf-aspose-net/) +- [How to Set an Expiry Date on PDFs Using Aspose.PDF for .NET (C# Tutorial)](/pdf/english/net/security-permissions/set-pdf-expiry-date-aspose-dotnet/) +- [Comprehensive Guide: Convert PDF to TIFF Using Aspose.PDF .NET for Seamless Document Conversion](/pdf/english/net/conversion-export/convert-pdf-to-tiff-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/pdf/vietnamese/net/document-creation/_index.md b/pdf/vietnamese/net/document-creation/_index.md index 2a291c634b..bafa9e9516 100644 --- a/pdf/vietnamese/net/document-creation/_index.md +++ b/pdf/vietnamese/net/document-creation/_index.md @@ -79,6 +79,9 @@ Hướng dẫn cách thêm trang, hình dạng và lưu tài liệu PDF bằng A ### [Tạo tài liệu PDF với Aspose.PDF – Hướng dẫn từng bước](./create-pdf-document-with-aspose-pdf-step-by-step-guide/) Hướng dẫn chi tiết cách tạo tài liệu PDF bằng Aspose.PDF trong .NET, bao gồm các bước thiết lập và ví dụ mã thực tế. +### [Tạo tài liệu PDF trong C# với Aspose.Pdf](./create-pdf-document-in-c-with-aspose-pdf/) +Hướng dẫn tạo tài liệu PDF bằng C# sử dụng Aspose.Pdf. + ## Tài nguyên bổ sung - [Aspose.PDF cho Tài liệu Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/vietnamese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md b/pdf/vietnamese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md new file mode 100644 index 0000000000..89924802a5 --- /dev/null +++ b/pdf/vietnamese/net/document-creation/create-pdf-document-in-c-with-aspose-pdf/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-08-08 +description: Tạo tài liệu PDF trong C# bằng Aspose.Pdf. Tìm hiểu cách thêm trang trắng + vào PDF, thêm đoạn văn vào PDF và định vị văn bản trong PDF với tọa độ chính xác. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create pdf document +- add blank page pdf +- add paragraph to pdf +- how to add note pdf +- position text in pdf +language: vi +lastmod: 2026-08-08 +og_description: Tạo tài liệu PDF trong C# nhanh chóng. Hướng dẫn này cho thấy cách + thêm trang PDF trống, thêm đoạn văn vào PDF và định vị văn bản trong PDF bằng Aspose.Pdf. +og_image_alt: Generated PDF document created with C# Aspose.Pdf showing positioned + note +og_title: Tạo tài liệu PDF trong C# với Aspose.Pdf – hướng dẫn đầy đủ +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Create pdf document in C# using Aspose.Pdf. Learn how to add blank + page pdf, add paragraph to pdf, and position text in pdf with precise coordinates. + headline: Create pdf document in C# with Aspose.Pdf + type: TechArticle +tags: +- Aspose.Pdf +- C# +- PDF generation +title: Tạo tài liệu PDF trong C# với Aspose.Pdf +url: /vi/net/document-creation/create-pdf-document-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 liệu pdf trong C# với Aspose.Pdf + +Nếu bạn cần **tạo tài liệu pdf** một cách lập trình, hướng dẫn này sẽ chỉ cho bạn cách thực hiện. Sử dụng Aspose.Pdf cho .NET, bạn có thể thêm một trang pdf trống, chèn một đoạn văn vào pdf, và định vị văn bản trong pdf với độ chính xác pixel‑perfect—tất cả chỉ trong vài dòng mã C#. + +Bạn sẽ hoàn thành tutorial với một tệp PDF hoạt động đầy đủ chứa một ghi chú được đặt tại tọa độ bạn chỉ định. Không cần công cụ bên ngoài, không cần chỉnh sửa thủ công—chỉ có mã sạch, có thể lặp lại mà bạn có thể đưa vào bất kỳ dự án .NET nào. + +## Những gì bạn sẽ học + +* Cách **tạo tài liệu pdf** với Aspose.Pdf. +* Cách đúng để **thêm trang pdf trống** và tại sao một trang phải tồn tại trước khi thêm nội dung. +* Cách **thêm đoạn văn vào pdf** và gắn thẻ tùy chỉnh (hữu ích cho việc trích xuất hoặc định dạng sau này). +* Kỹ thuật **định vị văn bản trong pdf** bằng lớp `Position`. +* Cách lưu kết quả ra đĩa và xác minh đầu ra. + +**Yêu cầu trước** + +* .NET 6.0 hoặc mới hơn (mã cũng hoạt động với .NET Framework 4.7+). +* Giấy phép Aspose.Pdf for .NET hợp lệ hoặc khóa đánh giá miễn phí. +* Một IDE như Visual Studio 2022 hoặc VS Code với phần mở rộng C#. + +> **Mẹo chuyên nghiệp:** Nếu bạn sử dụng bản đánh giá miễn phí, PDF được tạo sẽ chứa một watermark nhỏ. Đăng ký giấy phép để loại bỏ nó. + +## Cách tạo tài liệu pdf với Aspose.Pdf + +Bước đầu tiên là khởi tạo lớp `Document`. Đối tượng này đại diện cho toàn bộ tệp PDF và cung cấp cho bạn quyền truy cập vào các trang, tài nguyên và tùy chọn lưu. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Text; + +// Create a new PDF document – this is the core object that will be saved later. +Document pdfDocument = new Document(); +``` + +Việc tạo tài liệu **không** ghi bất kỳ gì ra đĩa ngay lập tức; nó chỉ chuẩn bị một biểu diễn trong bộ nhớ mà bạn có thể thao tác. Cách tiếp cận này giữ cho API nhanh và tiết kiệm bộ nhớ. + +## Thêm trang pdf trống bằng Aspose.Pdf + +Một PDF phải chứa ít nhất một trang trước khi bạn có thể đặt bất kỳ nội dung nào. Thêm một trang trống chỉ cần một lời gọi phương thức: + +```csharp +// Add a new, empty page to the document. +// The returned Page object lets you add paragraphs, images, or other elements. +Page pdfPage = pdfDocument.Pages.Add(); +``` + +Phương thức `Add()` tạo một trang với kích thước mặc định (A4) và hướng (dọc). Nếu bạn cần kích thước khác, hãy truyền một thể hiện `PageSize` vào `Add()`. + +## Thêm đoạn văn vào pdf và đặt ghi chú + +Bây giờ trang đã tồn tại, bạn có thể tạo một đối tượng `Paragraph` chứa văn bản hiển thị. Đoạn văn cũng có thể mang một thẻ tùy chỉnh, rất tiện khi bạn cần sau này xác định hoặc định dạng phần tử này một cách lập trình. + +```csharp +// Build a paragraph that contains the note text. +Paragraph noteParagraph = new Paragraph(pdfPage) +{ + Text = "Important note" +}; + +// Attach a custom tag to the paragraph. The tag "/P" is a simple identifier. +noteParagraph.Tag = new Tag("/P"); +``` + +### Tại sao lại dùng thẻ? + +Thẻ là siêu dữ liệu đi kèm với phần tử PDF. Chúng có thể được truy vấn sau này bằng `Document.FindObject()` hoặc được các bộ xử lý PDF phía sau sử dụng để hỗ trợ truy cập hoặc lập chỉ mục. + +## Định vị văn bản trong pdf với tọa độ chính xác + +Vị trí mặc định của một đoạn văn là góc trên‑trái của lề trang. Để di chuyển văn bản đến vị trí chính xác, đặt thuộc tính `Position` trên thẻ của đoạn văn: + +```csharp +// Position the paragraph at X = 50 points, Y = 750 points from the bottom-left corner. +noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; +``` + +Các tọa độ được đo bằng điểm (1 điểm = 1/72 inch). Gốc tọa độ (0,0) nằm ở góc dưới‑trái của trang, phù hợp với hầu hết các engine render PDF. Điều chỉnh giá trị `X` và `Y` để phù hợp với bố cục của bạn. + +Sau khi định vị, thêm đoạn văn vào bộ sưu tập của trang: + +```csharp +// Insert the paragraph (with its tag and position) into the page. +pdfPage.Paragraphs.Add(noteParagraph); +``` + +## Lưu tài liệu pdf + +Cuối cùng, ghi PDF trong bộ nhớ ra một tệp. Bạn có thể chỉ định đường dẫn đầu ra, định dạng và thậm chí các tùy chọn mã hoá. + +```csharp +// Define the output file path. Make sure the directory exists. +string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + +// Save the document to the file system. +pdfDocument.Save(outputPath); +``` + +Khi chương trình kết thúc, `output.pdf` chứa một trang duy nhất với văn bản **Important note** được đặt gần góc trên‑phải (X = 50, Y = 750). Mở tệp trong bất kỳ trình xem PDF nào để xác minh vị trí. + +![Tài liệu PDF được tạo bằng C# Aspose.Pdf hiển thị ghi chú đã định vị](https://example.com/images/generated-pdf.png) + +*Văn bản thay thế hình ảnh: Tài liệu PDF được tạo bằng C# Aspose.Pdf hiển thị ghi chú đã định vị* (bao gồm từ khóa chính). + +## Ví dụ đầy đủ, có thể chạy + +Kết hợp tất cả các phần lại, dưới đây là một ứng dụng console hoàn chỉnh mà bạn có thể sao chép, biên dịch và chạy: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Text; + +namespace PdfNoteDemo +{ + class Program + { + static void Main() + { + // 1️⃣ Create the PDF document. + Document pdfDocument = new Document(); + + // 2️⃣ Add a blank page pdf. + Page pdfPage = pdfDocument.Pages.Add(); + + // 3️⃣ Create a paragraph with the desired note. + Paragraph noteParagraph = new Paragraph(pdfPage) + { + Text = "Important note" + }; + + // 4️⃣ Attach a tag and set its position (position text in pdf). + noteParagraph.Tag = new Tag("/P"); + noteParagraph.Tag.Position = new Position { X = 50, Y = 750 }; + + // 5️⃣ Add the paragraph (add paragraph to pdf) to the page. + pdfPage.Paragraphs.Add(noteParagraph); + + // 6️⃣ Save the PDF to a file. + string outputPath = Path.Combine(Environment.CurrentDirectory, "output.pdf"); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF created successfully at: {outputPath}"); + } + } +} +``` + +**Kết quả mong đợi** khi bạn chạy chương trình: + +``` +PDF created successfully at: C:\YourProject\bin\Debug\net6.0\output.pdf +``` + +Mở `output.pdf` sẽ hiển thị một trang duy nhất với văn bản **Important note** được đặt tại tọa độ bạn đã chỉ định. + +## Các biến thể phổ biến và trường hợp góc cạnh + +| Kịch bản | Cần thay đổi gì | Tại sao quan trọng | +|----------|----------------|--------------------| +| **Kích thước trang khác** | `pdfDocument.Pages.Add(PageSize.A5)` | Các trang nhỏ hơn giảm kích thước tệp và phù hợp với màn hình di động. | +| **Nhiều ghi chú** | Lặp qua một tập hợp các chuỗi và tạo một `Paragraph` cho mỗi, tăng dần giá trị `Y`. | Cho phép tạo hàng loạt ghi chú dạng bullet. | +| **Ký tự Unicode** | Đảm bảo tệp nguồn được lưu dưới dạng UTF-8 và đặt `noteParagraph.Text = "重要なメモ"` | Aspose.Pdf hỗ trợ Unicode ngay từ đầu, nhưng mã hoá tệp phải khớp. | +| **PDF được bảo vệ bằng mật khẩu** | `pdfDocument.Save(outputPath, SaveFormat.Pdf, new PdfSaveOptions { Encryption = new Encryption() { UserPassword = "user", OwnerPassword = "owner" } });` | Thêm bảo mật cho các ghi chú nhạy cảm. | +| **Đầu ra độ phân giải cao** | Đặt `pdfDocument.PageInfo.Width` và `Height` thành giá trị lớn hơn trước khi thêm nội dung. | Hữu ích cho việc in PDF định dạng lớn. | + +## Mẹo cho việc sử dụng trong môi trường production + +* **Tái sử dụng đối tượng `Document`** khi tạo nhiều PDF trong một yêu cầu để giảm áp lực GC. +* **Giải phóng đối tượng** (`pdfDocument.Dispose()`) nếu bạn tạo nhiều tài liệu trong vòng lặp. +* **Xác thực tọa độ**: giá trị `Y` không được vượt quá chiều cao trang; nếu không văn bản sẽ bị cắt. +* **Sử dụng `TextFragmentAbsorber`** để sau này trích xuất ghi chú bằng thẻ của nó (`/P`) nếu bạn cần đọc lại nội dung. + +## Kết luận + +Bạn giờ đã biết cách **tạo tài liệu pdf** với Aspose.Pdf, **thêm trang pdf trống**, **thêm đoạn văn vào pdf**, **cách thêm ghi chú pdf**, và **định vị văn bản trong pdf** một cách chính xác. Ví dụ hoàn chỉnh minh họa một quy trình sạch, có thể lặp lại mà bạn có thể mở rộng cho hoá đơn, báo cáo, hoặc bất kỳ kịch bản tự động hoá tài liệu nào. + +Tiếp theo, khám phá các chủ đề liên quan như **thêm hình ảnh vào pdf**, **xây dựng bảng với Aspose.Pdf**, hoặc **áp dụng chữ ký số**. Mỗi chủ đề này dựa trên các khái niệm cốt lõi đã được trình bày ở đây, vì vậy bạn sẽ sẵn sàng đối mặt với các nhiệm vụ tạo PDF phức tạp hơn. + +Chúc lập trình vui vẻ! + +## 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. + +- [Tạo tài liệu PDF với Aspose.PDF – Thêm trang, hình dạng & Lưu](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) +- [Cách Thêm Trang Trống vào Cuối PDF Sử dụng Aspose.PDF cho .NET | Hướng dẫn từng bước](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Cách Thêm Dấu Văn Bản vào PDF Sử dụ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/images-graphics/_index.md b/pdf/vietnamese/net/images-graphics/_index.md index 70b79a3d3f..5198a5c7d5 100644 --- a/pdf/vietnamese/net/images-graphics/_index.md +++ b/pdf/vietnamese/net/images-graphics/_index.md @@ -44,6 +44,9 @@ Tìm hiểu cách tạo tài liệu PDF hấp dẫn về mặt hình ảnh bằn ### [Vẽ các hình dạng trong suốt trong PDF bằng Aspose.PDF .NET](./draw-transparent-shapes-aspose-pdf-net/) Hướng dẫn mã cho Aspose.PDF Net +### [Đặt độ trong suốt PDF trong C# với Aspose.PDF – hướng dẫn đầy đủ](./set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/) +Hướng dẫn chi tiết cách thiết lập độ trong suốt cho tài liệu PDF bằng C# và Aspose.PDF. + ### [Nhận dạng hình ảnh PDF hiệu quả với Aspose.PDF cho .NET](./master-image-identification-aspose-pdf-net/) Tìm hiểu cách xác định hình ảnh thang độ xám và RGB trong PDF bằng Aspose.PDF cho .NET. Hướng dẫn này bao gồm các mẹo cài đặt, trích xuất hình ảnh và hiệu suất. diff --git a/pdf/vietnamese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/vietnamese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..2c1e317446 --- /dev/null +++ b/pdf/vietnamese/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-08-08 +description: Đặt độ trong suốt PDF trong C# bằng Aspose.PDF – tìm hiểu cách điều chỉnh + độ trong suốt nét vẽ và màu nền chỉ với vài dòng mã. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set pdf opacity +- Aspose.PDF for .NET +- C# graphics state +- PDF resource dictionary +- blend mode +- PDF transparency +language: vi +lastmod: 2026-08-08 +og_description: Thiết lập độ trong suốt PDF trong C# nhanh chóng. Hướng dẫn này cho + bạn biết cách chỉnh sửa độ trong suốt đường viền và màu nền bằng API trạng thái + đồ họa của Aspose.PDF. +og_image_alt: Screenshot of C# code that sets PDF opacity with Aspose.PDF +og_title: Cài đặt độ trong suốt PDF trong C# với Aspose.PDF – hướng dẫn từng bước +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Set PDF opacity in C# using Aspose.PDF – learn how to adjust stroke + and fill transparency with a few lines of code. + headline: Set PDF opacity in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- PDF manipulation +title: Thiết lập độ trong suốt PDF trong C# với Aspose.PDF – hướng dẫn chi tiết +url: /vi/net/images-graphics/set-pdf-opacity-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Đặt độ trong suốt PDF trong C# với Aspose.PDF – hướng dẫn đầy đủ + +Nếu bạn cần **đặt độ trong suốt PDF** cho các thao tác vẽ cụ thể, hướng dẫn này sẽ chỉ cho bạn cách thực hiện bằng Aspose.PDF cho .NET. Dù bạn đang tạo watermark, lớp phủ bán trong suốt, hay đồ họa tùy chỉnh, bạn sẽ học được một cách tiếp cận ngắn gọn, sẵn sàng cho môi trường sản xuất. + +Trong các phần tiếp theo, chúng ta sẽ bao phủ mọi thứ từ việc tải PDF, chỉnh sửa trạng thái đồ họa, thêm định nghĩa độ trong suốt mới, và lưu kết quả. Không cần tài liệu bên ngoài—chỉ cần đoạn mã dưới đây và một giải thích ngắn gọn cho mỗi bước. + +## Các yêu cầu trước + +Trước khi bắt đầu, hãy chắc chắn bạn có: + +* .NET 6.0 hoặc mới hơn (mã cũng hoạt động với .NET Framework 4.7+) +* Giấy phép Aspose.PDF cho .NET hợp lệ (bản dùng thử miễn phí đủ cho việc đánh giá) +* Một file PDF đầu vào (`input.pdf`) nằm trong thư mục bạn có quyền đọc/ghi +* Visual Studio 2022 hoặc bất kỳ IDE C# nào bạn ưa thích + +## Bước 1 – Tải tài liệu PDF (Aspose.PDF cho .NET) + +Nhiệm vụ đầu tiên là mở PDF hiện có. Aspose.PDF đại diện cho một file PDF bằng lớp `Document`, cho phép bạn truy cập đầy đủ vào các trang, tài nguyên và các đối tượng cấp thấp. + +```csharp +// Load the PDF document from disk +string inputPath = @"C:\MyFolder\input.pdf"; +using var doc = new Aspose.Pdf.Document(inputPath); +``` + +*Lý do quan trọng*: Việc tải tài liệu tạo ra một mô hình trong bộ nhớ mà bạn có thể sửa đổi một cách an toàn. Câu lệnh `using` đảm bảo handle file được giải phóng tự động sau khi chúng ta hoàn thành. + +## Bước 2 – Lấy trang đầu tiên bạn muốn chỉnh sửa + +Độ trong suốt được định nghĩa theo trang thông qua từ điển tài nguyên của trang. Ở đây chúng ta nhắm tới trang đầu tiên, nhưng bạn có thể lặp qua `doc.Pages` để thực hiện hàng loạt. + +```csharp +// Access the first page (pages are 1‑based in Aspose.PDF) +var page = doc.Pages[1]; +``` + +*Lý do quan trọng*: Mỗi trang có bộ sưu tập `Resources` riêng, chứa các trạng thái đồ họa, phông chữ, hình ảnh, v.v. Chỉnh sửa đúng trang sẽ đảm bảo hiệu ứng độ trong suốt xuất hiện ở nơi bạn mong muốn. + +## Bước 3 – Mở từ điển tài nguyên của trang để chỉnh sửa + +Aspose.PDF cung cấp một công cụ trợ giúp `DictionaryEditor` để thao tác với các từ điển PDF cấp thấp mà không làm hỏng cấu trúc file. + +```csharp +// Prepare a dictionary editor for the page's resources +var dictEditor = new Aspose.Pdf.DictionaryEditor(page.Resources); +``` + +*Lý do quan trọng*: Việc chỉnh sửa trực tiếp các từ điển COS (Content Object System) của PDF là cách duy nhất để chèn một trạng thái đồ họa tùy chỉnh. Trình chỉnh sửa trừu tượng hoá cú pháp cấp thấp trong khi vẫn giữ PDF hợp lệ. + +## Bước 4 – Lấy từ điển ExtGState hiện có + +Từ điển **ExtGState** (external graphics state) chứa độ trong suốt, chế độ hòa trộn, độ dày nét, v.v. Nếu nó không tồn tại, Aspose.PDF sẽ tự động tạo khi bạn thêm mục mới. + +```csharp +// Get the ExtGState dictionary; create it if missing +var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new Aspose.Pdf.Cos.CosPdfDictionary(doc); +``` + +*Lý do quan trọng*: Nếu không có mục `ExtGState` thì bạn không thể tham chiếu độ trong suốt tùy chỉnh sau này trong luồng nội dung của trang. Bước này đảm bảo container đã có sẵn. + +## Bước 5 – Tạo một trạng thái đồ họa mới với độ trong suốt mong muốn + +Một trạng thái đồ họa là tập hợp các tham số. Đối với độ trong suốt, chúng ta đặt `CA` (độ trong suốt nét) và `ca` (độ trong suốt tô). Chúng ta cũng đặt chế độ hòa trộn (`BM`) để kiểm soát cách các pixel trong suốt tương tác với nội dung nền. + +```csharp +// Build a new graphics state dictionary +var newGs = Aspose.Pdf.Cos.CosPdfDictionary.CreateEmptyDictionary(doc); +newGs.Add("CA", new Aspose.Pdf.Cos.CosPdfNumber(0.8)); // 80 % stroke opacity +newGs.Add("ca", new Aspose.Pdf.Cos.CosPdfNumber(0.4)); // 40 % fill opacity +newGs.Add("BM", new Aspose.Pdf.Cos.CosPdfName("Normal")); // standard blend mode +``` + +*Lý do quan trọng*: `CA` và `ca` chấp nhận giá trị từ 0 (hoàn toàn trong suốt) đến 1 (đầy đủ không trong suốt). Điều chỉnh các số này để đạt được hiệu ứng hình ảnh bạn cần. Chế độ hòa trộn `"Normal"` là phổ biến nhất, nhưng bạn có thể thử `"Multiply"` hoặc `"Screen"` để tạo hiệu ứng nghệ thuật. + +## Bước 6 – Đăng ký trạng thái đồ họa mới vào bộ sưu tập ExtGState + +Mỗi trạng thái đồ họa phải có một tên duy nhất (ví dụ, `GS0`). Chúng ta thêm từ điển của mình vào bộ sưu tập `ExtGState`, sau đó cập nhật tài nguyên của trang. + +```csharp +// Add the new graphics state under the name "GS0" +extGState.Add("GS0", newGs); + +// Ensure the ExtGState entry is stored back in the page resources +dictEditor["ExtGState"] = extGState; +``` + +*Lý do quan trọng*: Bằng cách đặt tên cho trạng thái (`GS0`), bạn có thể tham chiếu nó sau này trong luồng nội dung của trang bằng toán tử `gs`. Nếu cần nhiều mức độ trong suốt, tạo các mục bổ sung (`GS1`, `GS2`, …). + +## Bước 7 – Áp dụng trạng thái đồ họa vào các lệnh vẽ (tùy chọn) + +Nếu bạn muốn áp dụng độ trong suốt ngay lập tức cho nội dung hiện có, bạn phải chỉnh sửa luồng nội dung của trang. Dưới đây là một ví dụ đơn giản vẽ một hình chữ nhật bán trong suốt bằng trạng thái vừa tạo. + +```csharp +// Build a content stream that uses the graphics state GS0 +var content = new Aspose.Pdf.Operator.GSave(); +content.Operators.Add(new Aspose.Pdf.Operator.SetGraphicsState("GS0")); +content.Operators.Add(new Aspose.Pdf.Operator.SetFillColorRgb(1, 0, 0)); // red fill +content.Operators.Add(new Aspose.Pdf.Operator.Rectangle(100, 500, 200, 100)); +content.Operators.Add(new Aspose.Pdf.Operator.FillPath()); +content.Operators.Add(new Aspose.Pdf.Operator.GRestore()); + +page.Contents.Add(content); +``` + +*Lý do quan trọng*: Toán tử `gs` (`SetGraphicsState`) báo cho trình render PDF sử dụng các giá trị độ trong suốt được định nghĩa trong `GS0` cho mọi lệnh vẽ tiếp theo. Cặp `grestore`/`gsave` đảm bảo các phần tử khác của trang không bị ảnh hưởng. + +## Bước 8 – Lưu PDF đã chỉnh sửa + +Cuối cùng, ghi tài liệu đã cập nhật trở lại đĩa. + +```csharp +// Save the PDF with the new opacity settings +string outputPath = @"C:\MyFolder\output.pdf"; +doc.Save(outputPath); +``` + +*Lý do quan trọng*: Việc lưu hoàn thiện mọi thay đổi, nhúng trạng thái đồ họa mới, và tạo ra một PDF mà bất kỳ trình xem nào (Adobe Acrobat, Chrome, v.v.) cũng có thể hiển thị với độ trong suốt mong muốn. + +### Kết quả mong đợi + +Mở `output.pdf` trong một trình xem PDF. Bạn sẽ thấy một hình chữ nhật màu đỏ có viền 80 % không trong suốt và phần tô 40 % không trong suốt, hòa trộn mượt mà với bất kỳ nội dung nền nào. Phần còn lại của trang không thay đổi. + +## Các biến thể phổ biến và trường hợp đặc biệt + +| Tình huống | Cần thay đổi | Lý do | +|-----------|--------------|-------| +| **Nhiều mức độ trong suốt** | Tạo các trạng thái đồ họa bổ sung (`GS1`, `GS2`, …) với các giá trị `CA`/`ca` khác nhau và tham chiếu chúng khi cần | Cho phép kiểm soát chi tiết cho các yếu tố khác nhau | +| **Chế độ hòa trộn khác** | Sử dụng `"Multiply"`, `"Screen"`, `"Overlay"`… thay vì `"Normal"` trong mục `BM` | Tạo ra các hiệu ứng hòa trộn nghệ thuật | +| **Áp dụng vào luồng nội dung hiện có** | Chèn `SetGraphicsState` trước các toán tử vẽ cụ thể mà bạn muốn ảnh hưởng | Ngăn ngừa độ trong suốt không mong muốn trên các đối tượng không liên quan | +| **PDF lớn** | Xử lý các trang trong vòng lặp `foreach (Page p in doc.Pages)` để tránh tải toàn bộ file vào bộ nhớ một lúc | Cải thiện hiệu năng và giảm áp lực bộ nhớ | +| **Không có ExtGState hiện có** | Mã trong Bước 4 đã tạo một cái nếu thiếu, vì vậy không cần xử lý thêm | Đảm bảo từ điển đã tồn tại | + +### Mẹo chuyên nghiệp + +Khi bạn thêm nhiều trạng thái đồ họa tùy chỉnh, hãy giữ tên nhất quán (`GS0`, `GS1`, …) và ghi chú mục đích của mỗi trạng thái trong một khối comment. Điều này giúp bảo trì trong tương lai dễ dàng hơn, đặc biệt trong các dự án hợp tác. + +## Ví dụ đầy đủ, có thể chạy + +Dưới đây là chương trình hoàn chỉnh bạn có thể sao chép, dán và chạy. Nó bao gồm tất cả các bước, các chỉ thị `using` cần thiết, và các chú thích. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Cos; + +namespace PdfOpacityDemo +{ + class Program + { + static void Main() + { + // 1. Load the PDF + string inputPath = @"C:\MyFolder\input.pdf"; + using var doc = new Document(inputPath); + + // 2. Get the first page (adjust index for other pages) + var page = doc.Pages[1]; + + // 3. Open the page's resource dictionary + var dictEditor = new DictionaryEditor(page.Resources); + + // 4. Retrieve or create the ExtGState dictionary + var extGState = dictEditor["ExtGState"]?.ToCosPdfDictionary() + ?? new CosPdfDictionary(doc); + + // 5. Create a new graphics state with desired opacity + var newGs = CosPdfDictionary.CreateEmptyDictionary(doc); + newGs.Add("CA", new CosPdfNumber(0.8)); // stroke opacity (80%) + newGs.Add("ca", new CosPdfNumber(0.4)); // fill opacity (40%) + newGs.Add("BM", new CosPdfName("Normal")); // blend mode + + // 6. Register the graphics state as "GS0" + extGState.Add("GS0", newGs); + dictEditor["ExtGState"] = extGState; // write back to resources + + // 7. (Optional) Draw a rectangle using the new opacity + var content = new Operator.GSave(); + content.Operators.Add(new Operator.SetGraphicsState("GS0")); + content.Operators.Add(new Operator.SetFillColorRgb(1, 0, 0)); // red + content.Operators.Add(new Operator.Rectangle(100, 500, 200, 100)); + content.Operators.Add(new Operator.FillPath()); + content.Operators.Add(new Operator.GRestore()); + + page.Contents.Add(content); + + // 8. Save the modified PDF + string outputPath = @"C:\MyFolder\output.pdf"; + doc.Save(outputPath); + + Console.WriteLine("PDF saved with new opacity settings at: " + outputPath); + } + } +} +``` + +Chạy chương trình, + +## Bạn Nên Học Gì Tiếp Theo? + + +Các hướng dẫn sau đây đề cập đến các chủ đề liên quan chặt chẽ, xây dựng trên các kỹ thuật đã được trình bày trong hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoạt động đầy đủ với các 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. + +- [Set Image Backgrounds in PDFs Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/images-graphics/aspose-pdf-net-set-image-backgrounds/) +- [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 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/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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..6ab2d58d6e 100644 --- a/pdf/vietnamese/net/programming-with-forms/_index.md +++ b/pdf/vietnamese/net/programming-with-forms/_index.md @@ -50,7 +50,8 @@ Các hướng dẫn này cũng cung cấp các ví dụ mã chi tiết, giải t | [Đặ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. | +| [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. | +| [Lưu tài liệu PDF với Aspose.PDF – hướng dẫn đầy đủ](./save-pdf-document-with-aspose-pdf-complete-guide/) | Hướng dẫn chi tiết cách lưu tài liệu PDF bằng Aspose.PDF cho .NET, bao gồm các tùy chọn và ví dụ thực tế. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md b/pdf/vietnamese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..1c4c81e3c7 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-08-08 +description: Lưu tài liệu PDF bằng Aspose.PDF, tìm hiểu cách thêm trang PDF, điền + trường biểu mẫu PDF và tạo PDF có các trường biểu mẫu trong một hướng dẫn duy nhất. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- save pdf document +- populate pdf form field +- how to create pdf form +- how to add pages pdf +- create pdf with form fields +language: vi +lastmod: 2026-08-08 +og_description: Lưu tài liệu PDF với Aspose.PDF và khám phá cách thêm trang PDF, điền + dữ liệu vào trường biểu mẫu PDF, và tạo PDF có trường biểu mẫu một cách nhanh chóng + và đáng tin cậy. +og_image_alt: Screenshot of a PDF showing a text box form field on page one and its + widget on page two +og_title: Lưu tài liệu PDF bằng Aspose.PDF – hướng dẫn từng bước +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Save PDF document using Aspose.PDF, learn how to add pages PDF, populate + PDF form field, and create PDF with form fields in a single tutorial. + headline: Save PDF document with Aspose.PDF – complete guide + type: TechArticle +tags: +- PDF +- Aspose.PDF +- C# +- Form fields +- Document automation +title: Lưu tài liệu PDF bằng Aspose.PDF – hướng dẫn đầy đủ +url: /vi/net/programming-with-forms/save-pdf-document-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lưu tài liệu PDF với Aspose.PDF – hướng dẫn đầy đủ + +Nếu bạn cần **lưu tài liệu PDF** có chứa các trường biểu mẫu tương tác, hướng dẫn này sẽ chỉ cho bạn cách thực hiện. Bạn sẽ thấy cách thêm các trang PDF, tạo biểu mẫu PDF, và điền giá trị vào trường biểu mẫu PDF — tất cả đều bằng Aspose.PDF cho .NET. + +Trong các phần tiếp theo, bạn sẽ học cách: + +* thêm nhiều trang vào một PDF mới, +* tạo một trường biểu mẫu dạng hộp văn bản trên trang đầu tiên, +* đặt một widget annotation cho cùng một trường trên trang thứ hai, +* đặt giá trị cho trường (điền giá trị vào trường biểu mẫu PDF), +* và cuối cùng **lưu tài liệu PDF** vào đĩa. + +Không cần công cụ bên ngoài; mã hoàn chỉnh, có thể chạy được đã được bao gồm. + +## Yêu cầu trước + +* .NET 6.0 hoặc mới hơn (mã cũng hoạt động với .NET Framework 4.7.2+). +* Giấy phép Aspose.PDF cho .NET hợp lệ hoặc khóa dùng thử miễn phí. +* Visual Studio 2022 (hoặc bất kỳ IDE C# nào). + +Thêm gói NuGet: + +```bash +dotnet add package Aspose.PDF +``` + +## Cách thêm các trang PDF + +Bước đầu tiên là tạo một PDF trống và thêm các trang bạn cần. Thêm trang trước khi định nghĩa các trường biểu mẫu giúp đảm bảo tọa độ bố cục chính xác. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +// Create a new PDF document +var pdfDocument = new Document(); + +// Add two pages – the first will host the form field, +// the second will host the widget annotation. +Page firstPage = pdfDocument.Pages.Add(); +Page secondPage = pdfDocument.Pages.Add(); +``` + +*Lý do quan trọng:* Mỗi đối tượng `Page` đại diện cho một canvas có thể in. Bằng cách thêm trang sớm, bạn có thể tham chiếu chúng sau này khi định vị các phần tử biểu mẫu. + +## Cách tạo biểu mẫu PDF với Aspose.PDF + +Một biểu mẫu PDF bao gồm **định nghĩa trường** (bộ chứa logic) và một hoặc nhiều **widget annotation** (đại diện trực quan). Ví dụ tạo một `TextBoxField` có tên **Comments** trên trang đầu tiên. + +```csharp +// Define a text box form field on the first page +var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) // left, bottom, right, top +{ + Name = "Comments", + Value = "" // initial empty value +}; +``` + +*Lý do quan trọng:* Các tọa độ `Rectangle` được biểu diễn bằng điểm (1 pt = 1/72 in). Điều chỉnh các giá trị để phù hợp với thiết kế của bạn. + +## Điền giá trị vào trường biểu mẫu PDF + +Bạn có thể đặt giá trị cho trường một cách lập trình trước khi tài liệu được lưu. Đây là phần cốt lõi của **điền giá trị vào trường biểu mẫu PDF**. + +```csharp +// Set an initial value for the Comments field +commentsField.Value = "Enter your feedback here"; +``` + +Nếu bạn cần điền trường sau này (ví dụ, từ đầu vào của người dùng), chỉ cần gán một chuỗi mới cho `commentsField.Value` trước khi gọi `Save`. + +## Thêm widget annotation cho cùng một trường trên trang thứ hai + +Một widget annotation làm cho trường biểu mẫu hiển thị trên một trang. Bằng cách thêm widget thứ hai, cùng một trường logic sẽ xuất hiện trên cả hai trang, minh họa **tạo PDF với các trường biểu mẫu** trải dài nhiều trang. + +```csharp +// Create a widget annotation on the second page +var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + +// Associate the widget with the existing field +commentsField.Widgets.Add(widget); +``` + +*Lý do quan trọng:* Bộ sưu tập `Widgets` có thể chứa bất kỳ số lượng đại diện trực quan nào. Người dùng có thể tương tác với trường trên bất kỳ trang nào, và giá trị đã nhập sẽ được đồng bộ. + +## Gắn trường vào bộ annotation của trang đầu tiên + +Các trường biểu mẫu phải được thêm vào bộ sưu tập annotation của một trang để trình xem PDF có thể hiển thị chúng. + +```csharp +// Attach the field (with its widget) to the first page annotations +firstPage.Annotations.Add(commentsField); +``` + +## Lưu tài liệu PDF + +Bây giờ biểu mẫu đã được định nghĩa đầy đủ, bạn có thể **lưu tài liệu PDF** vào vị trí bạn muốn. + +```csharp +// Save the resulting PDF +pdfDocument.Save("output.pdf"); +``` + +Khi mở `output.pdf` trong Adobe Acrobat Reader hoặc bất kỳ trình xem PDF nào, bạn sẽ thấy một hộp văn bản trên trang 1 và một hộp tương tự trên trang 2. Gõ vào bất kỳ hộp nào sẽ cập nhật cùng một trường nền. + +## Ví dụ hoàn chỉnh, có thể chạy + +Dưới đây là toàn bộ chương trình bạn có thể sao chép‑dán vào một ứng dụng console. Nó biên dịch và tạo ra PDF mô tả mà không cần chỉnh sửa nào. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Forms; +using Aspose.Pdf.Annotations; + +namespace AsposePdfFormDemo +{ + class Program + { + static void Main() + { + // Step 1: Create a new PDF document and add two pages + var pdfDocument = new Document(); + var firstPage = pdfDocument.Pages.Add(); + var secondPage = pdfDocument.Pages.Add(); + + // Step 2: Define a text box form field on the first page + var commentsField = new TextBoxField(firstPage, + new Rectangle(100, 600, 300, 650)) + { + Name = "Comments", + Value = "Enter your feedback here" + }; + + // Step 3: Add a widget annotation for the same field on the second page + var widget = new WidgetAnnotation(secondPage, + new Rectangle(100, 400, 300, 450)); + commentsField.Widgets.Add(widget); + + // Step 4: Attach the field (with its widget) to the first page annotations + firstPage.Annotations.Add(commentsField); + + // Step 5: Save the resulting PDF + pdfDocument.Save("output.pdf"); + + Console.WriteLine("PDF saved successfully as output.pdf"); + } + } +} +``` + +**Kết quả mong đợi:** Một tệp tên `output.pdf` chứa hai trang. Trang 1 hiển thị hộp văn bản có nhãn “Comments” tại tọa độ (100, 600). Trang 2 hiển thị cùng trường tại (100, 400). Trường được điền sẵn “Enter your feedback here”. Thay đổi văn bản trên bất kỳ trang nào sẽ cập nhật cùng một giá trị khi tài liệu được lưu lại. + +## Các câu hỏi thường gặp và xử lý trường hợp đặc biệt + +| Câu hỏi | Trả lời | +|----------|--------| +| *Tôi có thể thêm hơn một widget cho cùng một trường không?* | Có. Thêm các đối tượng `WidgetAnnotation` vào `commentsField.Widgets`. Mỗi widget có thể được đặt trên bất kỳ trang nào. | +| *Nếu tôi muốn đặt giao diện của trường (phông chữ, viền, nền) thì sao?* | Sử dụng `commentsField.DefaultAppearance` để chỉ định phông chữ và màu, và đặt các thuộc tính `commentsField.Border` cho kiểu đường viền. | +| *Làm sao để làm trường chỉ đọc?* | Đặt `commentsField.ReadOnly = true;`. Trường sẽ vẫn hiển thị giá trị nhưng không cho người dùng chỉnh sửa. | +| *Có thể điền giá trị vào trường sau khi PDF đã được tạo không?* | Có. Tải PDF đã lưu bằng `new Document("output.pdf")`, tìm trường qua `pdfDocument.Form["Comments"]`, gán một `Value` mới, và gọi `Save` lại. | +| *Nếu PDF phải tuân thủ PDF/A để lưu trữ thì sao?* | Sau khi xây dựng tài liệu, gọi `pdfDocument.Convert(new PdfSaveOptions { Compliance = PdfCompliance.PdfA1b });` trước khi lưu. | + +## Mẹo từ thực tiễn + +* **Mẹo chuyên nghiệp:** Giữ tên trường logic ngắn và duy nhất; đó là định danh bạn sẽ dùng khi lập trình điền biểu mẫu sau này. +* **Cẩn thận với:** Các hình chữ nhật widget chồng lên nhau. Sự chồng chéo có thể gây ra hiện tượng hiển thị lỗi trong một số trình xem. +* **Lưu ý hiệu năng:** Thêm nhiều trang hoặc widget trong một vòng lặp chặt chẽ có thể được tối ưu bằng cách tái sử dụng một đối tượng `Rectangle` duy nhất và chỉ thay đổi tọa độ của nó. + +## Kết luận + +Bây giờ bạn đã biết cách **lưu tài liệu PDF** chứa một biểu mẫu hoạt động đầy đủ, cách **điền giá trị vào trường biểu mẫu PDF**, và cách **thêm các trang PDF** cũng như **tạo PDF với các trường biểu mẫu** bằng Aspose.PDF cho .NET. Ví dụ hoàn chỉnh minh họa quy trình từ tạo tài liệu đến lưu cuối cùng. + +Tiếp theo, khám phá các chủ đề liên quan như **thêm hộp kiểm**, **tạo danh sách thả xuống**, hoặc **làm phẳng biểu mẫu** để phân phối chỉ đọc. Mỗi chủ đề đều dựa trên các nguyên tắc đã trình bày ở đây và mở rộng khả năng tự động hoá PDF 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 hướng dẫn này. Mỗi tài nguyên bao gồm các ví dụ mã hoàn chỉnh, hoạt động với giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [How to 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/) +- [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 Add and Extract PDF Form Fields Using Aspose.PDF for .NET: A Comprehensive Guide](/pdf/english/net/forms-annotations/manage-pdf-form-fields-aspose-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-pdf-pages/_index.md b/pdf/vietnamese/net/programming-with-pdf-pages/_index.md index e3789341d3..3fb5e18645 100644 --- a/pdf/vietnamese/net/programming-with-pdf-pages/_index.md +++ b/pdf/vietnamese/net/programming-with-pdf-pages/_index.md @@ -38,6 +38,7 @@ Hướng dẫn bao gồm hướng dẫn từng bước, ví dụ mã chi tiết | [Cập nhật kích thước trang PDF](./update-dimensions/) | Khám phá cách cập nhật kích thước trang PDF dễ dàng bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện, từng bước này. | | [Phóng to nội dung trang trong tệp PDF](./zoom-to-page-contents/) | Tìm hiểu cách phóng to nội dung trang trong tệp PDF bằng Aspose.PDF cho .NET trong hướng dẫn toàn diện này. Cải thiện tài liệu PDF của bạn theo nhu cầu cụ thể của bạn. | | [Thêm số trang PDF bằng C# – Hướng dẫn chi tiết từng bước](./add-page-numbers-pdf-with-c-full-step-by-step-guide/) | Hướng dẫn chi tiết cách thêm số trang vào tài liệu PDF bằng C# với Aspose.PDF cho .NET. | +| [Thêm đánh số Bates cho PDF bằng Aspose – hướng dẫn từng bước](./add-bates-numbering-pdf-with-aspose-step-by-step-guide/) | Hướng dẫn chi tiết cách thêm đánh số Bates vào tài liệu PDF bằng Aspose.PDF cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md b/pdf/vietnamese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md new file mode 100644 index 0000000000..d30e689813 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-08-08 +description: Thêm đánh số Bates vào PDF bằng Aspose.Pdf trong C#. Hướng dẫn này cũng + chỉ cách thêm trang trắng vào PDF và tạo PDF một cách lập trình. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- add bates numbering pdf +- add blank page pdf +- generate pdf programmatically +- create pdf aspose +language: vi +lastmod: 2026-08-08 +og_description: Thêm đánh số Bates vào PDF với Aspose.Pdf trong C#. Tìm hiểu cách + thêm trang trắng vào PDF, tạo PDF bằng lập trình và lưu tài liệu cuối cùng chỉ trong + vài phút. +og_image_alt: Screenshot of C# code adding Bates numbering and a blank page to a PDF + using Aspose.Pdf +og_title: Thêm đánh số Bates vào PDF với Aspose – hướng dẫn C# đầy đủ +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + headline: Add bates numbering pdf with Aspose – step‑by‑step guide + type: TechArticle +- description: Add bates numbering pdf using Aspose.Pdf in C#. This tutorial also + shows how to add blank page pdf and generate pdf programmatically. + name: Add bates numbering pdf with Aspose – step‑by‑step guide + steps: + - name: What if I need a different font or position? + text: 'The `BatesNumberingArtifact` exposes properties such as `FontSize`, `FontColor`, + `HorizontalAlignment`, and `VerticalAlignment`. For example:' + - name: How do I exclude a specific page from numbering? + text: Create a separate `BatesNumberingArtifact` for the pages you want to number + and add it only to those pages. Pages without an attached artifact will remain + unnumbered. + - name: Does this work with existing PDFs? + text: 'Yes. Instead of `new Document()`, load an existing file:' + type: HowTo +tags: +- Aspose.Pdf +- C# +- PDF generation +- Bates numbering +title: Thêm đánh số Bates vào PDF với Aspose – hướng dẫn từng bước +url: /vi/net/programming-with-pdf-pages/add-bates-numbering-pdf-with-aspose-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Thêm đánh số Bates vào PDF với Aspose – hướng dẫn từng bước + +Thêm đánh số Bates vào PDF với Aspose.Pdf rất đơn giản một khi bạn nắm rõ các bước cốt lõi. Nếu bạn cũng cần thêm trang trắng vào PDF hoặc tạo PDF một cách lập trình, hướng dẫn này sẽ bao gồm mọi thứ bạn cần. + +Trong tutorial này bạn sẽ: + +* Tạo một tài liệu PDF mới từ đầu. +* Thêm một trang trắng PDF sẽ chứa các số Bates. +* Cấu hình đối tượng Bates numbering với tiền tố tùy chỉnh. +* Lưu PDF để các số xuất hiện trên tệp đã tạo. + +Khi hoàn thành, bạn sẽ có một ứng dụng console C# hoạt động đầy đủ, tạo ra một PDF chứa các số Bates như **CASE‑1000**, **CASE‑1001**, … – một yêu cầu phổ biến trong quy trình pháp lý và e‑discovery. + +## Yêu cầu trước + +* .NET 6.0 SDK hoặc mới hơn (mã cũng chạy được với .NET Framework 4.8). +* Visual Studio 2022 hoặc bất kỳ IDE nào hỗ trợ C#. +* Giấy phép Aspose.Pdf for .NET hợp lệ (hoặc khóa dùng thử miễn phí). +* Kiến thức cơ bản về cú pháp C#. + +> **Mẹo chuyên nghiệp:** Nếu chạy mã mà không có giấy phép, Aspose sẽ thêm một watermark nhỏ vào PDF đầu ra. + +## Bước 1: Thiết lập dự án và nhập Aspose.Pdf + +Tạo một dự án console mới và thêm gói NuGet Aspose.Pdf: + +```bash +dotnet new console -n BatesNumberingDemo +cd BatesNumberingDemo +dotnet add package Aspose.Pdf +``` + +Các chỉ thị `using` cần thiết cho ví dụ là: + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; +``` + +Các namespace này cung cấp cho bạn quyền truy cập vào các lớp `Document`, `Page` và `BatesNumberingArtifact` sẽ được dùng sau. + +## Bước 2: Thêm một trang trắng PDF + +Một số Bates phải được gắn vào một trang, vì vậy trước tiên chúng ta tạo một trang trắng sẽ nhận đối tượng đánh số. + +```csharp +// Step 2: Add a blank page pdf +Document pdfDocument = new Document(); // creates an empty PDF +Page pdfPage = pdfDocument.Pages.Add(); // adds the first (blank) page +``` + +Lớp `Document` đại diện cho toàn bộ tệp PDF, trong khi `Pages.Add()` chèn một trang mới, trống vào cuối bộ sưu tập trang của tài liệu. Vì tài liệu bắt đầu rỗng, lời gọi này cũng tạo ra trang đầu tiên. + +## Bước 3: Cấu hình đối tượng Bates numbering + +Bây giờ chúng ta định nghĩa cách các số Bates sẽ hiển thị. `BatesNumberingArtifact` cho phép bạn đặt số bắt đầu, tiền tố, hậu tố và các tùy chọn định dạng. + +```csharp +// Step 3: Define Bates numbering settings +BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) +{ + StartNumber = 1000, // first number in the sequence + Prefix = "CASE-", // custom prefix before each number + // Optional: you can also set Suffix, FontSize, FontColor, etc. +}; +``` + +**Tại sao điều này quan trọng:** +Đặt `StartNumber` thành **1000** phù hợp với các quy ước thường gặp trong hồ sơ vụ án pháp lý. `Prefix` đảm bảo mỗi số xuất hiện dưới dạng **CASE‑1000**, **CASE‑1001**, … giúp việc tìm kiếm và sắp xếp dễ dàng hơn. + +## Bước 4: Gắn đối tượng vào trang + +Đối tượng phải được thêm vào bộ sưu tập `Artifacts` của trang để Aspose render nó trên mọi trang khi lưu. + +```csharp +// Step 4: Attach the Bates numbering artifact to the PDF page +pdfPage.Artifacts.Add(batesArtifact); +``` + +Khi tài liệu được lưu, Aspose tự động lặp lại đối tượng trên tất cả các trang, tăng số cho mỗi trang tiếp theo. + +## Bước 5: (Tùy chọn) Thêm các trang bổ sung + +Nếu cần thêm trang, chỉ cần lặp lại `pdfDocument.Pages.Add()`. Đối tượng Bates numbering bạn đã gắn ở bước trước sẽ tự động xuất hiện trên mỗi trang mới. + +```csharp +// Example: add two more pages +pdfDocument.Pages.Add(); +pdfDocument.Pages.Add(); +``` + +## Bước 6: Lưu PDF – tạo PDF một cách lập trình + +Cuối cùng, ghi tài liệu ra đĩa. Đây là thời điểm các số Bates được render lên các trang. + +```csharp +// Step 6: Save the PDF – generate pdf programmatically +string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + +// Ensure the directory exists +Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + +pdfDocument.Save(outputPath); +Console.WriteLine($"PDF saved to: {outputPath}"); +``` + +**Kết quả mong đợi:** +Mở *BatesNumberedDocument.pdf* và bạn sẽ thấy một PDF ba trang. Mỗi trang hiển thị một số Bates ở góc dưới‑phải: + +* Trang 1 → **CASE‑1000** +* Trang 2 → **CASE‑1001** +* Trang 3 → **CASE‑1002** + +Các số được tự động tăng vì đối tượng đã được gắn vào bộ sưu tập trang. + +## Ví dụ đầy đủ, có thể chạy được + +Kết hợp tất cả lại, đây là một chương trình console hoàn chỉnh mà bạn có thể sao chép, dán và chạy: + +```csharp +using System; +using System.IO; +using Aspose.Pdf; +using Aspose.Pdf.Artifacts; + +namespace BatesNumberingDemo +{ + class Program + { + static void Main() + { + // Create a new PDF document + Document pdfDocument = new Document(); + + // Add a blank page pdf + Page pdfPage = pdfDocument.Pages.Add(); + + // Define Bates numbering settings (add bates numbering pdf) + BatesNumberingArtifact batesArtifact = new BatesNumberingArtifact(pdfPage) + { + StartNumber = 1000, + Prefix = "CASE-" + }; + + // Attach the artifact to the page + pdfPage.Artifacts.Add(batesArtifact); + + // (Optional) add more pages to see incremented numbers + pdfDocument.Pages.Add(); // page 2 + pdfDocument.Pages.Add(); // page 3 + + // Save the PDF – generate pdf programmatically + string outputPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + "BatesNumberedDocument.pdf"); + + Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!); + pdfDocument.Save(outputPath); + + Console.WriteLine($"PDF saved to: {outputPath}"); + } + } +} +``` + +Chạy chương trình bằng `dotnet run`. Sau khi thực thi, tìm tệp trên desktop và kiểm tra các số Bates. + +![Add bates numbering pdf example](/images/bates-numbering.png "Add bates numbering pdf example") + +## Các câu hỏi thường gặp và trường hợp đặc biệt + +### Nếu tôi cần phông chữ hoặc vị trí khác thì sao? + +`BatesNumberingArtifact` cung cấp các thuộc tính như `FontSize`, `FontColor`, `HorizontalAlignment` và `VerticalAlignment`. Ví dụ: + +```csharp +batesArtifact.FontSize = 12; +batesArtifact.FontColor = Color.Blue; +batesArtifact.HorizontalAlignment = HorizontalAlignment.Left; +batesArtifact.VerticalAlignment = VerticalAlignment.Top; +``` + +### Làm thế nào để loại trừ một trang cụ thể khỏi việc đánh số? + +Tạo một `BatesNumberingArtifact` riêng cho các trang bạn muốn đánh số và chỉ thêm nó vào những trang đó. Các trang không có đối tượng gắn sẽ không được đánh số. + +### Điều này có hoạt động với các PDF đã tồn tại không? + +Có. Thay vì `new Document()`, tải một tệp hiện có: + +```csharp +Document pdfDocument = new Document("input.pdf"); +``` + +Sau đó gắn đối tượng vào các trang mong muốn và lưu lại. + +## Kết luận + +Bây giờ bạn đã biết cách **add bates numbering pdf** bằng Aspose.Pdf, cách **add blank page pdf**, và cách **generate pdf programmatically** trong một giải pháp C# sạch sẽ, có thể tái sử dụng. Phương pháp này hoạt động với bất kỳ số lượng trang nào, tiền tố tùy chỉnh và tùy chọn định dạng, cho phép bạn kiểm soát hoàn toàn tài liệu cuối cùng. + +Các bước tiếp theo bạn có thể khám phá: + +* Use **create pdf as + +## 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 mã mẫu đầy đủ với các 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. + +- [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 an Empty Page at the End of a PDF Using Aspose.PDF for .NET | Step-by-Step Guide](/pdf/english/net/document-manipulation/add-empty-page-end-pdf-aspose-pdf-net/) +- [Create PDF Document with Aspose.PDF – Add Page, Shape & Save](/pdf/english/net/document-creation/create-pdf-document-with-aspose-pdf-add-page-shape-save/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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 9252b2d239..e9d90bb811 100644 --- a/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md +++ b/pdf/vietnamese/net/programming-with-security-and-signatures/_index.md @@ -24,17 +24,19 @@ Hướng dẫn cung cấp cho bạn tổng quan chi tiết về các phương ph | [Thay đổi mật khẩu trong tệp PDF](./change-password/) | Học cách thay đổi mật khẩu PDF dễ dàng bằng Aspose.PDF cho .NET. Hướng dẫn từng bước của chúng tôi sẽ hướng dẫn bạn thực hiện quy trình này một cách an toàn. | | [Giải mã tập tin PDF](./decrypt/) | Tìm hiểu cách giải mã an toàn các tệp PDF bằng Aspose.PDF cho .NET. Nhận hướng dẫn từng bước để nâng cao kỹ năng quản lý tài liệu của bạn. | | [Xác định mật khẩu đúng trong tệp PDF](./determine-correct-password/) | Mở khóa tệp PDF bằng mật khẩu đúng bằng Aspose.PDF cho .NET. Tìm hiểu cách xác định mật khẩu đúng một cách dễ dàng. | -| [Đăng nhập kỹ thuật số vào tệp PDF](./digitally-sign/) Tìm hiểu cách ký kỹ thuật số các tệp PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước để đảm bảo tài liệu của bạn an toàn và xác thực. | +| [Đăng nhập kỹ thuật số vào tệp PDF](./digitally-sign/) Tìm hiểu cách ký kỹ thuật số các tệp PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước để đảm bảo tài liệu của bạn an toàn và xác thực. | | [Ký số có dấu thời gian trong tệp PDF](./digitally-sign-with-time-stamp/) | Tìm hiểu cách ký kỹ thuật số vào PDF có dấu thời gian bằng Aspose.PDF cho .NET. Hướng dẫn từng bước này bao gồm các điều kiện tiên quyết, thiết lập chứng chỉ, dấu thời gian và nhiều hơn nữa. | | [Mã hóa tệp PDF](./encrypt/) | Tìm hiểu cách mã hóa tệp PDF của bạn một cách dễ dàng bằng Aspose.PDF cho .NET. Bảo mật thông tin nhạy cảm với hướng dẫn từng bước dễ dàng của chúng tôi. | | [Trích xuất hình ảnh](./extracting-image/) | Dễ dàng học cách trích xuất hình ảnh từ PDF bằng Aspose.PDF cho .NET. Làm theo hướng dẫn từng bước của chúng tôi để trích xuất hình ảnh liền mạch. | | [Trích xuất thông tin chữ ký](./extract-signature-info/) | Tìm hiểu cách trích xuất chữ ký số và thông tin chứng chỉ từ tài liệu PDF bằng Aspose.PDF cho .NET. Hướng dẫn từng bước đầy đủ dành cho nhà phát triển C#. | | [Kiểm tra chữ ký PDF trong C# – Cách đọc tệp PDF đã ký](./check-pdf-signatures-in-c-how-to-read-signed-pdf-files/) | Học cách kiểm tra và đọc các chữ ký PDF bằng C# với Aspose.PDF cho .NET trong hướng dẫn chi tiết. | -| [Có được bảo vệ bằng mật khẩu không](./is-password-protected/) Tìm hiểu cách kiểm tra xem tệp PDF có được bảo vệ bằng mật khẩu hay không bằng Aspose.PDF cho .NET trong hướng dẫn từng bước toàn diện này. | +| [Có được bảo vệ bằng mật khẩu không](./is-password-protected/) Tìm hiểu cách kiểm tra xem tệp PDF có được bảo vệ bằng mật khẩu hay không bằng Aspose.PDF cho .NET trong hướng dẫn từng bước toàn diện này. | | [Thiết lập quyền trong tệp PDF](./set-privileges/) | Tìm hiểu cách thiết lập quyền PDF bằng Aspose.PDF cho .NET với hướng dẫn từng bước này. Bảo mật tài liệu của bạn một cách hiệu quả. | | [Ký bằng thẻ thông minh sử dụng chữ ký tệp PDF](./sign-with-smart-card-using-pdf-file-signature/) | Tìm hiểu cách ký tệp PDF bằng thẻ thông minh với Aspose.PDF cho .NET. Thực hiện theo hướng dẫn từng bước này để có chữ ký số an toàn. | | [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# với Aspose.PDF – hướng dẫn đầy đủ](./verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/) | Hướng dẫn chi tiết cách xác minh chữ ký PDF bằng Aspose.PDF trong C#. | +| [Xác thực chữ ký số PDF với Aspose.PDF](./pdf-signature-tutorial-validate-a-pdf-digital-signature-with/) | Học cách xác thực chữ ký số trong tài liệu PDF bằng Aspose.PDF cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/pdf/vietnamese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md b/pdf/vietnamese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md new file mode 100644 index 0000000000..6f49b28e50 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-08-08 +description: Hướng dẫn chữ ký PDF cho thấy cách xác thực chữ ký số PDF bằng các tùy + chọn xác thực chữ ký và mã C# – hướng dẫn nhanh từng bước. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- pdf signature tutorial +- validate pdf digital signature +- signature validation options +- validate pdf signature +- check pdf signature +language: vi +lastmod: 2026-08-08 +og_description: Hướng dẫn chữ ký PDF sẽ hướng dẫn bạn cách xác thực chữ ký số PDF + bằng Aspose.PDF. Tìm hiểu cách cấu hình các tùy chọn xác thực chữ ký và kiểm tra + kết quả. +og_image_alt: Diagram illustrating a pdf signature tutorial workflow +og_title: hướng dẫn chữ ký pdf – xác thực chữ ký số PDF trong C# +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: pdf signature tutorial that shows how to validate PDF digital signature + using signature validation options and C# code – quick step‑by‑step guide + headline: 'pdf signature tutorial: validate a PDF digital signature with Aspose.PDF' + type: TechArticle +tags: +- PDF +- Digital Signature +- Aspose.PDF +- C# +title: 'Hướng dẫn chữ ký PDF: xác thực chữ ký số PDF bằng Aspose.PDF' +url: /vi/net/programming-with-security-and-signatures/pdf-signature-tutorial-validate-a-pdf-digital-signature-with/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# hướng dẫn chữ ký pdf – xác thực chữ ký số PDF trong C# + +Nếu bạn cần một **pdf signature tutorial** cho thấy chính xác cách xác thực chữ ký số PDF, hướng dẫn này sẽ đáp ứng nhu cầu của bạn. Bạn sẽ thấy cách tải một PDF đã ký, cấu hình **signature validation options**, chạy quá trình xác thực và hiển thị kết quả — tất cả bằng mã C# rõ ràng, có thể chạy được. + +Xác thực chữ ký PDF là điều cần thiết khi bạn xử lý hợp đồng, hoá đơn hoặc bất kỳ tài liệu pháp lý nào. Hướng dẫn này đi qua toàn bộ quy trình, để bạn có thể tích hợp kiểm tra chữ ký vào ứng dụng của mình mà không phải đoán đoán các lời gọi API nào cần thiết. + +## Những gì bạn sẽ đạt được + +* Tải một tệp PDF đã ký bằng Aspose.PDF. +* Thiết lập **signature validation options** như thuật toán băm. +* Gọi phương thức `Validate` để **validate pdf digital signature**. +* In ra thông báo “Signature valid” rõ ràng trên console. + +**Yêu cầu trước** + +* .NET 6.0 (hoặc phiên bản mới hơn) đã được cài đặt. +* Visual Studio 2022 (hoặc bất kỳ IDE C# nào). +* Gói NuGet Aspose.PDF for .NET (`Aspose.Pdf`). + +> **Pro tip:** Sử dụng phiên bản mới nhất của Aspose.PDF để hỗ trợ các thuật toán SHA‑3 và cải thiện hiệu năng xác thực. + +## Bước 1: Cài đặt gói NuGet Aspose.PDF + +Mở dự án của bạn trong Visual Studio và chạy lệnh sau trong Package Manager Console: + +```bash +Install-Package Aspose.Pdf +``` + +Gói này sẽ thêm không gian tên `Aspose.Pdf`, chứa lớp `Document` và các API liên quan đến chữ ký mà bạn sẽ sử dụng. + +## Bước 2: Tải tài liệu PDF đã ký + +Dòng mã đầu tiên tạo một đối tượng `Document` đại diện cho tệp PDF trên đĩa. + +```csharp +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +// Load the signed PDF document +var document = new Document("YOUR_DIRECTORY/signed.pdf"); +``` + +*Why this matters:* Lớp `Document` phân tích cấu trúc PDF, cung cấp bộ sưu tập `Signatures` chứa tất cả các chữ ký số được nhúng. Nếu đường dẫn tệp không đúng, sẽ ném ra ngoại lệ, vì vậy hãy kiểm tra đường dẫn trước khi chạy chương trình. + +## Bước 3: Cấu hình tùy chọn xác thực chữ ký + +Bạn có thể tùy chỉnh quá trình xác thực bằng lớp `SignatureValidationOptions`. Trong hướng dẫn này chúng ta chỉ định thuật toán băm, nhưng bạn cũng có thể thiết lập kiểm tra thu hồi chứng chỉ, xác thực dấu thời gian, và nhiều hơn nữa. + +```csharp +// Set up validation options – here we use SHA‑3 256 +var validationOptions = new SignatureValidationOptions +{ + // Choose the hash algorithm that matches the signing process + HashAlgorithm = HashAlgorithm.SHA3_256 +}; +``` + +*Why this matters:* Thuật toán băm phải khớp với thuật toán được sử dụng khi tạo chữ ký. Sử dụng thuật toán không khớp sẽ khiến việc xác thực thất bại ngay cả khi chữ ký khác đúng. + +## Bước 4: Xác thực chữ ký đầu tiên + +Hầu hết các PDF chỉ chứa một chữ ký, nhưng bộ sưu tập `Signatures` có thể chứa nhiều. Ví dụ này xác thực mục đầu tiên (`[0]`). Phương thức `Validate` trả về một giá trị Boolean cho biết thành công hay không. + +```csharp +// Validate the first signature using the configured options +bool isSignatureValid = document.Signatures[0].Validate(validationOptions); +``` + +*Edge case:* Nếu PDF không có chữ ký nào, `document.Signatures.Count` sẽ bằng `0` và việc truy cập `[0]` sẽ ném ra `IndexOutOfRangeException`. Hãy bảo vệ bằng một kiểm tra đơn giản: + +```csharp +if (document.Signatures.Count == 0) +{ + Console.WriteLine("No signatures found in the PDF."); + return; +} +``` + +## Bước 5: Hiển thị kết quả xác thực + +Cuối cùng, ghi kết quả ra console. Bước này minh họa kết quả **check pdf signature** ở định dạng dễ đọc cho con người. + +```csharp +// Output the validation status +Console.WriteLine($"Signature valid: {isSignatureValid}"); +``` + +Khi bạn chạy chương trình, bạn sẽ thấy: + +``` +Signature valid: True +``` + +Nếu chữ ký bị hỏng, sử dụng thuật toán không được hỗ trợ, hoặc chứng chỉ bị thu hồi, đầu ra sẽ là `False`. + +## Ví dụ đầy đủ, có thể chạy + +Sao chép đoạn mã sau vào một dự án console mới (`dotnet new console`) và thay thế `YOUR_DIRECTORY/signed.pdf` bằng đường dẫn tới tệp PDF đã ký của bạn. + +```csharp +using System; +using Aspose.Pdf; +using Aspose.Pdf.Signatures; + +namespace PdfSignatureValidation +{ + class Program + { + static void Main() + { + // Step 1: Load the signed PDF document + var document = new Document("YOUR_DIRECTORY/signed.pdf"); + + // Guard against missing signatures + if (document.Signatures.Count == 0) + { + Console.WriteLine("No signatures found in the PDF."); + return; + } + + // Step 2: Configure signature validation options (e.g., specify the hash algorithm) + var validationOptions = new SignatureValidationOptions + { + // Use the same hash algorithm that was used during signing + HashAlgorithm = HashAlgorithm.SHA3_256 + }; + + // Step 3: Validate the first signature using the configured options + bool isSignatureValid = document.Signatures[0].Validate(validationOptions); + + // Step 4: Display the validation result + Console.WriteLine($"Signature valid: {isSignatureValid}"); + } + } +} +``` + +### Kết quả mong đợi + +``` +Signature valid: True +``` + +Nếu chữ ký không vượt qua xác thực, console sẽ hiển thị `Signature valid: False`. + +## Các câu hỏi thường gặp và khắc phục sự cố + +| Câu hỏi | Trả lời | +|----------|--------| +| **Nếu PDF sử dụng thuật toán băm khác?** | Thay đổi `HashAlgorithm` trong `SignatureValidationOptions` để khớp, ví dụ `HashAlgorithm.SHA256`. | +| **Làm sao để xác thực tất cả các chữ ký trong PDF đa chữ ký?** | Duyệt qua `document.Signatures` và gọi `Validate` cho mỗi mục. | +| **Tôi có thể kiểm tra chuỗi tin cậy của chứng chỉ ký không?** | Đặt `validationOptions.CheckCertificateRevocation = true` và tùy chọn cung cấp một `CertificateStore` tùy chỉnh để bao gồm các chứng chỉ gốc tin cậy. | +| **Nếu tôi cần hỗ trợ xác thực dấu thời gian?** | Bật `validationOptions.CheckTimestamp = true`. Aspose.PDF sẽ xác thực token dấu thời gian được nhúng. | +| **Có cách nào để lấy chi tiết lỗi xác thực không?** | Sử dụng `ValidateEx(validationOptions, out ValidationResult result)`; `result` chứa `ErrorMessage` và `ErrorCode` cho mỗi lỗi. | + +## Các bước tiếp theo + +* Khám phá **validate pdf signature** cho nhiều chữ ký bằng cách lặp qua `document.Signatures`. +* Kết hợp hướng dẫn này với **check pdf signature** trong một Web API để cung cấp xác thực thời gian thực cho các hợp đồng được tải lên. +* Tìm hiểu sâu hơn về **signature validation options** như kiểm tra CRL/OCSP, xác thực dấu thời gian và kho tin cậy tùy chỉnh. + +Bạn giờ đã có một **pdf signature tutorial** hoàn chỉnh, cho thấy cách **validate pdf digital signature** bằng Aspose.PDF trong C#. Hãy tự do điều chỉnh mã cho quy trình của mình, thêm logging, hoặc tích hợp vào các pipeline xử lý tài liệu lớn hơ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 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. + +- [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/) +- [Hướng dẫn chữ ký số Aspose Pdf Net](/pdf/spanish/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-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md b/pdf/vietnamese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md new file mode 100644 index 0000000000..4392d8ccc2 --- /dev/null +++ b/pdf/vietnamese/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-08-08 +description: Xác thực chữ ký PDF trong C# bằng Aspose.PDF. Tìm hiểu cách xác thực + chữ ký số PDF và liệt kê các chữ ký PDF chỉ trong vài dòng mã. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- verify PDF signature +- validate digital signature PDF +- list PDF signatures +language: vi +lastmod: 2026-08-08 +og_description: Xác minh chữ ký PDF trong C# với Aspose.PDF. Hướng dẫn này cho bạn + cách xác thực chữ ký số PDF, liệt kê các chữ ký PDF và xử lý các chữ ký bị xâm phạm + một cách hiệu quả. +og_image_alt: Screenshot of C# code that verifies PDF signature using Aspose.PDF +og_title: Xác minh chữ ký PDF trong C# – hướng dẫn nhanh Aspose.PDF +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: Verify PDF signature in C# using Aspose.PDF. Learn how to validate + digital signature PDF and list PDF signatures in just a few lines of code. + headline: Verify PDF signature in C# with Aspose.PDF – complete guide + type: TechArticle +tags: +- Aspose.PDF +- C# +- Digital Signature +- PDF processing +title: Xác minh chữ ký PDF trong C# với Aspose.PDF – hướng dẫn đầy đủ +url: /vi/net/programming-with-security-and-signatures/verify-pdf-signature-in-c-with-aspose-pdf-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Xác thực chữ ký PDF trong C# với Aspose.PDF – hướng dẫn đầy đủ + +Nếu bạn cần **verify PDF signature** trong một ứng dụng .NET, hướng dẫn này sẽ cho bạn cách ngắn gọn để thực hiện với Aspose.PDF. Bạn sẽ học cách **validate digital signature PDF**, **list PDF signatures**, và phát hiện các chữ ký bị xâm phạm chỉ trong vài dòng mã. + +Hướng dẫn bao gồm mọi thứ từ cài đặt thư viện đến xử lý các trường hợp đặc biệt như tài liệu chưa ký hoặc PDF được mã hoá. Khi hoàn thành, bạn sẽ có thể tích hợp việc xác thực chữ ký vào bất kỳ dự án C# nào, đảm bảo tính xác thực của các tệp PDF đến. + +**Prerequisites** + +- .NET 6.0 trở lên (mã cũng hoạt động với .NET Framework 4.6+). +- Kiến thức cơ bản về C# và Visual Studio (hoặc bất kỳ IDE nào bạn thích). +- Giấy phép Aspose.PDF cho .NET (phiên bản dùng thử miễn phí dùng để đánh giá). + +Nếu bạn đáp ứng các yêu cầu này, bạn đã sẵn sàng bắt đầu xác thực chữ ký PDF. + +## Xác thực chữ ký PDF – thiết lập dự án + +1. **Add the Aspose.PDF NuGet package** + Open the Package Manager Console and run: + + ```bash + Install-Package Aspose.PDF + ``` + + This brings in the `Aspose.Pdf` assembly and its dependencies. + +2. **Import the required namespaces** + + ```csharp + using System; + using System.Linq; + using Aspose.Pdf; + ``` + + `System.Linq` gives you the `Any` extension used later, while `Aspose.Pdf` contains the `Document` and `Signature` classes. + +## Tải tài liệu PDF + +Bước chức năng đầu tiên là mở PDF bạn muốn kiểm tra. Aspose.PDF đọc tệp vào bộ nhớ, cho phép bạn truy vấn các chữ ký của nó. + +```csharp +// Replace the path with the location of your PDF file +string pdfPath = @"C:\Docs\signed.pdf"; + +using (var document = new Document(pdfPath)) +{ + // The document is now loaded and ready for signature operations +} +``` + +> **Why this matters** – Việc tải tài liệu trong một khối `using` đảm bảo rằng handle của tệp được giải phóng kịp thời, ngăn ngừa các vấn đề khóa tệp trong các dịch vụ chạy lâu. + +## Liệt kê chữ ký PDF + +Trước khi bạn xác thực một chữ ký, bạn có thể muốn biết có bao nhiêu chữ ký tồn tại. Bước này minh họa khả năng **list PDF signatures**. + +```csharp +using (var document = new Document(pdfPath)) +{ + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s) in the document."); + + foreach (var sig in signatures) + { + Console.WriteLine($"- Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } +} +``` + +**Explanation** + +- `document.Signatures` trả về một collection của các đối tượng `Signature`. +- `Count` cho bạn biết có bao nhiêu chữ ký. +- Mỗi `Signature` cung cấp siêu dữ liệu như `Id`, `SignatureType`, và `Reason`, có thể hữu ích cho nhật ký kiểm toán. + +**Edge case** – Nếu PDF không có chữ ký, `Count` sẽ là `0` và vòng lặp sẽ không thực thi. Bạn có thể xử lý trường hợp này một cách nhẹ nhàng: + +```csharp +if (!signatures.Any()) +{ + Console.WriteLine("The document contains no digital signatures."); + return; +} +``` + +## Xác thực chữ ký số PDF – phát hiện chữ ký bị xâm phạm + +Bây giờ bạn đã có thể liệt kê các chữ ký, nhiệm vụ chính là **verify PDF signature** tính toàn vẹn. Aspose.PDF cung cấp thuộc tính `IsCompromised`, trả về `true` khi hàm băm mật mã của chữ ký không còn khớp với nội dung tài liệu. + +```csharp +using (var document = new Document(pdfPath)) +{ + bool anyCompromised = document.Signatures.Any(sig => sig.IsCompromised); + + if (anyCompromised) + { + Console.WriteLine("Signature compromised"); + } + else + { + Console.WriteLine("Signature OK"); + } +} +``` + +**Why this works** + +- `Signature.IsCompromised` thực hiện một quá trình xác thực mật mã đầy đủ bằng chuỗi chứng chỉ nhúng. +- Toán tử LINQ `Any` dừng lại ở chữ ký bị xâm phạm đầu tiên, giúp kiểm tra hiệu quả ngay cả với tài liệu có nhiều chữ ký. + +### Xử lý nhiều chữ ký riêng lẻ + +Nếu bạn cần biết chữ ký cụ thể nào bị lỗi, hãy lặp thay vì dùng `Any`: + +```csharp +using (var document = new Document(pdfPath)) +{ + foreach (var sig in document.Signatures) + { + Console.WriteLine($"Signature {sig.Id} status: {(sig.IsCompromised ? "Compromised" : "Valid")}"); + } +} +``` + +**Pro tip:** **Mẹo chuyên nghiệp:** Lưu kết quả xác thực cùng với `sig.Id` vào cơ sở dữ liệu để phân tích pháp y sau này. + +## Xuất kết quả và xem xét các trường hợp đặc biệt + +Dưới đây là một chương trình hoàn chỉnh, có thể chạy được, kết hợp các bước ở trên. Nó tải PDF, liệt kê tất cả các chữ ký, xác thực chúng và in ra kết quả rõ ràng. + +```csharp +using System; +using System.Linq; +using Aspose.Pdf; + +class VerifyPdfSignatureDemo +{ + static void Main() + { + // Path to the PDF you want to check + string pdfPath = @"C:\Docs\signed.pdf"; + + // Load the document inside a using block to release resources automatically + using (var document = new Document(pdfPath)) + { + // ----- List PDF signatures ----- + var signatures = document.Signatures; + Console.WriteLine($"Found {signatures.Count} signature(s)."); + + if (!signatures.Any()) + { + Console.WriteLine("No signatures to validate."); + return; + } + + foreach (var sig in signatures) + { + Console.WriteLine($"Signature ID: {sig.Id}"); + Console.WriteLine($" Type: {sig.SignatureType}"); + Console.WriteLine($" Reason: {sig.Reason}"); + } + + // ----- Validate digital signature PDF ----- + bool anyCompromised = signatures.Any(sig => sig.IsCompromised); + + Console.WriteLine(); + Console.WriteLine(anyCompromised + ? "Signature compromised" + : "Signature OK"); + } + } +} +``` + +**Kết quả mong đợi (chữ ký hợp lệ)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature OK +``` + +**Kết quả mong đợi (chữ ký bị xâm phạm)** + +``` +Found 1 signature(s). +Signature ID: 1 + Type: DigitalSignature + Reason: Approved +Signature compromised +``` + +### Những lỗi thường gặp và cách tránh + +| Pitfall | Solution | +|---------|----------| +| PDF được bảo vệ bằng mật khẩu. | Gửi mật khẩu qua `document.Encrypt.Decrypt(password)` trước khi truy cập `Signatures`. | +| Chưa thiết lập giấy phép Aspose.PDF. | Sử dụng `License license = new License(); license.SetLicense("Aspose.Pdf.lic");` để tránh watermark đánh giá. | +| PDF lớn gây tiêu thụ bộ nhớ cao. | Xử lý tệp ở chế độ streaming (`Document.Load(stream)`) thay vì tải toàn bộ tệp một lúc. | + +## Kết luận + +Bạn đã biết cách **verify PDF signature** trong C# bằng Aspose.PDF, cách **validate digital signature PDF**, và cách **list PDF signatures** để báo cáo hoặc kiểm toán. Ví dụ đầy đủ minh họa việc tải tài liệu, liệt kê các chữ ký, kiểm tra từng chữ ký có bị xâm phạm hay không, và xử lý các trường hợp đặc biệt thường gặp. + +Các bước tiếp theo bạn có thể khám phá: + +- **Validate timestamp tokens** để đảm bảo chữ ký được tạo trước khi chứng chỉ hết hạn. +- **Extract signer certificates** (`sig.Certificate`) để thực hiện xác thực trust‑store tùy chỉnh. +- **Integrate with ASP.NET Core** để tự động từ chối các PDF tải lên không vượt qua xác thực. + +Hãy tự do thử nghiệm với nhiều chữ ký, logic xác thực tùy chỉnh, hoặc các thư viện PDF thay thế. Nếu bạn thấy hướng dẫn này hữu ích, hãy chia sẻ với đồng nghiệp hoặc thêm các mẹo của bạn trong phần bình luận. + +## 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ẽ, dựa 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. + +- [Cách xác thực PDF – Xác thực chữ ký PDF với Aspose](/pdf/english/net/digital-signatures/how-to-verify-pdf-validate-pdf-signature-with-aspose/) +- [xác thực chữ ký pdf trong C# – Hướng dẫn đầy đủ để xác thực chữ ký số PDF](/pdf/english/net/digital-signatures/verify-pdf-signature-in-c-complete-guide-to-validate-digital/) +- [Aspose Pdf Net Xác thực chữ ký số](/pdf/hindi/net/digital-signatures/aspose-pdf-net-verify-digital-signature/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/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/text-operations/_index.md b/pdf/vietnamese/net/text-operations/_index.md index bc72f7a0dd..5fe4ea2e03 100644 --- a/pdf/vietnamese/net/text-operations/_index.md +++ b/pdf/vietnamese/net/text-operations/_index.md @@ -164,6 +164,9 @@ Hướng dẫn mã cho Aspose.PDF Net ### [Định dạng văn bản trong tệp PDF được gắn thẻ bằng Aspose.PDF cho .NET | Hướng dẫn tạo PDF dễ tiếp cận và thẩm mỹ](./style-text-tagged-pdfs-aspose-pdf-net/) Tìm hiểu cách định dạng văn bản trong các tài liệu PDF được gắn thẻ với Aspose.PDF cho .NET. Hướng dẫn này bao gồm cài đặt, kỹ thuật và ứng dụng thực tế để tăng cường khả năng truy cập. +### [Cách tóm tắt PDF với Aspose.Pdf.AI – hướng dẫn](./how-to-summarize-pdf-with-aspose-pdf-ai-guide/) +Hướng dẫn chi tiết cách sử dụng Aspose.Pdf.AI để tóm tắt nội dung PDF một cách nhanh chóng và hiệu quả. + ## Tài nguyên bổ sung - [Aspose.PDF cho Tài liệu Net](https://docs.aspose.com/pdf/net/) diff --git a/pdf/vietnamese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md b/pdf/vietnamese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md new file mode 100644 index 0000000000..8382f06363 --- /dev/null +++ b/pdf/vietnamese/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-08-08 +description: Cách tóm tắt PDF với Aspose.Pdf.AI – tìm hiểu cách tóm tắt PDF bằng AI, + tạo bản tóm tắt PDF và lưu bản tóm tắt dưới dạng PDF. Mã hoàn chỉnh và các thực + tiễn tốt nhất. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to summarize pdf +- summarize pdf with ai +- generate pdf summary +- save summary as pdf +language: vi +lastmod: 2026-08-08 +og_description: Cách tóm tắt PDF bằng Aspose.Pdf.AI. Hướng dẫn này chỉ cho bạn cách + tóm tắt PDF bằng AI, tạo bản tóm tắt PDF và lưu bản tóm tắt dưới dạng PDF chỉ trong + vài dòng C#. +og_image_alt: Diagram showing how to summarize PDF using Aspose.Pdf.AI +og_title: Cách tóm tắt PDF bằng Aspose.Pdf.AI – hướng dẫn từng bước +schemas: +- author: Aspose + dateModified: '2026-08-08' + description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + headline: How to summarize PDF with Aspose.Pdf.AI – guide + type: TechArticle +- description: How to summarize PDF with Aspose.Pdf.AI – learn how to summarize PDF + with AI, generate a PDF summary, and save summary as PDF. Complete code and best + practices. + name: How to summarize PDF with Aspose.Pdf.AI – guide + steps: + - name: Why this structure matters + text: '* **`await using`** disposes the `OpenAIClient` automatically, releasing + HTTP connections. * **`Path.Combine`** builds OS‑independent paths, preventing + bugs on Windows vs. Linux. * **Temperature** controls creativity; `0.5` gives + a balanced, factual summary. * **`GetSummaryAsync`** returns plain tex' + - name: Summarize only a portion of the document + text: 'If you need to **summarize pdf with ai** for a specific chapter, extract + that range first:' + - name: Adjusting the length of the summary + text: 'You can influence length by adding a custom prompt:' + - name: Handling API errors + text: 'Network glitches or quota limits raise `Aspose.Pdf.AI.Exceptions.AIException`. + Wrap the call in a `try / catch` block:' + - name: Saving the summary in a custom layout + text: '`SaveSummaryAsync` writes plain text. To style the PDF (add title, header, + or branding), create a new `PdfDocument` and insert the summary manually:' + type: HowTo +tags: +- Aspose.Pdf.AI +- PDF processing +- AI summarization +title: Cách tóm tắt PDF bằng Aspose.Pdf.AI – hướng dẫn +url: /vi/net/text-operations/how-to-summarize-pdf-with-aspose-pdf-ai-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách tóm tắt PDF với Aspose.Pdf.AI – hướng dẫn + +Nếu bạn cần **cách tóm tắt PDF** một cách nhanh chóng và đáng tin cậy, bạn có thể để mô hình AI thực hiện công việc nặng. Hướng dẫn này cho bạn thấy chính xác cách tóm tắt PDF bằng AI, tạo bản tóm tắt PDF, và lưu bản tóm tắt dưới dạng PDF bằng SDK Aspose.Pdf.AI cho .NET. Bạn sẽ nhận được một ví dụ đầy đủ, có thể chạy được và giải thích từng dòng để bạn có thể áp dụng giải pháp này vào dự án của mình. + +Hướng dẫn bao gồm: + +* Chuẩn bị thư mục nguồn và khóa API +* Tạo một `OpenAIClient` để giao tiếp với mô hình +* Cấu hình các tùy chọn tóm tắt như temperature và đường dẫn tài liệu +* Xây dựng một `SummaryCopilot` và lấy văn bản tóm tắt một cách bất đồng bộ +* Lưu bản tóm tắt đã tạo trở lại file PDF + +Không cần dịch vụ bên ngoài nào ngoài endpoint của OpenAI, và mã hoạt động với .NET 6+ và Aspose.Pdf.AI 23.7 (hoặc mới hơn). + +## Yêu cầu trước + +* **.NET 6 SDK** (hoặc bất kỳ phiên bản .NET mới hơn nào) +* **Aspose.Pdf.AI for .NET** – cài đặt qua NuGet: `dotnet add package Aspose.Pdf.AI` +* Một **khóa API OpenAI** có quyền truy cập vào mô hình bạn muốn sử dụng (ví dụ, `gpt‑4o`) +* Một file PDF bạn muốn tóm tắt (ví dụ sử dụng `SampleDocument.pdf`) + +Đảm bảo thư mục bạn chỉ định trong `dataDirectory` tồn tại và ứng dụng có quyền đọc/ghi. + +## Bước 1: Thiết lập cấu trúc dự án + +Tạo một dự án console (hoặc tích hợp mã vào bất kỳ ứng dụng .NET nào hiện có). `Program.cs` tối thiểu trông như sau: + +```csharp +using System; +using System.IO; +using System.Threading.Tasks; +using Aspose.Pdf.AI; +using Aspose.Pdf.AI.OpenAI; + +namespace PdfSummarizer +{ + class Program + { + // Async Main is required because the SDK uses async I/O. + static async Task Main(string[] args) + { + // ------------------------------------------------- + // 1️⃣ Define the folder that holds your source PDF + // ------------------------------------------------- + string dataDirectory = Path.Combine( + AppContext.BaseDirectory, "Data"); // Adjust as needed + + // ------------------------------------------------- + // 2️⃣ Create an OpenAI client using your API key + // ------------------------------------------------- + await using var client = OpenAIClient + .CreateWithApiKey("YOUR_API_KEY") // <-- replace with your key + .Build(); + + // ------------------------------------------------- + // 3️⃣ Set up summary options – source document + creativity + // ------------------------------------------------- + var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.5) // lower = more deterministic + .WithDocument(Path.Combine(dataDirectory, "SampleDocument.pdf")); + + // ------------------------------------------------- + // 4️⃣ Build the Summary Copilot + // ------------------------------------------------- + var summaryCopilot = AICopilotFactory + .CreateSummaryCopilot(client, summaryOptions); + + // ------------------------------------------------- + // 5️⃣ Generate the summary text (asynchronously) + // ------------------------------------------------- + string summaryText = await summaryCopilot.GetSummaryAsync(); + + Console.WriteLine("=== Summary ==="); + Console.WriteLine(summaryText); + Console.WriteLine("================"); + + // ------------------------------------------------- + // 6️⃣ Save the generated summary as a new PDF + // ------------------------------------------------- + string outputPath = Path.Combine(dataDirectory, "Summary_out.pdf"); + await summaryCopilot.SaveSummaryAsync(outputPath); + + Console.WriteLine($"Summary PDF saved to: {outputPath}"); + } + } +} +``` + +### Tại sao cấu trúc này lại quan trọng + +* **`await using`** tự động giải phóng `OpenAIClient`, giải phóng các kết nối HTTP. +* **`Path.Combine`** tạo các đường dẫn độc lập với hệ điều hành, ngăn ngừa lỗi trên Windows so với Linux. +* **Temperature** kiểm soát tính sáng tạo; `0.5` cho một bản tóm tắt cân bằng, thực tế. +* **`GetSummaryAsync`** trả về văn bản thuần, trong khi `SaveSummaryAsync` tạo một PDF đúng chuẩn, giữ nguyên phông chữ và bố cục. + +## Bước 2: Hiểu các tùy chọn tóm tắt + +Lớp `OpenAISummaryCopilotOptions` cho phép bạn tinh chỉnh quá trình tóm tắt: + +| Tùy chọn | Mục đích | Giá trị điển hình | +|----------|----------|-------------------| +| `WithTemperature(double)` | Kiểm soát tính ngẫu nhiên. `0.0` = quyết định, `1.0` = rất sáng tạo. | `0.3‑0.7` cho tài liệu kinh doanh | +| `WithDocument(string)` | Đường dẫn tới PDF nguồn. Phải là tệp có thể đọc được. | Bất kỳ đường dẫn tuyệt đối hoặc tương đối nào | +| `WithPrompt(string)` *(optional)* | Lời nhắc tùy chỉnh để hướng dẫn mô hình. | “Tóm tắt các phát hiện chính trong 150 từ.” | + +Nếu bạn có **PDF lớn** (hơn 10 MB hoặc nhiều trang), hãy cân nhắc chia tài liệu thành các phần nhỏ hơn trước khi tóm tắt để tránh lỗi giới hạn token. SDK không tự động chia; bạn có thể sử dụng `PdfDocument` từ `Aspose.Pdf` để trích xuất các trang và đưa chúng vào một cách tuần tự. + +## Bước 3: Chạy mã và xác minh đầu ra + +1. Đặt `SampleDocument.pdf` vào trong thư mục `Data` mà bạn đã tham chiếu. +2. Thay thế `"YOUR_API_KEY"` bằng khóa OpenAI thực tế của bạn. +3. Thực thi `dotnet run`. + +Bạn sẽ thấy hai phần trong console: + +``` +=== Summary === +[AI‑generated concise text here] +================ +Summary PDF saved to: C:\Path\To\Your\App\Data\Summary_out.pdf +``` + +Mở `Summary_out.pdf` bằng bất kỳ trình xem PDF nào – nó sẽ chứa cùng một văn bản tóm tắt, được định dạng với phông chữ mặc định. PDF này có thể tìm kiếm được hoàn toàn vì SDK nhúng văn bản dưới dạng trang PDF tiêu chuẩn. + +## Bước 4: Các biến thể phổ biến và xử lý trường hợp đặc biệt + +### Chỉ tóm tắt một phần của tài liệu + +Nếu bạn cần **tóm tắt pdf bằng ai** cho một chương cụ thể, hãy trích xuất phạm vi đó trước: + +```csharp +using Aspose.Pdf; + +// Load the source PDF +var source = new Document(Path.Combine(dataDirectory, "SampleDocument.pdf")); +var selected = new Document(); +selected.Pages.Add(source.Pages[5]); // page 5 only +selected.Save(Path.Combine(dataDirectory, "Chapter5.pdf")); +``` + +Sau đó chỉ định `WithDocument` tới `Chapter5.pdf`. + +### Điều chỉnh độ dài của bản tóm tắt + +Bạn có thể ảnh hưởng đến độ dài bằng cách thêm lời nhắc tùy chỉnh: + +```csharp +var summaryOptions = OpenAISummaryCopilotOptions + .Create() + .WithTemperature(0.4) + .WithDocument(pdfPath) + .WithPrompt("Provide a 200‑word executive summary."); +``` + +### Xử lý lỗi API + +Các lỗi mạng hoặc giới hạn hạn ngạch sẽ gây ra `Aspose.Pdf.AI.Exceptions.AIException`. Bao quanh lời gọi trong khối `try / catch`: + +```csharp +try +{ + string summaryText = await summaryCopilot.GetSummaryAsync(); + // ... save etc. +} +catch (AIException ex) +{ + Console.Error.WriteLine($"AI request failed: {ex.Message}"); + // Optional: retry logic or fallback to a local summarizer +} +``` + +### Lưu bản tóm tắt với bố cục tùy chỉnh + +`SaveSummaryAsync` ghi văn bản thuần. Để tạo kiểu PDF (thêm tiêu đề, đầu trang, hoặc thương hiệu), tạo một `PdfDocument` mới và chèn bản tóm tắt một cách thủ công: + +```csharp +var outDoc = new Document(); +var page = outDoc.Pages.Add(); +var text = new TextFragment(summaryText) +{ + // Example styling + Position = new Position(50, 750), + Font = FontRepository.FindFont("Arial"), + FontSize = 12, + TextState = { ForegroundColor = Color.Black } +}; +page.Paragraphs.Add(text); +outDoc.Save(outputPath); +``` + +## Bước 5: Mẹo hiệu năng và thực hành tốt + +* **Reuse the `OpenAIClient`** cho nhiều bản tóm tắt trong cùng một tiến trình – tạo client là rẻ, nhưng tái sử dụng `HttpClient` nền giảm thiểu việc cạn kiệt socket. +* **Cache the summary** nếu PDF nguồn không thay đổi; bạn có thể lưu văn bản vào cơ sở dữ liệu và bỏ qua API + +## Bạn Nên Học Gì Tiếp Theo? + +Các hướng dẫn sau đây bao phủ các chủ đề liên quan chặt chẽ, dựa 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, hoạt động với giải thích từng bước để giúp bạn nắm vững các tính năng API bổ sung và khám phá các cách triển khai thay thế trong dự án của mình. + +- [Cách Trích Xuất & Lưu Các Trang PDF Cụ Thể Sử Dụng Aspose.PDF cho .NET - Hướng Dẫn Toàn Diện](/pdf/english/net/document-manipulation/extract-save-pdf-pages-aspose-net/) +- [Cách Trích Xuất và Lưu Tệp Đính Kèm PDF Sử Dụng Aspose.PDF .NET: Hướng Dẫn Toàn Diện](/pdf/english/net/attachments-embedded-files/extract-pdf-attachments-aspose-pdf-net-guide/) +- [Cách Chuyển Đổi HTML sang PDF với Aspose.PDF .NET: Hướng Dẫn Đầy Đủ](/pdf/english/net/conversion-export/convert-html-pdf-aspose-dotnet-guide/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file